• Pic Basic Pro Warnings and Error Codes

    This is from the PBP directory, PM.TXT.

    The PM.TXT gives brief explanations of what the codes mean. Sometimes a little more explanation is needed.
    In the spirit of a wiki, if you have any tips/tricks to add to the codes let us know so we can add them.

    User added data will be in colored text.

    12. Warnings
    WARNINGS are just that, a warning. Your code will compile.

    100 Attempt to Skip MultiByte OpCode @ Address

    Indicates the current instruction is a multibyte Parallax instructions and
    that the previous instruction is attempting to skip it. Obviously, if this
    were done unintentionally, a successful skip would enter the current opcode

    101 Use of Local Label Prior to Use of Non-Local Label

    Indicates that a local label (i.e. starting with a colon) has been defined
    prior to the definition of a non-local label (i.e. a legal label name
    starting with other than a colon). Because local names depend on the named
    of last non-local label defined, this usage is obviously suspicious. The
    label generating the warning is not expanded as are other local labels (see
    Local Labels).

    102 Code Crosses Boundary @ Address

    The 12-bit, 14-bit and 16-bit 17Cxxx cores have paged architectures in
    which the normal incrementing of the PC doesn't extended into page select
    registers (PA0 & PA1 in 12-bit cores, PCLATH in the others). If a continuous
    block of code is generated across a page boundary and a forward jump is
    coded, the actual jump location will be to the previous page.

    104 Called Addresses must Reside in Lower Half of Page

    In the 12-bit core, the 9th bit of address is zeroed on calls. Thus, call
    destinations must reside in the lower 256 words of any 512 word page. This
    mistake is only a warning since calls made to the upper 256 words will alias
    to an address in the lower 256 words of the page.

    105 Bit Addresses are the Same

    This warning indicates that you have attempted to copy a bit to itself. The
    Parallax MOVB bit,bit instruction will correctly copy a bit to itself,
    although the operation has no useful applications.

    106 Register Addresses are the Same

    This warning indicates that you have attempted to copy a register to
    itself. While this is legal, it generates a MOVF and MOVWF instruction,
    placing the moved value in W and setting the Z flag. If your intentions are
    to set the Z flag according to contents of the specified register, the TEST
    instruction will do this in one word and without destroying the contents of

    13. Errors

    Unless specified otherwise, each of the following errors will terminate the
    assembly of the current line. If possible, the assembler will generate
    correct code (or at least the correct number of words) before the line is
    aborted. Assembly continues with the next line of source.

    Unless otherwise specified, the error report has no side effects other than
    to bump the error count.

    34 Block Overflow for #ENDCONFIG
    PBP3 fatal error. This means there is too much text within your config block.
    In this case, comments count too. Use shorter comments, and recompile.

    200 Instruction Restricted to 14-Bit Core

    The opcode of the specified line cannot be used for the 12-bit core:
    ADDLW #literal
    SUBLW #literal

    201 'Character' Expected

    The assembler expected, but didn't find, the specified character.

    202 Illegal Character 'Character'

    The assembler doesn't recognize the legal use of the specified character.

    203 '--' or '++' Expected

    The Parallax instruction MOVSZ (MOVe and Skip in Zero) must take one of two
    forms : MOVSZ W,++fr
    MOVSZ W,--fr

    204 'W' Expected as First Parameter

    The Parallax instruction MOVSZ (MOVe and Skip in Zero) must take one of two
    forms : MOVSZ W,++fr
    MOVSZ W,--fr

    205 Illegal Use of Keyword 'Keyword'

    Indicates that the specified identifier is a reserved word of the assembler
    and has been improperly used.

    206 CHECKSUM Not Supported in 14-Bit Core

    The CHECKSUM option may be used as the ID of a processor in the PIC16C5x
    family. This option is not legal on the 14-bit core.

    208 Illegal Use of SUB Instruction

    This error indicates an attempt was made to use the illegal instruction :
    SUB W,fr

    209 Indirect Jump Expected in Form of 'PC+W'

    This error indicates an attempt was made to use the illegal instruction :
    JMP PC+Expr

    210 Bit Addresses Must Differ

    The Parallax MOVB bit1,/bit2 instruction requires that the source and
    destination bits be different. An attempt to copy the complement of a bit
    to itself will result in the unconditional setting of the bit.

    211 Poorly Formed Numeric Constant 'Token'

    Indicates that the symbol is not a legally formed numeric token. If any
    initial portion of this token is a valid constant, that portion is
    converted and its value is used as the result of the token.

    212 Extra Tokens on End of Line

    Some initial portion of the current line assembled correctly, but
    additional assembly tokens remain unprocessed. This is often the result of
    a syntax error (extra parameters, misplaced or missing punctuation, etc.).
    Code is generated for the correct initial portion of the line.

    213 IRPC Expected Id or String Constant

    The second parameter of the IRPC macro definition is the item (scanned
    character by character) which drives the macro expansion. This item must be
    either an identifier or a quote-enclosed string constant.

    214 IRPC Missing Replacement Parameter

    The first parameter of the IRPC macro definition is the variable which
    accepts the characters scanned from the second parameter. The first
    parameter must be an identifier unique within the definition of the macro.

    215 Attempt to Redefine Macro 'Identifier'

    An attempt was made to redefine the named macro.

    216 Attempt to Redefine Macro Parameter 'Identifier'

    Each parameter and local variable of a macro must be unique. This error
    indicates that a parameter or local name has been duplicated.

    217 Attempt to Generate Code in Non-Code Segment

    Due to the Harvard Architecture (split code and data spaces) of the PICmicro
    MCUs, instructions may only be executed from CODE space (ROM). This error
    indicates that an attempt was made to generate opcodes in the data or
    EEPROM segments. In general, only the DS pseudo-op is legal in the data
    segment and DS, DB and DW are the only legal pseudo-ops in the EEPROM

    218 Address Limit of Address Exceeded

    This error indicates that current segment has overflowed.

    219 Collision in HEX File @ Address

    This error indicates that more than one word has been generated for the
    specified ROM address.

    220 Illegal Bit Number

    In the PICmicro MCU (and most processors), the bits of a byte are numbered
    from 0 (the least significant bit - LSB) to 7 (the most significant bit -
    MSB). This error indicates that the specified bit number is not in the range
    of 0 to 7.

    221 Illegal Bit Address

    The four basic bit operators of the PICmicro MCU take either an 8-bit field
    (12-bit core) or a 10-bit field (14-bit core). This is composed of a register
    address and a bit number. If this combination exceeds the 8 or 10 bit range
    for the selected processor, this error is generated. Note that only the
    composite value is checked - this check in no way guarantees the validity
    of the bit number or the register address. These value are, however,
    checked whenever they can be checked as separate parameters.

    222 Illegal Destination Specifier

    Many Microchip instructions expect the second parameter to specify the
    destination of the operation result : 0 if the result is also the source
    register, 1 if the result is to be placed in W. This error indicates that a
    numeric expression was used for this parameter which neither evaluated to 0
    nor 1. For clarity, the second parameter can be omitted to use the source
    register as the destination and W can be used to specify W as the

    223 Illegal TriState File Register Address Register

    The TRIS instruction may only operate upon registers 5, 6, or 7. This error
    indicates that the specified register value was other than 5, 6, or 7. The
    equivalent Parallax instruction may also generate this error :
    MOV !Register,Source

    224 Keyword Directive Only for Use in Macros

    Some keywords (such as LOCAL and ENDM) only have meaning in the definition
    of a macro body. This error indicates that an attempt was made to use such
    a keyword in some other context.

    225 Undefined Symbol 'Identifier'

    A reference was made to the specified symbol although no such symbol was
    detected in the first pass of the assembler.

    226 Numeric Constant or Symbol Name Expected

    A legal expression is a well formed sentence containing operators and
    terminals from which values for the operators are derived. This error
    indicates that an expression terminal was encountered which didn't evaluate
    to a numeric value.

    227 Divide by Zero

    An attempt was made (in the source) to divide by zero at assembly time.

    228 Modulus by Zero

    An attempt was made (in the source) to take the modulus of a number by zero
    at assembly time.

    229 Device Doesn't Support EEPROM

    An attempt was made to generate values in the EEPROM segment for a device
    which doesn't support EEPROM.

    230 Collision in EEPROM @ Address

    An attempt was made to generate more that one value for the specified
    EEPROM location.

    231 Attempt to Redefine 'Identifier'

    An attempt was made to assign a new value to a symbol defined either as a
    program label or using the EQU pseudo-op. A common (but confusing) source
    of this error can result from different flows through conditional assembly
    blocks between the first and second passes. While this type of variant
    programming can be done, it is very tricky and poor programming practice -
    it should be avoided.

    232 File Name Expected

    Indicates that the parameter specified for the current INCLUDE or MACLIB
    pseudo-op is not a quoted string.

    233 String Expression Expected for Title

    The TITLE pseudo-op is used to replace the normal copyright notice of the
    listing with a customized header. This new header must be specified as a
    quoted string and is the only parameter of the TITLE pseudo-op.

    234 Identifier Expected

    The IFDEF and IFNDEF conditional assembly pseudo-ops require one identifier
    as it parameter. This error is generated whenever this parameter is other
    than a legal identifier.

    235 Opcode Expected Instead of 'Token'

    Any text starting in column 2 or later which is not a commented is assumed
    to either be an opcode, a pseudo-op or the name of a defined macro. All
    other tokens will generate this error.

    236 Label 'Identifier' Undefined in Pass 0

    This error indicates that an attempt was made to define the specified
    symbol in pass 1, although no definition was made for the symbol during
    pass 0. This is almost always the result of different flows through
    conditional assembly blocks between pass 0 and pass 1.

    237 IRP Missing Replacement Parameter

    The IRP macro takes two parameters. The first parameter is an identifier
    which is substituted on each expansion with the next item from the comma
    separated list (the second parameter). This error indicates that the
    identifier expected for the first parameter of the IRP statement was not

    238 Preprocessor Directive Expected

    239 Instruction Restricted to 16-Bit Core

    The opcode of the specified line cannot be used for the 12-bit or 14-bit

    240 String Expression Expected for MESSG

    The MESSG pseudo-op requires the string to be output.

    14. Fatal Errors

    300 Too Many Errors

    The assembler can generated an unlimited number of warnings, but the number
    of errors is limited. While this value defaults to 15, it can be changed
    using the -G option. This fatal error is generated when this allowance is

    301 Out of Memory

    Indicates that the symbol table, macro table and other memory requirements
    for internal bookkeeping have exceeded the memory capacity of your PC.
    While this error message is unlikely, it can occur on limited or heavily
    burdened systems. If not already at the 640K limit for conventional memory,
    add memory. Unloading or loading high of TSRs and network drivers can
    increase usable memory. Memory may also be gained by reducing the number of
    BUFFERS and FILES allocated in CONFIG.SYS.

    302 Unable to Open File 'Filename'

    Indicates that DOS was unable to open the specified file. This is either
    because the file could not be found or not enough file handles were
    available (this usually only occurs with deep nesting of INCLUDE and MACLIB
    statements). If the file exists, make sure it resides in the current
    directory. If the file is an INCLUDE or MACLIB file, also check in the
    default include directory. While this defaults to the INC subdirectory of
    the directory where PM.EXE is kept, it can be modified using the -I option.
    If the file is found as described above, try increasing the number of FILES
    in CONFIG.SYS.

    303 Unable to Create File 'Filename'

    Indicates that DOS was unable to create the specified file. This is either
    because there are not enough file handles available or there is not enough
    space on the destination disk. If there is adequate disk space available,
    try increasing the number of FILES in CONFIG.SYS.

    304 No Source File Specified

    This error is generated if PM is invoked with options, but without the name
    of a source file. If PM is invoked with no options and no source name, a
    brief help screen is displayed.

    305 Unable to Write to File 'Filename'

    Indicates that DOS was unable to write to the specified file. This usually
    results when there is not enough space on the destination disk or the
    specified file has some special write protection (such as DOS SHARE.EXE).

    306 Page Width must be 80 to 255 Columns

    The PAGE pseudo-op is used to specify the size of the listing page. The
    first parameter is used to specify the width of the page. This value must
    be between 80 and 255, inclusive.

    307 Illegal Device Type

    An attempt was made to use an illegal specifier with the DEVICE statement.
    Such values would have 10 or 11 as the two most significant bits.

    308 Macro Buffer Overflow

    An attempt was made to define a macro which was larger than 4K. This
    usually indicates a missing ENDM pseudo-op.