; *************************************************************** ; * Copyright (C) 2009, Embed Inc (http://www.embedinc.com) * ; * * ; * Permission to copy this file is granted as long as this * ; * copyright notice is included in its entirety at the * ; * beginning of the file, whether the file is copied in whole * ; * or in part and regardless of whether other information is * ; * added to the copy. * ; * * ; * The contents of this file may be used in any way, * ; * commercial or otherwise. This file is provided "as is", * ; * and Embed Inc makes no claims of suitability for a * ; * particular purpose nor assumes any liability resulting from * ; * its use. * ; *************************************************************** ; ; Declare defaults for all the assembly values required by STD.INS.ASPIC. ; Applications should include this file, set any values they know and care ; about, then include STD.INS.ASPIC. ; ; See the comments in STD.INS.ASPIC for a description of all the ; assembly values it needs. ; radix dec ;set default radix to decimal ; ; Standard constants. ; true equ 1 ;boolean values for assembler variables false equ 0 ;******************************************************************************* ; ; Create the PICNAME_MPASM constant. This is the name of the PIC model that ; MPLAB is being told we are using. Some newer PICs aren't supported bt MPASM ; anymore. In those cases, we create our own include file, and tell MPASM we ; are using a PIC that it does support and that has the same instruction set. ; ; The PICNAME constant must already be set. It is the upper case name of the ; PIC model we are actually using. ; /pick one by picname /option "16F15224" /const picname_mpasm string = "16F15386" /optionelse /const picname_mpasm string = picname /endpick ;******************************************************************************* ; ; Handle the version and sequence numbers for this build. This section is ; only run if the following preprocessor constants exist: ; ; SRCDIR - The name of the directory within (cog)source containing the ; source code of the project. Builds are run in a directory of the same ; name in (cog)src. ; ; FWNAME - Name of the firmware project. The name of ordinary source ; modules would start with this name followed by a underscore. For ; example, if FWNAME was "blah", then the standard project init module ; would be called "blah_init.aspic". ; ; This constant is allowed to not exist. If so, then BUILDNAME must be ; defined, and FWNAME will be defined here the same as BUILDNAME. ; ; BUILDNAME - This constant is optional. It specifies the subdirectory ; within the source directory where the source code for this build is ; stored. When this variable does not exist or is the empty string, flat ; structure is assumed where all source files are directly in the source ; directory. ; ; If the boolean variable MAKE_VERSION exists and is set to TRUE, then the ; version include file is always made and the preprocessing is aborted ; immediately afterwards. Otherwise, the version include file is only made if ; it does not already exist. In that case, processing continues and uses the ; new version include file. The sequence number is updated whenever the ; version include file is written. MAKE_VERSION is intended to be set from ; the command line by the build script to explicitly create the version ; include file before any modules are built for real. ; ; If the boolean variable MAKE_VERSION_CONTINUE exists and is set to TRUE, ; then the version include file is always made and processing continues ; normally. This switch can be used by single-module projects. ; /block /var local fnam string ;customized firmware version info include file name /var local snam string ;sequence file name /var local ver integer ;firmware version number /var local seq integer ;firmware sequence number /if [not [exist "buildname"]] then ;make sure BUILDNAME exists, empty string if needed /const buildname = "" /endif /if [not [exist "fwname"]] then /if [= buildname ""] /then ;both FWNAME and BUILDNAME not defined /quit /else ;default FWNAME to BUILDNAME /const fwname = buildname /endif /endif /if [not [exist "srcdir"]] then /quit /endif /if [not [exist "make_version"]] then /var new make_version bool = false /endif /if [not [exist "make_version_continue"]] then /const make_version_continue bool = false /endif /set fnam [tnam [str "(cog)src/" srcdir "/" fwname "_fwver.ins.aspic"]] /if [or make_version make_version_continue [not [exist fnam fnam]]] then ; ; Create the <fwname>_FWVER.INS.ASPIC file. FNAM is set to the name of the ; file. This file defines the FWVER and FWSEQ constants both in MPASM and in ; the preprocessor. The sequence number is advanced after being written to ; the file. ; /if [= buildname ""] /then ;flat source structure /set snam [str "(cog)source/" srcdir "/" fwname] /else ;this build has its own directory /set snam [str "(cog)source/" srcdir "/" buildname "/seq/" fwname] /endif /set ver [seq snam 0 1] ;get the version number, we don't change this /set snam [str snam ver] /set seq [seq snam 1 1] ;set this sequence number, advance it for next time ; ; Write the version and sequence numbers to the VER include file. The ; pathname of that include file is in FNAM. ; /writepush fnam ;open the version include file /write "/const fwver integer = " ver /write "/const fwseq integer = " seq /write "fwver equ " ver /write "fwseq equ " seq /writepop ;close the version include file ; ; Create the <fwname>.PICNAME file. This file contains just the model name ; of the particular PIC this code is being built for. The PIC name is taken ; from the PICNAME preprocessor constant, which is normally defined in the ; <fwname>lib.ins.aspic file before this file is included. ; /writepush [str "(cog)src/" srcdir "/" fwname ".picname"] /write picname_mpasm /writepop /show " Building " [ucase fwname] " version " ver " sequence " seq /if [not make_version_continue] then ;just make version, don't process ? /stop /endif /endif ; ; The version include file exists and its name is in FNAM. ; /include fnam /endblock ;done setting firmware version and sequence number fam_12 set 0 ;init all family type flags to false fam_16c5 set 0 fam_16 set 0 fam_16b set 0 fam_17 set 0 fam_18 set 0 ;******************************************************************************* ; ; Set the processor and include the processor-specific include file if the new ; preprocessor interface for selecting the processor is being used. ; Previously, The xxxLIB.INS.ASPIC file would set the processor, include the ; processor file, then include this file. This was originally all done with ; MPASM directives, then with preprocessor directives which included setting ; the PREPIC constant PROCESSOR to the PIC name string. The new and more ; automatic way sets the PREPIC constant PICNAME to the processor name string, ; then only includes this file. The remaining canned initialization is now ; done here, since it can all be derived from the processor name. ; ; To avoid breaking old source code, the processor-specific initialization is ; only performed here if the PREPIC constant PROCESSOR does not exist but ; PICNAME does. ; /var new pic_emb_defined bool = false ;init to Embed proc-specific state not defined /block /if [not [exist "picname"]] then //quit if using the old method /quit /endif /if [exist "processor"] then /quit /endif /var local tnam /const processor = picname // // Use the Embed include file for this processor, if it exists. // /set tnam [tnam "(cog)source/pic/inc/" [lcase processor] ".ins.aspic"] /if [exist tnam fnam] then /write /write ";*******************************************************************************" /write "; Starting Embed PIC-specific include file" /write "; " tnam /write ";*******************************************************************************" /write /include tnam /write /write ";*******************************************************************************" /write "; Back from Embed PIC-specific include file" /write "; " tnam /write ";*******************************************************************************" /write /set pic_emb_defined true /quit /endif // // No Embed include file for this processor was found. Use the Microchip // file. // /set tnam [dir "(cog)extern/mplab/mpasm.exe"] //directory include files are in /append tnam "/p" [lcase processor] ".inc" //full include file name /set tnam [tnam tnam] //fixed absolute pathname of the include file /write processor [chars processor] /write /write ";*******************************************************************************" /write "; Starting Microchip include file" /write "; " tnam /write ";*******************************************************************************" /write /include tnam /write /write ";*******************************************************************************" /write "; Back from Microchip include file" /write "; " tnam /write ";*******************************************************************************" /write radix dec ;make sure default radix still decimal after include file /endblock ;******************************************************************************* ; ; Set global defaults. These values are always defined, but may be altered ; below depending on the specific processor type this code is running on. ; ; See the comments at the beginning of STD.INS.ASPIC for a detailed ; description of these settings. ; /if [not pic_emb_defined] then stacksize set 16 ;software stack size numregs set 13 ;number of general registers, REG0 - REGn regstart set h'70' ;starting address of general registers (REG0 address) nregbanks set 4 ;init to worst case for bank switching ncodepages set 4 ;init to worst case for page switching commregs_first set 1 ;init to no common RAM between banks commregs_last set 0 uart_type set 0 ;init to no UART present ifdef txsta uart_type set 2 ;init to 16F876 type UART if present endif ifdef txsta1 uart_type set 2 ;init to 16F876 type UART if present, multiple UARTs endif ifdef baudctl uart_type set 3 ;init to 18F1320 type UART if BAUDCTL register exists endif ifdef baudcon uart_type set 3 endif ifdef baudcon1 uart_type set 3 endif adr_word set 1 ;init to 1 address increment per prog memory word create_flags set true ;init to create FLAGS/GFLAGS byte create_tempw set true ;init to create TEMPW temporary W save area byte using_interrupts set true ;interrupts in use INTR_OFF, INTR_ON do something bra_bug set false ;doesn't corrupt address on interrupt during BRA ; ; Initialize the internal passive pullup configuration for this ; processor. Some customization may need to be performed for specific ; processors. ; ii set 0 ;init to port A has no pullups ifdef not_gppu ii set 1 ;port A has pullups endif ifdef not_rapu ii set 1 ;port A has pullups endif ifdef wpua ii set 1 ;port A has pullups endif if ii ;port A weak pullups enable bit exists ? pullups_porta set b'00110111' ;assume traditional port A, RA3 open drain pullups_porta set pullups_porta | h'80000000' ;init to all together on or off ifdef wpu ;separate GPIO port pullups enable register ? pullups_porta set pullups_porta & h'7FFFFFFF' ;indicate can be separately enabled endif ifdef wpua ;separate PORTA pullups enable register ? pullups_porta set pullups_porta & h'7FFFFFFF' ;indicate can be separately enabled endif ifdef wpuda ;separate PORTA pullups enable register ? pullups_porta set pullups_porta & h'7FFFFFFF' ;indicate can be separately enabled endif endif ifdef not_rbpu ;port B weak pullups enable bit exists ? pullups_portb set b'11111111' ;assume all pins have weak pullups pullups_portb set pullups_portb | h'80000000' ;init to all together on or off endif ifdef not_rabpu ;port B weak pullups enable bit exists ? pullups_portb set b'11111111' ;assume all pins have weak pullups pullups_portb set pullups_portb | h'80000000' ;init to all together on or off endif ifdef wpub ;separate pullups enable register ? pullups_portb set b'11111111' ;indicate can be separately enabled endif ii set 1 ;init to port D has pullups ifndef rdpu ii set 0 endif ifndef porte ii set 0 endif if ii ;port D has pullups pullups_portd set b'11111111' ;indicate pins that have pullups pullups_portd set pullups_portd | h'80000000' ;indicate all together on or off endif ;******************************************************************************* ; ; Set INTR_OFF_BUG appropriately. This should really be handled by the ; specific section for each processor. However, we received the list of ; processors that exhibit this bug and don't want to look up all the other ; details of each of these processors and make a custom section for them right ; now. ; intr_off_bug set false ;init to this processor does not have interrupt off bug ifdef __14000 intr_off_bug set true endif ifdef __16c61 intr_off_bug set true endif ifdef __16c62 intr_off_bug set true endif ifdef __16c63a intr_off_bug set true endif ifdef __16c64 intr_off_bug set true endif ifdef __16c65 intr_off_bug set true endif ifdef __16c65b intr_off_bug set true endif ifdef __16c71 intr_off_bug set true endif ifdef __16c73 intr_off_bug set true endif ifdef __16c73b intr_off_bug set true endif ifdef __16c74 intr_off_bug set true endif ifdef __16c74b intr_off_bug set true endif ifdef __17c42 intr_off_bug set true endif ;******************************************************************************* ; ; Determine the processor family. Exactly one of the following symbols will ; be set to 1 (true). All of these symbols have already been initialized to ; false. ; ; FAM_12 - 12 bit instruction word like 12C508, ... ; ; FAM_16C5 - 12 bit instruction word like 16C54, ... ; ; FAM_16 - 14 bit instruction word. All the remaining 16xxx devices like ; 16C77, ... ; ; FAM_16B - Enhanced 14 bit core, like 16F1823. ; ; FAM_17 - Old 16 bit instruction word like 17C42, ... ; ; FAM_18 - New 16 bit instruction word like 18C242, ... ; ;********** ; ; Check for known FAM_12 devices. ; ifdef __10f200 fam_12 set 1 nregbanks set 1 ncodepages set 1 numregs set 0 regstart set h'10' stacklast set h'1F' stacksize set 0 endif ifdef __10f202 fam_12 set 1 nregbanks set 1 ncodepages set 1 numregs set 0 regstart set h'08' stacklast set h'1F' stacksize set 0 endif ifdef __10f204 fam_12 set 1 nregbanks set 1 ncodepages set 1 numregs set 0 regstart set h'10' stacklast set h'1F' stacksize set 0 endif ifdef __10f206 fam_12 set 1 nregbanks set 1 ncodepages set 1 numregs set 0 regstart set h'08' stacklast set h'1F' stacksize set 0 endif ifdef __10f220 fam_12 set 1 nregbanks set 1 ncodepages set 1 numregs set 0 regstart set h'10' stacklast set h'1F' stacksize set 0 endif ifdef __10f222 fam_12 set 1 nregbanks set 1 ncodepages set 1 numregs set 0 regstart set h'09' stacklast set h'1F' stacksize set 0 endif ifdef __12f508 fam_12 set 1 nregbanks set 1 ncodepages set 1 numregs set 0 regstart set h'07' stacklast set h'1F' stacksize set 0 endif ifdef __12c508a fam_12 set 1 nregbanks set 1 ncodepages set 1 numregs set 9 regstart set h'07' stacklast set h'1F' stacksize set 0 endif ifdef __12c509a fam_12 set 1 nregbanks set 2 ncodepages set 2 numregs set 9 regstart set h'07' stacklast set h'3F' stacksize set 0 endif ifdef __16f506 fam_12 set 1 nregbanks set 1 ncodepages set 2 numregs set 9 regstart set h'10' stacklast set h'1F' stacksize set 0 endif ;********** ; ; Check for known FAM_16C5 devices. ; ;********** ; ; Check known FAM_16 devices. ; ifdef __12f629 fam_16 set 1 nregbanks set 2 ncodepages set 1 commregs_first set h'20' commregs_last set h'5F' regstart set h'20' stacklast set h'5F' stacksize set 16 ee_start set h'2100' endif ifdef __12f675 fam_16 set 1 nregbanks set 2 ncodepages set 1 commregs_first set h'20' commregs_last set h'5F' regstart set h'20' stacklast set h'5F' stacksize set 16 ee_start set h'2100' endif ifdef __16f610 fam_16 set 1 nregbanks set 2 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 32 endif ifdef __16f616 fam_16 set 1 nregbanks set 2 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'BF' stacksize set 32 endif ifdef __16f688 fam_16 set 1 nregbanks set 3 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'16F' stacksize set 32 endif ifdef __16f630 fam_16 set 1 nregbanks set 2 ncodepages set 1 commregs_first set h'20' commregs_last set h'5F' regstart set h'20' stacklast set h'5F' stacksize set 16 ee_start set h'2100' endif ifdef __16f636 fam_16 set 1 nregbanks set 4 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' regstart set h'70' stacklast set h'BF' stacksize set 32 ee_start set h'2100' endif ifdef __16f676 fam_16 set 1 nregbanks set 2 ncodepages set 1 commregs_first set h'20' commregs_last set h'5F' regstart set h'20' stacklast set h'5F' stacksize set 16 ee_start set h'2100' endif ifdef __16f677 fam_16 set 1 nregbanks set 4 ncodepages set 1 commregs_first set h'F0' commregs_last set h'7F' regstart set h'70' stacklast set h'BF' stacksize set 32 ee_start set h'2100' pullups_porta set b'00110111' pullups_portb set b'11110000' endif ifdef __16f684 fam_16 set 1 nregbanks set 2 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'BF' stacksize set 32 ee_start set h'2100' endif ifdef __16c622a fam_16 set 1 nregbanks set 2 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 32 endif ifdef __16f627a fam_16 set 1 nregbanks set 3 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 32 ee_start set h'2100' endif ifdef __16f628 fam_16 set 1 nregbanks set 3 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 32 ee_start set h'2100' endif ifdef __16f628A fam_16 set 1 nregbanks set 3 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'14F' stacksize set 48 ee_start set h'2100' endif ifdef __16f648A fam_16 set 1 nregbanks set 3 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'EF' stacksize set 32 ee_start set h'2100' endif ifdef __16c66 fam_16 set 1 nregbanks set 4 ncodepages set 4 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 40 endif ifdef __16c77 fam_16 set 1 nregbanks set 4 ncodepages set 4 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 40 endif ifdef __16f716 fam_16 set 1 nregbanks set 2 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'BF' stacksize set 32 endif ifdef __16f720 fam_16 set 1 nregbanks set 4 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'BF' stacksize set 32 endif ifdef __16f721 fam_16 set 1 nregbanks set 4 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'BF' stacksize set 32 endif ifdef __16f722 fam_16 set 1 nregbanks set 4 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'BF' stacksize set 32 endif ifdef __16f723 fam_16 set 1 nregbanks set 4 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'EF' stacksize set 40 endif ifdef __16f724 fam_16 set 1 nregbanks set 4 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'EF' stacksize set 40 endif ifdef __16f726 fam_16 set 1 nregbanks set 4 ncodepages set 4 commregs_first set h'70' commregs_last set h'7F' stacklast set h'EF' stacksize set 40 endif ifdef __16f727 fam_16 set 1 nregbanks set 4 ncodepages set 4 commregs_first set h'70' commregs_last set h'7F' stacklast set h'EF' stacksize set 40 endif ifdef __16c923 fam_16 set 1 nregbanks set 2 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 32 endif ifdef __16c924 fam_16 set 1 nregbanks set 2 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 32 endif ifdef __16f876 fam_16 set 1 nregbanks set 4 ncodepages set 4 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 40 ee_start set h'2100' endif ifdef __16f877 fam_16 set 1 nregbanks set 4 ncodepages set 4 commregs_first set h'70' commregs_last set h'7F' stacklast set h'6F' stacksize set 40 ee_start set h'2100' endif ifdef __16f882 fam_16 set 1 nregbanks set 4 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'BF' stacksize set 32 ee_start set h'2100' endif ifdef __16f883 fam_16 set 1 nregbanks set 4 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'16F' stacksize set 32 ee_start set h'2100' endif ifdef __16f884 fam_16 set 1 nregbanks set 4 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'16F' stacksize set 32 ee_start set h'2100' endif ifdef __16f886 fam_16 set 1 nregbanks set 4 ncodepages set 4 commregs_first set h'70' commregs_last set h'7F' stacklast set h'1EF' stacksize set 32 ee_start set h'2100' endif ifdef __16f887 fam_16 set 1 nregbanks set 4 ncodepages set 4 commregs_first set h'70' commregs_last set h'7F' stacklast set h'1EF' stacksize set 32 ee_start set h'2100' endif ifdef __16f913 fam_16 set 1 nregbanks set 4 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'EF' stacksize set 32 ee_start set h'2100' endif ;********** ; ; Enhanced 14 bit core devices. ; ifdef __12f1501 fam_16b set 1 ;enhanced 14 bit core part nregbanks set 32 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'4F' stacksize set 24 progadrb set 2 create_tempw set false endif ifdef __16f1782 fam_16b set 1 ;enhanced 14 bit core part nregbanks set 32 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'33F' stacksize set 32 ee_start set h'F000' progadrb set 2 create_tempw set false endif ifdef __16f1783 fam_16b set 1 ;enhanced 14 bit core part nregbanks set 32 ncodepages set 2 commregs_first set h'70' commregs_last set h'7F' stacklast set h'2EF' stacksize set 32 ee_start set h'F000' progadrb set 2 create_tempw set false bra_bug set true ;interrupt during BRA corrupts PC pullups_porta set h'FF' endif ifdef __16lf1786 fam_16b set 1 ;enhanced 14 bit core part nregbanks set 32 ncodepages set 4 commregs_first set h'70' commregs_last set h'7F' stacklast set h'64F' stacksize set 48 ee_start set h'F000' progadrb set 2 create_tempw set false bra_bug set true ;interrupt during BRA corrupts PC pullups_porta set h'FF' endif ifdef __16f1823 fam_16b set 1 ;enhanced 14 bit core part nregbanks set 32 ncodepages set 1 commregs_first set h'70' commregs_last set h'7F' stacklast set h'BF' stacksize set 32 ee_start set h'F000' progadrb set 2 create_tempw set false endif ;********** ; ; Check known FAM_17 devices. ; ifdef __17c752 fam_17 set 1 nregbanks set 7 ncodepages set 1 stacklast set h'FD' stacksize set 40 regstart set h'1B' uart_type set 1 endif ifdef __17c756a fam_17 set 1 nregbanks set 8 ncodepages set 2 stacklast set h'FD' stacksize set 40 regstart set h'1B' uart_type set 1 endif ;********** ; ; Check for known FAM_18 devices. ; ifdef __18f252 fam_18 set 1 nregbanks set 6 acclast set h'7F' ncodepages set 1 stacklast set h'80' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f2520 fam_18 set 1 nregbanks set 6 acclast set h'7F' ncodepages set 1 stacklast set h'80' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f452 fam_18 set 1 nregbanks set 6 ncodepages set 1 acclast set h'7F' stacklast set h'80' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f2450 fam_18 set 1 nregbanks set 2 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 40 regstart set 0 numregs set 16 adr_word set 2 usb_bd0 set h'400' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f2455 fam_18 set 1 nregbanks set 8 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'400' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18lf2455 fam_18 set 1 nregbanks set 8 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'400' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f4450 fam_18 set 1 nregbanks set 2 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 40 regstart set 0 numregs set 16 adr_word set 2 usb_bd0 set h'400' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f4455 fam_18 set 1 nregbanks set 8 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'400' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f4550 fam_18 set 1 nregbanks set 8 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'400' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f45k22 fam_18 set 1 nregbanks set 6 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 progadrb set 2 endif ifdef __18f2480 fam_18 set 1 nregbanks set 3 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f25k80 fam_18 set 1 nregbanks set 16 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f2550 fam_18 set 1 nregbanks set 8 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'400' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f13k50 fam_18 set 1 nregbanks set 3 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 32 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'200' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18lf13k50 fam_18 set 1 nregbanks set 3 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 32 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'200' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f14k50 fam_18 set 1 nregbanks set 3 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 48 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'200' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18lf14k50 fam_18 set 1 nregbanks set 3 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 48 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'200' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f24k50 fam_18 set 1 nregbanks set 8 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 48 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'400' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f25k50 fam_18 set 1 nregbanks set 8 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 48 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' usb_bd0 set h'400' ;start of USB buffer descriptor 0 progadrb set 2 ifndef uown uown equ 7 ;define UOWN bit in USB BD status byte endif endif ifdef __18f2423 fam_18 set 1 nregbanks set 3 acclast set h'7F' ncodepages set 1 stacklast set h'80' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f2580 fam_18 set 1 nregbanks set 6 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f4480 fam_18 set 1 nregbanks set 3 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 proglast set h'3FFF' endif ifdef __18f4580 fam_18 set 1 nregbanks set 6 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 /const proglast integer = 16#7FFF /const prog_erasesz integer = 64 ;program memory erase block size, bytes /const prog_writesz integer = 32 ;program memory write block size, bytes proglast set [v proglast] endif ifdef __18f1220 fam_18 set 1 nregbanks set 1 acclast set h'7F' ncodepages set 1 stacklast set h'80' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f1320 fam_18 set 1 nregbanks set 1 acclast set h'7F' ncodepages set 1 stacklast set h'80' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f6520 fam_18 set 1 nregbanks set 8 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f6527 fam_18 set 1 nregbanks set 16 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f6627 fam_18 set 1 nregbanks set 16 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 3 endif ifdef __18f4220 fam_18 set 1 nregbanks set 2 acclast set h'7F' ncodepages set 1 stacklast set h'80' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f4320 fam_18 set 1 nregbanks set 2 acclast set h'7F' ncodepages set 1 stacklast set h'80' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f6680 fam_18 set 1 nregbanks set 13 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f67j60 fam_18 set 1 nregbanks set 15 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 3 cfg_adr set h'1FFF8' endif ifdef __18f26j50 fam_18 set 1 nregbanks set 15 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 usb_bd0 set h'400' ;start of USB buffer descriptor 0 cfg_adr set h'0FFF8' endif ifdef __18f47j53 fam_18 set 1 nregbanks set 15 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 progadrb set 3 usb_bd0 set h'D00' ;start of USB buffer descriptor 0 cfg_adr set h'1FFF8' endif ifdef __18f25k20 fam_18 set 1 nregbanks set 15 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'F00000' progadrb set 2 endif ifdef __18f25q10 fam_18 set 1 nregbanks set 15 acclast set h'5F' ncodepages set 1 stacklast set h'60' stacksize set 64 regstart set 0 numregs set 16 adr_word set 2 ee_start set h'310000' progadrb set 2 endif if fam_18 ifndef cfg_adr cfg_adr set h'300000' ;default config words start for 18F endif endif ; ; End of section unique to the specific processors we support. This section ; was skipped if a Embed include file for the specific processor was used. In ; that case, all the Embed-specific settings were made in that include file. ; /endif ;end of used Microchip-supplied processor-specific include file ; ;******************************************************************************* ;********** ; ; Make sure exactly ONE of the FAM_xxx symbols is set to 1. ; ii set 0 if fam_12 ii set ii + 1 endif if fam_16c5 ii set ii + 1 endif if fam_16 ii set ii + 1 endif if fam_16b ii set ii + 1 endif if fam_17 ii set ii + 1 endif if fam_18 ii set ii + 1 endif if ii < 1 error "Specific processor not identified in STD_DEF.INS.ASPIC" endif if ii > 1 error "Multiple processor families identified in STD_DEF.INS.ASPIC" endif if fam_18 errorlevel -230 ;shut up about __CONFIG deprecated endif errorlevel -311 ;don't whine about HIGH argument larger than FFFFh errorlevel -231 ;don't whine about label in RAM without reserved mem