Release Notes for MPASM™ Assembler v5.36
11 June 2010

Table of Contents
  1. Important Backward Compatibility Notes
  2. Command Line Device Options Supported
  3. Operating System Support List
  4. What's New in v5.3x
  5. Repairs and Enhancements Made Since v5.30
  6. Known Problems
  7. Using MPASM Assembler
  8. Customer Support
  1. Important Backward Compatibility Notes

  2. COFF File Format Replaces COD File Format

    Due to the various limitations of COD format, versions 5.3 and above of MPASM do not generate COD format as the output of an absolute assembly file. COFF format replaces COD format in all cases. This should not affect ordinary users because COD format was only used by MPLAB IDE versions prior to v8.20 to display debug information. MPLAB IDE v8.20 and later recognize the COFF output of MPASM in absolute mode, and this transition should not impose noticeable change in the expected behavior of the language tool suite.

    Also due to the elimination of the COD Format from MPASM ouput, and the use of COFF format instead, new flags have been added to COFF files that are generated by C18 v3.30 and MPASM v5.30. These flags are only recognized by MPLINK v4.30 and above. MPLINK v4.30 and above continue to recognize the old COFF files. However, earlier versions of MPLINK may not recognize new COFF files.

    Note to Users of Parts with External Memory Bus

    The default behavior of MPLINK does not allow defining code or data in memory address locations outside the boundaries of linker script regions. Existing projects in absolute mode that use these address spaces will encounter a linker error indicating that section '.org_xx' can not fit the absolute section. The workaround for this error is to add a new region to the default linker script to define the user defined addresses for the linker. For more information, see the MPLINK User's Guide. The default linker script is located at the LKR directory at the same location where the mplink.exe executable exists.

    For example, if you see the following error message in the output window of your MPLAB IDE when building your Absolute assembly project:

      Executing: "C:\MCC18\bin\mplink.exe" /p18F8527 "test.o" /z__MPLAB_BUILD=1 /o"test.cof" /M"test.map" /W /x MPLINK 4.30, Linker Copyright (c) 2009 Microchip Technology Inc.
      Error - section '.org_6' can not fit the absolute section. Section '.org_6' start=0x0000c020, length=0x00000006
    

    open the file "C:\MCC18\bin\LKR\18f8527_g.lkr" in a text editor and add the line:

      CODEPAGE   NAME=unimplemented   START=0xC000   END=0x1FFFFF  PROTECTED
    
    at line 32 after #FI and before the idlocs region.

    This problem only applicable since MPLINK v4.30.

    MPLINK Linker and MPLAB IDE Compatibility

    Due to a change in COFF file format, MPASM Assembler v5.00 and later will not be compatible with versions of MPLINK Linker prior to v4.00 or versions of the MPLAB IDE prior to v7.21.

    MPASM Assembler v5.00 and later will have backward compatibility to earlier versions at the source level only. Any existing object files or libraries compiled with earlier versions of the tools will not link using new versions of the tools. They will need to be recompiled from source.

    If the user attempts to use this release with object files or libraries compiled with earlier versions of MPLAB C18, MPLINK Linker, and MPASM Assembler, the error message that will be received will be similar to:

    Error - Coff file format for 'C:\mcc18\lib/c018i.o' is out of date.
    

    If the user attempts to use an old version of MPLINK Linker to link object files or libraries compiled with this release, the error message that will be received will be similar to:

    Error - Coff file format for 'C:\mcc18\lib/c018i.o' does not appear to be a valid COFF file.

  3. Command Line Device Options Supported

  4. 10F200       10F202       10F204       10F206
    10F220       10F222
    
    12C508       12C508A      12C509       12C509A
    12C671       12C672
    12CE518      12CE519      12CE673      12CE674
    12CR509A    
    12F1822      12F1840*
    12F508       12F509       12F510       12F519
    12F520       12F609       12F615       12F617 
    12F629       12F635       12F675       12F683
    12HV609      12HV615
    12LF1822     12LF1840* 
    
    14000
    
    16C432       16C433       16C505       16C52
    16C54        16C54A       16C54B       16C54C
    16C55        16C554       16C557       16C558
    16C55A       16C56        16C56A       16C57
    16C57C       16C58A       16C58B
    16C5X
    16C61        16C62        16C620       16C620A
    16C621       16C621A      16C622       16C622A
    16C62A       16C62B       16C63        16C63A
    16C64        16C642       16C64A       16C65
    16C65A       16C65B       16C66        16C662
    16C67        16C71        16C710       16C711
    16C712       16C715       16C716       16C717
    16C72        16C72A       16C73        16C73A
    16C73B       16C74        16C745
    16C74A       16C74B       16C76        16C765
    16C77        16C770       16C771       16C773
    16C774       16C781       16C782       16C84
    16C923       16C924       16C925       16C926
    16CE623      16CE624      16CE625
    16CR54       16CR54A      16CR54B      16CR54C
    16CR56A      16CR57A      16CR57B      16CR57C
    16CR58A      16CR58B      16CR62       16CR620A
    16CR63       16CR64       16CR65       16CR72
    16CR83       16CR84
    16CXX        
    16F1516*     16F1517*     16F1518*     16F1519*
    16F1823      16F1824      16F1825      16F1826      
    16F1827      16F1828      16F1829      16F1933      
    16F1934      16F1936      16F1937      16F1938 
    16F1939      16F1946      16F1947 
    16F505       16F506       16F526       16F54
    16F57
    16F59        16F610       16F616       16F627
    16F627A      16F628       16F628A      16F630
    16F631       16F636       16F639       16F648A
    16F676       16F677       16F684       16F685
    16F687       16F688       16F689       16F690
    16F707       16F716       16F72        16F720 
    16F721       16F722       16F722A      16F723
    16F723A 
    16F724       16F726       16F727       16F73
    16F737       16F74        16F747       16F76
    16F767
    16F77        16F777       16F785       16F818
    16F819       16F83        16F84        16F84A
    16F87        16F870       16F871       16F872
    16F873       16F873A      16F874       16F874A
    16F876       16F876A      16F877       16F877A
    16F88        16F882       16F883       16F884
    16F886       16F887       16F913       16F914
    16F916       16F917       16F946
    
    16LF720      16LF721      16LF722A     16LF723 
    16LF1516*    16LF1517*    16LF1518*    16LF1519*
    16LF1823     16LF1824     16LF1825     16LF1826     
    16LF1827     16LF1828     16LF1829 
    16LF1933     16LF1934     16LF1936     16LF1937 
    16LF1938     16LF1939     16LF1946     16LF1947 
    16LF707      16LF722      16LF723      16LF724
    16LF726      16LF727
    
    16HV540      16HV610      16HV616      16HV785
    
    17C42        17C42A       17C43        17C44
    17C752       17C756       17C756A      17C762
    17C766
    17CR42       17CR43
    17CXX
    
    18C242       18C252       18C442       18C452 
    18C601       18C658       18C801       18C858 
    
    18F1220      18F1230      18F1320      18F1330
    18F13K22     18F13K50     18F14K22     18F14K50
    18F2220      18F2221      18F2320      18F2321      
    18F2331      18F23K20     18F23K22     18F2410 
    18F242       18F2420      18F2423      18F2431 
    18F2439      18F2450      18F2455      18F2458
    18F248       18F2480      18F24J10     18F24J11  
    18F24J50     18F24K20     18F24K22 
    18F2510      18F2515      18F252       18F2520 
    18F2523      18F2525      18F2539      18F2550 
    18F2553      18F258       18F2580      18F2585 
    18F25J10     18F25J11     18F25J50     18F25K20     
    18F25K22     18F25K80  
    18F2610      18F2620      18F2680      18F2682      
    18F2685      18F26J11     18F26J13     18F26J50     
    18F26J53     18F26K20     18F26K22     18F26K80 
    18F27J13     18F27J53 
    18F4220      18F4221      18F4320      18F4321
    18F43K20     18F4331      18F43K22 
    18F4410      18F442       18F4420 
    18F4423      18F4431      18F4439      18F4450
    18F4455      18F4458      18F448       18F4480 
    18F44J10     18F44J11     18F44J50     18F44K20     
    18F44K22     18F4510      18F4515 
    18F452       18F4520      18F4523      18F4525 
    18F4539      18F4550      18F4553      18F458 
    18F4580      18F4585      18F45J10     18F45J11 
    18F45J50     18F45K20     18F45K22     18F45K80 
    18F4610      18F4620      
    18F4680      18F4682      18F4685      18F46J11 
    18F46J13     18F46J50     18F46J53     18F46K20     
    18F46K22     18F46K80 
    18F47J13     18F47J53     18F6310      
    18F6390      18F6393      18F63J11     18F63J90
    18F6410      18F6490      18F6493 
    18F64J11     18F64J90     18F6520 
    18F6525      18F6527      18F6585      18F65J10 
    18F65J11     18F65J15     18F65J50     18F65J90
    18F65K22     18F65K80     18F65K90 
    18F6620      18F6621      18F6622      18F6627 
    18F6628      18F6680      18F66J10     18F66J11
    18F66J15     18F66J16     18F66J50     18F66J55
    18F66J60     18F66J65     18F66J90     18F66J93 
    18F66K22     18F66K80     18F66K90     
    18F6720      18F6722      18F6723      18F67J10 
    18F67J11     18F67J50     18F67J60     18F67J90 
    18F67J93     18F67K22     18F67K90 
    18F8310      18F8390      18F8393      18F83J11
    18F83J90     18F8410      18F8490 
    18F8493      18F84J11     18F84J90
    18F8520      18F8525      18F8527      18F8585 
    18F85J10     18F85J11     18F85J15     18F85J50
    18F85J90     18F85K22     18F85K90     18F8620      
    18F8621      18F8622 
    18F8627      18F8628      18F8680      18F86J10 
    18F86J11     18F86J15     18F86J16     18F86J50
    18F86J55     18F86J60     18F86J65     18F86J72 
    18F86J90     18F86J93     18F86K22     18F86K27
    18F86K90 
    18F8720      18F8722      18F8723      18F87J10
    18F87J11     18F87J50     18F87J60     18F87J72
    18F87J90     18F87J93     18F87K22     18F87K90 
    18F96J60     18F96J65     18F97J60
    
    18LF13K22    18LF13K50    18LF14K22    18LF14K50
    18LF23K22    18LF24J11    18LF24J50    18LF24K22 
    18LF25J11    18LF25J50    18LF25K22    18LF25K80*
    18LF26J11    18LF26J13    18LF26J50    18LF26J53
    18LF26K22    18LF26K80* 
    18LF27J13    18LF27J53    18LF43K22    18LF44J11
    18LF44J50    18LF44K22    18LF45J11    18LF45J50
    18LF45K22    18LF45K80*   18LF46J11
    18LF46J13    18LF46J50    18LF46J53    18LF46K22 
    18LF46K80*   18LF47J13    18LF47J53    
    18LF65K80*   18LF66K80*
    
    EEPROM16     EEPROM8
    
    MCV08A       MCV14A       MCV18A       MCV18E 
    MCV20USB     MCV28A 
    
    RF509AF      RF509AG      RF675F       RF675H
    RF675K
    

    *Note: Early adopter support has been added for these devices since last release

    THE PARTS CORRESPONDING TO THESE OPTIONS MAY NOT ALL BE COMMERCIALLY AVAILABLE.

    These can be chosen through the introductory screen, on the command line, or in source file.

    NOTES:
    • The selections 16C5X, 16CXX, 17CXX, and 18CXX are supported as generic family indicators.
    • The selections EEPROM8 and EEPROM16 are provided for generic memory product support. Read below for a description of how to use MPASM Assembler to generate files for programming Microchip Serial EEPROM devices.
    • Use files 'MCP250XX.INC' and 'MCP250XX.ASM' as references for programming I/O expander (MCP250XX) devices. The file 'MCP250XX.ASM' is in the 'TEMPLATE\CODE' directory under 'MPLAB'.
      The standard header files have been updated to reflect these devices. One header file, MEMORY.INC, is provided for generic memory product support. Another header file, MCP250XX.INC, is provided for generic MCP250XX device support.
    • The devices PIC18F2423, PIC18F2523, PIC18F4423, and PIC18F4523 were formerly known as PIC18LF2423, PIC18LF2523, PIC18LF4423, PIC18LF4523.
    • Use the P12C509A.INC header file for the PIC12CR509A; Use the P16C620A.INC header file for the PIC16CR620A.
    • Use the P16C74.INC header file for the PIC16CR74; Use the P16C77.INC header file for the PIC16CR77.
    • Use the 16C5X.INC header file for the following device command line options:
                      16C52
                      16C54
                      16CR54
                      16C54A
                      16CR54A
                      16C54B
                      16CR54B
                      16C54C
                      16CR54C
                      16C55
                      16C55A
                      16C56
                      16C56A
                      16CR56A
                      16C57
                      16CR57A
                      16CR57B
                      16C57C
                      16CR57C
                      16C58A
                      16CR58A
                      16C58B
                      16CR58B
      
    • Use the P16F5X.INC header file for the following device command line options:
                      16F54
                      16F57
                      16F59
      
  5. Operating System Support List

  6. MPASMWIN.EXE is the 32-bit Windows version of MPASM Assembler which is distributed with MPLAB IDE and MPLAB C18. It is supported by the following platforms:

    Windows 2000, Windows XP and 32-bit Windows Vista
  7. What's New in v5.3x

    • Early adopter part support has been added. See "Devices" above.


    • Several bug fixes. See "Repairs and Enhancements Made Since v5.30" below.


    • Old linkerscripts will no longer be included in new installations. Only the generic linkerscripts will be included. See the Readme for MPLINK linker for more details.


    • The following beta devices have been renamed from "L" devices to "LF" devices:
      18L13K22 to 18LF13K22
      18L13K50 to 18LF13K50
      18L14K22 to 18LF14K22
      18L14K50 to 18LF14K50
      18L24J11 to 18LF24J11
      18L24J50 to 18LF24J50
      18L25J11 to 18LF25J11
      18L25J50 to 18LF25J50
      18L26J11 to 18LF26J11
      18L26J50 to 18LF26J50
      18L44J11 to 18LF44J11
      18L44J50 to 18LF44J50
      18L45J11 to 18LF45J11
      18L45J50 to 18LF45J50
      18L46J11 to 18LF46J11
      18L46J50 to 18LF46J50

    • New support for PIC16 Extended has been added:

      1. A new Directive DTM is added for PIC16 Extended only. This directive is similar to existing the DT directive except it generates the MOVLW instead of the RETLW generated by DT.
      2. BANKSEL directive - A MOVLB instruction is generated for PIC16 extended and BCF/BSF instructions are generated for traditional PIC16.
      3. BANKISEL directive - It modifies FSR0H for PIC16 extended instead of modifying the IRP bit in PIC16 traditional.
      4. PAGESEL directive - The MOVLP instruction is generated for PIC16 extended.
      5. PAGESELW directive - Is not supported for PIC16 extended.
      6. __CONFIG / __FUSES directive usage: For devices having multiple config words (for eg. PIC16F193x), __CONFIG/__FUSES directive should be used with the two operand syntax and usage with one operand is invalid.

      New Error message added :
      If any directive or instruction is not supported on any family, then the following error would be emitted:
              'Instruction is not supported on this device'
      
      For example, PAGESELW is not supported on PIC16 extended.

      New Warning message added :
      The following warning message is added for PIC16 extended for users trying to access a non-existing bit of the STATUS register (IRP or RP1 or RP0 bits):
         
              'STATUS register has no IRP or RP1 or RP0 bits'
      

  8. Repairs and Enhancements Made Since v5.30


    1. Problems resolved between v5.35 and v5.36:

      ( MPASM-105 / 27914)
      The assembler gives an error when the FILL macro is used with Address - $.

      ( MPASM-163)
      __IDLOCS directive does not put the User ID locations at the correct address (0x440) for these devices. Instead it writes the User ID locations to address 0x400.

      ( MPASM-292)
      Make both FSRn and INDFn available for ADDFSR and MOVIW.

      ( MPASM-298)
      Accept '-' as well as '/' in the commandline.

      ( MPASM-301)
      MPASM Produces incorrect config section for EEPROM devices.

      ( MPASM-303)
      The behaviour of the HIGH operator in an absolute code for PIC16 extended devices is incorrect.

      ( UDBC-205)
      VCAPEN config bit settings for 16F1947 are not correct. RF0 is the only pin VCAP goes on.

    2. Problems resolved between v5.34 and v5.35:

      ( MPASM-36 / 18811)
      MPASMWIN.exe generates incorrect code for 'goto' targeting a local label.


      ( MPASM-175)
      Improve the error message, "Address exceeds maximum range for this processor".

      ( MPASM-273)
      Warning is generated when defining EEDATA for [16F19xx] devices in absolute mode.

    3. Problems resolved between v5.33 and v5.34:

      ( MPASM-280)
      MPASMWIN hangs with /q- command line option.

      ( MPASM-285)
      Ambiguities in include file for the device family 18F87K90.

    4. Problems resolved between v5.32 and v5.33:

      None

    5. Problems resolved between v5.31 and v5.32:

      ( MPASM-271)
      Errors in INC file for the device family 16F1827.

    6. Problems resolved between v5.30 and v5.31:

      ( MPASM-257)
      Assembler hangs upon building a program, where the __CONFIG directives using the config words defined in the .INC file, are being followed by "include" directive.

      ( MPASM-262)
      Add new option to allow user to see the window that used to appear with old behaviour of /q option

  9. Known Problems

  10. The following is a list of known problems. For a list of limitations, please see MPASM Assembler Help, Troubleshooting, Assembler Limitations.

    (MPASM-4 / 1008)
    There are no warnings when overflow or underflow occurs during expression evaluation.

    (MPASM-34 / 18510)
    A file register operand which is greater than the absolute max ram address does not generate a message of any kind.
    For example,
            LIST P=18F452
            MOVWF 0x1000
            END
    
    will assemble without warning.

    (MPASM-40 / 19703)
    The Japanese directory delimiter character on Windows XP-J and Windows ME-J is not accepted by MPASM Assembler.
    The workaround is to invoke MPASM Assembler on the command line with a source file path which does not contain any directory delimiters.

    (MPASM-44 / 20776)
    The return value of the MPASMWIN.EXE process (returned by 'spawnvp') does not get stored in the DOS environment variable ERRORLEVEL.

    (MPASM-47 / 20986)
    When assembling with the '/o' option, a duplicate address label declaration causes no error, warning, or message. For example, the program fragment
            U1 IDATA
            X  DB 1
            U2 IDATA
            X  DB 2
                CODE
               MOVWF X
    
    assembles quietly, but the definition of X which is used in the MOVWF instruction is not well defined.

    (MPASM-52 / 21798)
    The length of the command line argument string to mpasm.exe is limited to about 120 characters. Anything beyond that is truncated.

    (MPASM-54 / 22227)
    Error messages are not emitted to standard out.

    (MPASM-56 / 22387)
    MPASM Assembler cannot assemble files in Unicode format.

    (MPASM-57 / 22541)
    A warning is not emitted if the operand for the PUSHL instruction is less than -128, only if it is less than -255. A warning should be emitted if the operand is less than -128, since the operand is 8 bits wide.

    (MPASM-58 / 22660)
    When assembling with '/o' and the operand of a DT directive is relocatable but more than 8 bits wide, the linker will fill both bytes of the directive with 16 bits of the operand (instead of truncating the operand to 8 bits for a RETLW instruction):
            UDATA 0x124
            X RES 1
            CODE 0x100
            DT X
    
    will generate 0x0124 at address 0x100 instead of 0x3424 (RETLW 0x24).

    (MPASM-63 / 23071)
    The LIST n=nnn directive does not properly format the listing file.

    (MPASM-67 / 23490)
    As MPASM Assembler rescans macro expressions, it searches the substituted arguments for parameters. E.g.,
            #define F(X,Y) X + Y
            Y EQU 2
            movlw F(Y,1)
    
    will yield movlw 2 instead of movlw 3. After Y is substituted in place of X, it is replaced itself by the second argument upon rescanning.

    (MPASM-77 / 24560)
    No error or warning is produced for the following code:
            bsf   ,1
            END
    
    This assembles as if "bsf 0,1" was given.

    (MPASM-81 / 24794)
    MPASM Assembler generates invalid PIC18 relocation for $+<odd offset>. The following code, containing an invalid goto destination address, assembles without error when generating an object file (18f452):
                          code 0
                          bra start
    
            startscn      code 0x100
            start         nop
                          goto $-1
                          bra $
    
                          end
    
    causing a link-time error:

    Error - file 'C:\test\mpasm\gotoneg1.o', section 'startscn', Symbol '_startscn_0102' is not word-aligned.
    It can not be used as the target of a call or goto instruction.

    However, the assembler generates a warning when assembling equivalent code in absolute mode:
                          org 0
                          bra start
    
                          org 0x100
            start         nop
                          goto $-1
                          bra $
    
                          end
    

    Warning[226] C:\TEST\MPASM\GOTONEG1.ASM 8 : Destination address must be word aligned

    (MPASM-92 / 26223)
    MPASM Assembler does not correctly handle Windows CLI and DOS command line string limitations and error diagnostics can be ambiguous or absent.

    (MPASM-99 / 27088)
    MPASM Assembler may generate an invalid COFF file when passing an undefined constant as a macro parameter.
    For example:
            RM          MACRO Name,Size
                        LOCAL i    =0
            Name        RES   0
                        GLOBAL Name
                        WHILE i <Size
            Name#v(i)     RES 1
                          i +=1
                        ENDW
                        ENDM
            myuscn      UDATA
                        RM hello,myconstsz ; Should cause an assembly error
            myconstsz  equ  2
                        CODE
                        lfsr  0,hello0
                        END
    
    Assembly of this code causes only a warning, but MPLINK Linker gives an error message "reloc[0] has an invalid r_symndx." while trying to link the COFF file.
    MPASM Assembler should give an error.
    To avoid this problem, the code should define 'myconstsz' before calling the macro, as shown:
            myconstsz  equ 2
            RM hello, myconstsz
    
    (MPASM-101 / 27165)
    MPASM Assembler does not give an error when ENDIF is missing; it gives only a warning.
    With a macro like:
            IF (CONST)
            ; no ENDIF
    
    MPASM Assembler assembles it and gives no error, only a warning.

    (MPASM-106 / 28228)
    Running the assembler on a file with a '.' in the name, other than the '.' separating the file extension from the base name, for example foo.bar.asm, results in a DOS error:
            File not found.
    
    Any resulting intermediate or output files will not include the portion of the file name after the first '.' For example, the file name above may cause files named foo.ERR, foo.COD, or foo.LST to be created.

  11. Using MPASM Assembler

  12. A version of MPASM Assembler is available for Windows. To invoke this assembler, execute:
            mpasmwin
    
    from within Windows. You will then be given a Windows interface window. Help on using the interface is provided on-line. MPASMWIN.EXE can also be invoked with parameters or through drag-and-drop. In these cases, the interface screen is not displayed and assembly begins immediately.

    Correct any syntax problems, referring to the MPASM Assembler, MPLINK Object Linker, MPLIB Object Librarian User's Guide(DS33014) for syntax help. MPASM Assembler assembles with INHX32 as the default hex output, and generates a listing file, error file, and .COD file.

    Serial EEPROM Support:

    Two "processor" selections are provided to generate byte data - EEPROM8 and EEPROM16. Both generate data in terms of bytes, but EEPROM8 considers a "word" to be 8 bits wide, while EEPROM16 considers a "word" to be 16 bits wide. The "program counter" is always incremented in terms of bytes.

    The default size for memory products is 128 bytes. This can be overridden by using the LIST M=<max address> directive. Note that <max address> is always evaluated as a decimal number. The header file MEMORY.INC is provided to define the maximum address for available memory devices. The format of the defined symbols is _<device>; for example, to set the maximum memory size for a 24LCS21, use the directive LIST M=_24LCS21.

    The following data generation directives are supported for memory products:

            DW           FILL        ORG
    
    The behavior of other data generation directives is not guaranteed. All other directives are unchanged.

    An example of generating a file for programming a memory device is as follows:

    ;*************************************************
    ; Generate data for a 8-bit wide memory device.
    
            LIST    P=EEPROM8, R=DECIMAL
            INCLUDE "MEMORY.INC"
            LIST    M=_24LCS21
    
    #DEFINE MAX_VALUE       255
    
            ORG     0
    
    ;-------------------------------------------------
    ; Create a packed-byte, null terminated string.
    
            DW      "Hello World", 0
    
    ;-------------------------------------------------
    ; Create data representing a line.  The X position
    ; is implied from the position of the data in the
    ; device.  The Y values are stored in the device.
    
    ; First, define an equation for the line.
    
    #DEFINE Line( X )       Slope * X + Y_Intercept
    
    ; Now define the values needed for the equation.
    
    Slope                   EQU     10
    Y_Intercept             EQU     5
    
    ; Declare and initialize the X and Y values.
    
            VARIABLE        X = 0, Y = Line( X )
    
    ; Generate values until the maximum Y value is
    ; reached or the device is filled up.
    
            WHILE (Y <= MAX_VALUE) && ($ <= _24LCS21)
               DW   Y
    X = X + 1
    Y = Line( X )
            ENDW
    
    ;-------------------------------------------------
    ; Perform some checking based on the line data
    ; generated above.
    
    ; If the device filled up before the end of the
    ; line was reached, generate an error. Otherwise,
    ; if the device is almost out of room, generate a
    ; message.
    
            IF (Y < MAX_VALUE)
               ERROR        "Device is full."
            ELSE
               IF (($+10) > _24LCS21)
                  MESSG     "Device is nearly full."
               ENDIF
            ENDIF
    
    ;-------------------------------------------------
    ; Fill the rest of the device with zeroes.
    
            FILL    0, _24LCS21 - $ + 1
    
            END
    
    CLRW COMMAND:

    The CLRW encoding was changed on all 14-bit core devices from 0x0100 to 0x0103 (v1.40 and later). This will not affect the expected operation of the instruction, but it will change the value for the instruction in the hex file and therefore the checksum.

    WARNING MESSAGE:

    The text for Message #302 was modified to explain more clearly that bank indication bits are stripped when assembling instructions that access file registers. The appropriate bank must be selected by the appropriate bank selection bits. For example, 14-bit core devices contain the lower seven bits of the file register address in the opcode, with two bank selection bits in the STATUS register. The message was changed from:

            Argument out of range. Least significant bits used.
    
    to:
            Register in operand not in bank 0. Ensure that bank bits are correct.
    
    END DIRECTIVE:

    Take care to not use the END directive in a macro. If the END directive is encountered in a macro, it can cause the assembler to loop indefinitely. Macros should be terminated with the ENDM directive.

  13. Customer Support


  14. Microchip provides online support via our home page at:
    http://www.microchip.com

    Technical support is available through the web site at:
    http://support.microchip.com

    A forum for discussion of Microchip products and tools is available at:
    http://forum.microchip.com