; ***************************************************************
; * 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 __16lf1783
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 __16f1786
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 __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