- 4e-LP430 -                        Page    1

###############################################################################
#                                                                             #
#     IAR Assembler V5.30.1.50284/W32  for MSP430 21/Dec/2013  07:31:52       #
#     Copyright 1996-2011 IAR Systems AB.                                     #
#                                                                             #
#           Target option =  MSP430                                           #
#           Source file   =  C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-LP430.s43#
#           List file     =  C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\List\4e-LP430.lst#
#           Object file   =  C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\Obj\4e-LP430.r43#
#           Command line  =  C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-LP430.s43 #
#                            -OC:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\Obj\ #
#                            -s+ -M<> -w+                                     #
#                            -LC:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\List\ #
#                            -i -p80 -t8 -xD -r -D__MSP430G2553__             #
#                            -IC:\Programme\IAR Systems\Embedded Workbench 6.0 Kickstart\430\INC\ #
#                                                                             #
###############################################################################

      1    000000              ; test: 4e4th für LaunchPad aufbauen.
      2    000000              
      3    000000              ; ----------------------------------------------
                               ------------------------
      4    000000              ; 4e4th is a Forth based on CamelForth
                                
      5    000000              ; for the Texas Instruments MSP430 
      6    000000              ; 
      7    000000              ; This program is free software; you can
                                redistribute it and/or modify
      8    000000              ; it under the terms of the GNU General Public
                                License as published by
      9    000000              ; the Free Software Foundation; either version 3
                                of the License, or
     10    000000              ; (at your option) any later version.
     11    000000              ; 
     12    000000              ; This program is distributed in the hope that
                                it will be useful,
     13    000000              ; but WITHOUT ANY WARRANTY; without even the
                                implied warranty of
     14    000000              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
                                PURPOSE.  See the
     15    000000              ; GNU General Public License for more details.
     16    000000              ;
     17    000000              ; You should have received a copy of the GNU
                                General Public License
     18    000000              ; along with this program.  If not, see
                                <http://www.gnu.org/licenses/>.
     19    000000              ; 
     20    000000              ; See LICENSE TERMS in Brads file readme.txt as
                                well.
     21    000000              
     22    000000              ; ----------------------------------------------
                               ------------------------
     23    000000              ; 4e-core430.s43 - Machine Language Primitives -
                                MSP430G2553 
     24    000000              ; ----------------------------------------------
                               ------------------------
     25    000000              
     26    000000              ; Revision History
     27    000000              ;  1 mar 09 bjr - changed Flash write and erase
                                primitives to correctly
     28    000000              ;       write RAM outside Info Flash and Main
                                Flash address limits.
     29    000000              
     30    000000              #include "msp430.h"                     ;
                                #define controlled include file
      1    000000              /***********************************************
                               ********************
      2    000000              *                                               
                                                  *
      3    000000              * This file is a generic include file controlled
                                by                *
      4    000000              * compiler/assembler IDE generated defines      
                                                  *
      5    000000              *                                               
                                                  *
      6    000000              ************************************************
                               *******************/
      7    000000              
                                  - 4e-LP430 -                        Page    2

      8    000000              #ifndef __msp430
      9    000000              #define __msp430
     10    000000              
     11    000000              #ifndef _SYSTEM_BUILD
     12    000000              #pragma system_include
     13    000000              #endif
     14    000000              
     15    000000              #if defined (__MSP430C111__)
     16    000000              #include "msp430c111.h"
     18    000000              #elif defined (__MSP430C1111__)
     19    000000              #include "msp430c1111.h"
     21    000000              #elif defined (__MSP430C112__)
     22    000000              #include "msp430c112.h"
     24    000000              #elif defined (__MSP430C1121__)
     25    000000              #include "msp430c1121.h"
     27    000000              #elif defined (__MSP430C1331__)
     28    000000              #include "msp430c1331.h"
     30    000000              #elif defined (__MSP430C1351__)
     31    000000              #include "msp430c1351.h"
     33    000000              #elif defined (__MSP430C311S__)
     34    000000              #include "msp430c311s.h"
     36    000000              #elif defined (__MSP430C312__)
     37    000000              #include "msp430c312.h"
     39    000000              #elif defined (__MSP430C313__)
     40    000000              #include "msp430c313.h"
     42    000000              #elif defined (__MSP430C314__)
     43    000000              #include "msp430c314.h"
     45    000000              #elif defined (__MSP430C315__)
     46    000000              #include "msp430c315.h"
     48    000000              #elif defined (__MSP430C323__)
     49    000000              #include "msp430c323.h"
     51    000000              #elif defined (__MSP430C325__)
     52    000000              #include "msp430c325.h"
     54    000000              #elif defined (__MSP430C336__)
     55    000000              #include "msp430c336.h"
     57    000000              #elif defined (__MSP430C337__)
     58    000000              #include "msp430c337.h"
     60    000000              #elif defined (__MSP430C412__)
     61    000000              #include "msp430c412.h"
     63    000000              #elif defined (__MSP430C413__)
     64    000000              #include "msp430c413.h"
     66    000000              #elif defined (__MSP430CG4616__)
     67    000000              #include "msp430cg4616.h"
     69    000000              #elif defined (__MSP430CG4617__)
     70    000000              #include "msp430cg4617.h"
     72    000000              #elif defined (__MSP430CG4618__)
     73    000000              #include "msp430cg4618.h"
     75    000000              #elif defined (__MSP430CG4619__)
     76    000000              #include "msp430cg4619.h"
     78    000000              #elif defined (__MSP430E112__)
     79    000000              #include "msp430e112.h"
     81    000000              #elif defined (__MSP430E313__)
     82    000000              #include "msp430e313.h"
     84    000000              #elif defined (__MSP430E315__)
     85    000000              #include "msp430e315.h"
     87    000000              #elif defined (__MSP430E325__)
     88    000000              #include "msp430e325.h"
     90    000000              #elif defined (__MSP430E337__)
     91    000000              #include "msp430e337.h"
     93    000000              #elif defined (__MSP430F110__)
     94    000000              #include "msp430f110.h"
     96    000000              #elif defined (__MSP430F1101__)
     97    000000              #include "msp430f1101.h"
     99    000000              #elif defined (__MSP430F1101A__)
    100    000000              #include "msp430f1101a.h"
    102    000000              #elif defined (__MSP430F1111__)
    103    000000              #include "msp430f1111.h"
    105    000000              #elif defined (__MSP430F1111A__)
    106    000000              #include "msp430f1111a.h"
    108    000000              #elif defined (__MSP430F112__)
    109    000000              #include "msp430f112.h"
    111    000000              #elif defined (__MSP430F1121__)
    112    000000              #include "msp430f1121.h"
    114    000000              #elif defined (__MSP430F1121A__)
    115    000000              #include "msp430f1121a.h"
    117    000000              #elif defined (__MSP430F1122__)
    118    000000              #include "msp430f1122.h"
    120    000000              #elif defined (__MSP430F1132__)
                                  - 4e-LP430 -                        Page    3

    121    000000              #include "msp430f1132.h"
    123    000000              #elif defined (__MSP430F122__)
    124    000000              #include "msp430f122.h"
    126    000000              #elif defined (__MSP430F1222__)
    127    000000              #include "msp430f1222.h"
    129    000000              #elif defined (__MSP430F123__)
    130    000000              #include "msp430f123.h"
    132    000000              #elif defined (__MSP430F1232__)
    133    000000              #include "msp430f1232.h"
    135    000000              #elif defined (__MSP430F133__)
    136    000000              #include "msp430f133.h"
    138    000000              #elif defined (__MSP430F135__)
    139    000000              #include "msp430f135.h"
    141    000000              #elif defined (__MSP430F147__)
    142    000000              #include "msp430f147.h"
    144    000000              #elif defined (__MSP430F148__)
    145    000000              #include "msp430f148.h"
    147    000000              #elif defined (__MSP430F149__)
    148    000000              #include "msp430f149.h"
    150    000000              #elif defined (__MSP430F1471__)
    151    000000              #include "msp430f1471.h"
    153    000000              #elif defined (__MSP430F1481__)
    154    000000              #include "msp430f1481.h"
    156    000000              #elif defined (__MSP430F1491__)
    157    000000              #include "msp430f1491.h"
    159    000000              #elif defined (__MSP430F155__)
    160    000000              #include "msp430f155.h"
    162    000000              #elif defined (__MSP430F156__)
    163    000000              #include "msp430f156.h"
    165    000000              #elif defined (__MSP430F157__)
    166    000000              #include "msp430f157.h"
    168    000000              #elif defined (__MSP430F167__)
    169    000000              #include "msp430f167.h"
    171    000000              #elif defined (__MSP430F168__)
    172    000000              #include "msp430f168.h"
    174    000000              #elif defined (__MSP430F169__)
    175    000000              #include "msp430f169.h"
    177    000000              #elif defined (__MSP430F1610__)
    178    000000              #include "msp430f1610.h"
    180    000000              #elif defined (__MSP430F1611__)
    181    000000              #include "msp430f1611.h"
    183    000000              #elif defined (__MSP430F1612__)
    184    000000              #include "msp430f1612.h"
    186    000000              #elif defined (__MSP430F2001__)
    187    000000              #include "msp430f2001.h"
    189    000000              #elif defined (__MSP430F2011__)
    190    000000              #include "msp430f2011.h"
    192    000000              #elif defined (__MSP430F2002__)
    193    000000              #include "msp430f2002.h"
    195    000000              #elif defined (__MSP430F2012__)
    196    000000              #include "msp430f2012.h"
    198    000000              #elif defined (__MSP430F2003__)
    199    000000              #include "msp430f2003.h"
    201    000000              #elif defined (__MSP430F2013__)
    202    000000              #include "msp430f2013.h"
    204    000000              #elif defined (__MSP430F2101__)
    205    000000              #include "msp430f2101.h"
    207    000000              #elif defined (__MSP430F2111__)
    208    000000              #include "msp430f2111.h"
    210    000000              #elif defined (__MSP430F2121__)
    211    000000              #include "msp430f2121.h"
    213    000000              #elif defined (__MSP430F2131__)
    214    000000              #include "msp430f2131.h"
    216    000000              #elif defined (__MSP430F2112__)
    217    000000              #include "msp430f2112.h"
    219    000000              #elif defined (__MSP430F2122__)
    220    000000              #include "msp430f2122.h"
    222    000000              #elif defined (__MSP430F2132__)
    223    000000              #include "msp430f2132.h"
    225    000000              #elif defined (__MSP430F2232__)
    226    000000              #include "msp430f2232.h"
    228    000000              #elif defined (__MSP430F2252__)
    229    000000              #include "msp430f2252.h"
    231    000000              #elif defined (__MSP430F2272__)
    232    000000              #include "msp430f2272.h"
    234    000000              #elif defined (__MSP430F2234__)
    235    000000              #include "msp430f2234.h"
    237    000000              #elif defined (__MSP430F2254__)
                                  - 4e-LP430 -                        Page    4

    238    000000              #include "msp430f2254.h"
    240    000000              #elif defined (__MSP430F2274__)
    241    000000              #include "msp430f2274.h"
    243    000000              #elif defined (__MSP430F2330__)
    244    000000              #include "msp430f2330.h"
    246    000000              #elif defined (__MSP430F2350__)
    247    000000              #include "msp430f2350.h"
    249    000000              #elif defined (__MSP430F2370__)
    250    000000              #include "msp430f2370.h"
    252    000000              #elif defined (__MSP430F233__)
    253    000000              #include "msp430f233.h"
    255    000000              #elif defined (__MSP430F235__)
    256    000000              #include "msp430f235.h"
    258    000000              #elif defined (__MSP430F247__)
    259    000000              #include "msp430f247.h"
    261    000000              #elif defined (__MSP430F248__)
    262    000000              #include "msp430f248.h"
    264    000000              #elif defined (__MSP430F249__)
    265    000000              #include "msp430f249.h"
    267    000000              #elif defined (__MSP430F2410__)
    268    000000              #include "msp430f2410.h"
    270    000000              #elif defined (__MSP430F2471__)
    271    000000              #include "msp430f2471.h"
    273    000000              #elif defined (__MSP430F2481__)
    274    000000              #include "msp430f2481.h"
    276    000000              #elif defined (__MSP430F2491__)
    277    000000              #include "msp430f2491.h"
    279    000000              #elif defined (__MSP430F2416__)
    280    000000              #include "msp430f2416.h"
    282    000000              #elif defined (__MSP430F2417__)
    283    000000              #include "msp430f2417.h"
    285    000000              #elif defined (__MSP430F2418__)
    286    000000              #include "msp430f2418.h"
    288    000000              #elif defined (__MSP430F2419__)
    289    000000              #include "msp430f2419.h"
    291    000000              #elif defined (__MSP430F2616__)
    292    000000              #include "msp430f2616.h"
    294    000000              #elif defined (__MSP430F2617__)
    295    000000              #include "msp430f2617.h"
    297    000000              #elif defined (__MSP430F2618__)
    298    000000              #include "msp430f2618.h"
    300    000000              #elif defined (__MSP430F2619__)
    301    000000              #include "msp430f2619.h"
    303    000000              #elif defined (__MSP430F412__)
    304    000000              #include "msp430f412.h"
    306    000000              #elif defined (__MSP430F413__)
    307    000000              #include "msp430f413.h"
    309    000000              #elif defined (__MSP430F415__)
    310    000000              #include "msp430f415.h"
    312    000000              #elif defined (__MSP430F417__)
    313    000000              #include "msp430f417.h"
    315    000000              #elif defined (__MSP430F4132__)
    316    000000              #include "msp430f4132.h"
    318    000000              #elif defined (__MSP430F4152__)
    319    000000              #include "msp430f4152.h"
    321    000000              #elif defined (__MSP430F423__)
    322    000000              #include "msp430f423.h"
    324    000000              #elif defined (__MSP430F425__)
    325    000000              #include "msp430f425.h"
    327    000000              #elif defined (__MSP430F427__)
    328    000000              #include "msp430f427.h"
    330    000000              #elif defined (__MSP430F423A__)
    331    000000              #include "msp430f423a.h"
    333    000000              #elif defined (__MSP430F425A__)
    334    000000              #include "msp430f425a.h"
    336    000000              #elif defined (__MSP430F427A__)
    337    000000              #include "msp430f427a.h"
    339    000000              #elif defined (__MSP430F435__)
    340    000000              #include "msp430f435.h"
    342    000000              #elif defined (__MSP430F436__)
    343    000000              #include "msp430f436.h"
    345    000000              #elif defined (__MSP430F437__)
    346    000000              #include "msp430f437.h"
    348    000000              #elif defined (__MSP430F4351__)
    349    000000              #include "msp430f4351.h"
    351    000000              #elif defined (__MSP430F4361__)
    352    000000              #include "msp430f4361.h"
    354    000000              #elif defined (__MSP430F4371__)
                                  - 4e-LP430 -                        Page    5

    355    000000              #include "msp430f4371.h"
    357    000000              #elif defined (__MSP430F4481__)
    358    000000              #include "msp430f4481.h"
    360    000000              #elif defined (__MSP430F4491__)
    361    000000              #include "msp430f4491.h"
    363    000000              #elif defined (__MSP430F447__)
    364    000000              #include "msp430f447.h"
    366    000000              #elif defined (__MSP430F448__)
    367    000000              #include "msp430f448.h"
    369    000000              #elif defined (__MSP430F449__)
    370    000000              #include "msp430f449.h"
    372    000000              #elif defined (__MSP430FE423__)
    373    000000              #include "msp430fe423.h"
    375    000000              #elif defined (__MSP430FE425__)
    376    000000              #include "msp430fe425.h"
    378    000000              #elif defined (__MSP430FE427__)
    379    000000              #include "msp430fe427.h"
    381    000000              #elif defined (__MSP430FE423A__)
    382    000000              #include "msp430fe423a.h"
    384    000000              #elif defined (__MSP430FE425A__)
    385    000000              #include "msp430fe425a.h"
    387    000000              #elif defined (__MSP430FE427A__)
    388    000000              #include "msp430fe427a.h"
    390    000000              #elif defined (__MSP430FE4232__)
    391    000000              #include "msp430fe4232.h"
    393    000000              #elif defined (__MSP430FE4242__)
    394    000000              #include "msp430fe4242.h"
    396    000000              #elif defined (__MSP430FE4252__)
    397    000000              #include "msp430fe4252.h"
    399    000000              #elif defined (__MSP430FE4272__)
    400    000000              #include "msp430fe4272.h"
    402    000000              #elif defined (__MSP430F4783__)
    403    000000              #include "msp430f4783.h"
    405    000000              #elif defined (__MSP430F4793__)
    406    000000              #include "msp430f4793.h"
    408    000000              #elif defined (__MSP430F4784__)
    409    000000              #include "msp430f4784.h"
    411    000000              #elif defined (__MSP430F4794__)
    412    000000              #include "msp430f4794.h"
    414    000000              #elif defined (__MSP430F47126__)
    415    000000              #include "msp430f47126.h"
    417    000000              #elif defined (__MSP430F47127__)
    418    000000              #include "msp430f47127.h"
    420    000000              #elif defined (__MSP430F47163__)
    421    000000              #include "msp430f47163.h"
    423    000000              #elif defined (__MSP430F47173__)
    424    000000              #include "msp430f47173.h"
    426    000000              #elif defined (__MSP430F47183__)
    427    000000              #include "msp430f47183.h"
    429    000000              #elif defined (__MSP430F47193__)
    430    000000              #include "msp430f47193.h"
    432    000000              #elif defined (__MSP430F47166__)
    433    000000              #include "msp430f47166.h"
    435    000000              #elif defined (__MSP430F47176__)
    436    000000              #include "msp430f47176.h"
    438    000000              #elif defined (__MSP430F47186__)
    439    000000              #include "msp430f47186.h"
    441    000000              #elif defined (__MSP430F47196__)
    442    000000              #include "msp430f47196.h"
    444    000000              #elif defined (__MSP430F47167__)
    445    000000              #include "msp430f47167.h"
    447    000000              #elif defined (__MSP430F47177__)
    448    000000              #include "msp430f47177.h"
    450    000000              #elif defined (__MSP430F47187__)
    451    000000              #include "msp430f47187.h"
    453    000000              #elif defined (__MSP430F47197__)
    454    000000              #include "msp430f47197.h"
    456    000000              #elif defined (__MSP430F4250__)
    457    000000              #include "msp430f4250.h"
    459    000000              #elif defined (__MSP430F4260__)
    460    000000              #include "msp430f4260.h"
    462    000000              #elif defined (__MSP430F4270__)
    463    000000              #include "msp430f4270.h"
    465    000000              #elif defined (__MSP430FG4250__)
    466    000000              #include "msp430fg4250.h"
    468    000000              #elif defined (__MSP430FG4260__)
    469    000000              #include "msp430fg4260.h"
    471    000000              #elif defined (__MSP430FG4270__)
                                  - 4e-LP430 -                        Page    6

    472    000000              #include "msp430fg4270.h"
    474    000000              #elif defined (__MSP430FW423__)
    475    000000              #include "msp430fw423.h"
    477    000000              #elif defined (__MSP430FW425__)
    478    000000              #include "msp430fw425.h"
    480    000000              #elif defined (__MSP430FW427__)
    481    000000              #include "msp430fw427.h"
    483    000000              #elif defined (__MSP430FW428__)
    484    000000              #include "msp430fw428.h"
    486    000000              #elif defined (__MSP430FW429__)
    487    000000              #include "msp430fw429.h"
    489    000000              #elif defined (__MSP430FG437__)
    490    000000              #include "msp430fg437.h"
    492    000000              #elif defined (__MSP430FG438__)
    493    000000              #include "msp430fg438.h"
    495    000000              #elif defined (__MSP430FG439__)
    496    000000              #include "msp430fg439.h"
    498    000000              #elif defined (__MSP430F438__)
    499    000000              #include "msp430f438.h"
    501    000000              #elif defined (__MSP430F439__)
    502    000000              #include "msp430f439.h"
    504    000000              #elif defined (__MSP430F477__)
    505    000000              #include "msp430f477.h"
    507    000000              #elif defined (__MSP430F478__)
    508    000000              #include "msp430f478.h"
    510    000000              #elif defined (__MSP430F479__)
    511    000000              #include "msp430f479.h"
    513    000000              #elif defined (__MSP430FG477__)
    514    000000              #include "msp430fg477.h"
    516    000000              #elif defined (__MSP430FG478__)
    517    000000              #include "msp430fg478.h"
    519    000000              #elif defined (__MSP430FG479__)
    520    000000              #include "msp430fg479.h"
    522    000000              #elif defined (__MSP430F46161__)
    523    000000              #include "msp430f46161.h"
    525    000000              #elif defined (__MSP430F46171__)
    526    000000              #include "msp430f46171.h"
    528    000000              #elif defined (__MSP430F46181__)
    529    000000              #include "msp430f46181.h"
    531    000000              #elif defined (__MSP430F46191__)
    532    000000              #include "msp430f46191.h"
    534    000000              #elif defined (__MSP430F4616__)
    535    000000              #include "msp430f4616.h"
    537    000000              #elif defined (__MSP430F4617__)
    538    000000              #include "msp430f4617.h"
    540    000000              #elif defined (__MSP430F4618__)
    541    000000              #include "msp430f4618.h"
    543    000000              #elif defined (__MSP430F4619__)
    544    000000              #include "msp430f4619.h"
    546    000000              #elif defined (__MSP430FG4616__)
    547    000000              #include "msp430fg4616.h"
    549    000000              #elif defined (__MSP430FG4617__)
    550    000000              #include "msp430fg4617.h"
    552    000000              #elif defined (__MSP430FG4618__)
    553    000000              #include "msp430fg4618.h"
    555    000000              #elif defined (__MSP430FG4619__)
    556    000000              #include "msp430fg4619.h"
    558    000000              #elif defined (__MSP430F5418__)
    559    000000              #include "msp430f5418.h"
    561    000000              #elif defined (__MSP430F5419__)
    562    000000              #include "msp430f5419.h"
    564    000000              #elif defined (__MSP430F5435__)
    565    000000              #include "msp430f5435.h"
    567    000000              #elif defined (__MSP430F5436__)
    568    000000              #include "msp430f5436.h"
    570    000000              #elif defined (__MSP430F5437__)
    571    000000              #include "msp430f5437.h"
    573    000000              #elif defined (__MSP430F5438__)
    574    000000              #include "msp430f5438.h"
    576    000000              #elif defined (__XMS430F5438__)
    577    000000              #include "xms430f5438.h"
    579    000000              #elif defined (__MSP430F5418A__)
    580    000000              #include "msp430f5418a.h"
    582    000000              #elif defined (__MSP430F5419A__)
    583    000000              #include "msp430f5419a.h"
    585    000000              #elif defined (__MSP430F5435A__)
    586    000000              #include "msp430f5435a.h"
    588    000000              #elif defined (__MSP430F5436A__)
                                  - 4e-LP430 -                        Page    7

    589    000000              #include "msp430f5436a.h"
    591    000000              #elif defined (__MSP430F5437A__)
    592    000000              #include "msp430f5437a.h"
    594    000000              #elif defined (__MSP430F5438A__)
    595    000000              #include "msp430f5438a.h"
    597    000000              #elif defined (__MSP430F5304__)
    598    000000              #include "msp430f5304.h"
    600    000000              #elif defined (__MSP430F5308__)
    601    000000              #include "msp430f5308.h"
    603    000000              #elif defined (__MSP430F5309__)
    604    000000              #include "msp430f5309.h"
    606    000000              #elif defined (__MSP430F5310__)
    607    000000              #include "msp430f5310.h"
    609    000000              #elif defined (__MSP430F5340__)
    610    000000              #include "msp430f5340.h"
    612    000000              #elif defined (__MSP430F5341__)
    613    000000              #include "msp430f5341.h"
    615    000000              #elif defined (__MSP430F5342__)
    616    000000              #include "msp430f5342.h"
    618    000000              #elif defined (__MSP430F5324__)
    619    000000              #include "msp430f5324.h"
    621    000000              #elif defined (__MSP430F5325__)
    622    000000              #include "msp430f5325.h"
    624    000000              #elif defined (__MSP430F5326__)
    625    000000              #include "msp430f5326.h"
    627    000000              #elif defined (__MSP430F5327__)
    628    000000              #include "msp430f5327.h"
    630    000000              #elif defined (__MSP430F5328__)
    631    000000              #include "msp430f5328.h"
    633    000000              #elif defined (__MSP430F5329__)
    634    000000              #include "msp430f5329.h"
    636    000000              #elif defined (__MSP430F5500__)
    637    000000              #include "msp430f5500.h"
    639    000000              #elif defined (__MSP430F5501__)
    640    000000              #include "msp430f5501.h"
    642    000000              #elif defined (__MSP430F5502__)
    643    000000              #include "msp430f5502.h"
    645    000000              #elif defined (__MSP430F5503__)
    646    000000              #include "msp430f5503.h"
    648    000000              #elif defined (__MSP430F5504__)
    649    000000              #include "msp430f5504.h"
    651    000000              #elif defined (__MSP430F5505__)
    652    000000              #include "msp430f5505.h"
    654    000000              #elif defined (__MSP430F5506__)
    655    000000              #include "msp430f5506.h"
    657    000000              #elif defined (__MSP430F5507__)
    658    000000              #include "msp430f5507.h"
    660    000000              #elif defined (__MSP430F5508__)
    661    000000              #include "msp430f5508.h"
    663    000000              #elif defined (__MSP430F5509__)
    664    000000              #include "msp430f5509.h"
    666    000000              #elif defined (__MSP430F5510__)
    667    000000              #include "msp430f5510.h"
    669    000000              #elif defined (__MSP430F5513__)
    670    000000              #include "msp430f5513.h"
    672    000000              #elif defined (__MSP430F5514__)
    673    000000              #include "msp430f5514.h"
    675    000000              #elif defined (__MSP430F5515__)
    676    000000              #include "msp430f5515.h"
    678    000000              #elif defined (__MSP430F5517__)
    679    000000              #include "msp430f5517.h"
    681    000000              #elif defined (__MSP430F5519__)
    682    000000              #include "msp430f5519.h"
    684    000000              #elif defined (__MSP430F5521__)
    685    000000              #include "msp430f5521.h"
    687    000000              #elif defined (__MSP430F5522__)
    688    000000              #include "msp430f5522.h"
    690    000000              #elif defined (__MSP430F5524__)
    691    000000              #include "msp430f5524.h"
    693    000000              #elif defined (__MSP430F5525__)
    694    000000              #include "msp430f5525.h"
    696    000000              #elif defined (__MSP430F5526__)
    697    000000              #include "msp430f5526.h"
    699    000000              #elif defined (__MSP430F5527__)
    700    000000              #include "msp430f5527.h"
    702    000000              #elif defined (__MSP430F5528__)
    703    000000              #include "msp430f5528.h"
    705    000000              #elif defined (__MSP430F5529__)
                                  - 4e-LP430 -                        Page    8

    706    000000              #include "msp430f5529.h"
    708    000000              #elif defined (__MSP430P112__)
    709    000000              #include "msp430p112.h"
    711    000000              #elif defined (__MSP430P313__)
    712    000000              #include "msp430p313.h"
    714    000000              #elif defined (__MSP430P315__)
    715    000000              #include "msp430p315.h"
    717    000000              #elif defined (__MSP430P315S__)
    718    000000              #include "msp430p315s.h"
    720    000000              #elif defined (__MSP430P325__)
    721    000000              #include "msp430p325.h"
    723    000000              #elif defined (__MSP430P337__)
    724    000000              #include "msp430p337.h"
    726    000000              #elif defined (__CC430F5133__)
    727    000000              #include "cc430f5133.h"
    729    000000              #elif defined (__CC430F5135__)
    730    000000              #include "cc430f5135.h"
    732    000000              #elif defined (__CC430F5137__)
    733    000000              #include "cc430f5137.h"
    735    000000              #elif defined (__CC430F6125__)
    736    000000              #include "cc430f6125.h"
    738    000000              #elif defined (__CC430F6126__)
    739    000000              #include "cc430f6126.h"
    741    000000              #elif defined (__CC430F6127__)
    742    000000              #include "cc430f6127.h"
    744    000000              #elif defined (__CC430F6135__)
    745    000000              #include "cc430f6135.h"
    747    000000              #elif defined (__CC430F6137__)
    748    000000              #include "cc430f6137.h"
    750    000000              #elif defined (__MSP430F5630__)
    751    000000              #include "msp430f5630.h"
    753    000000              #elif defined (__MSP430F5631__)
    754    000000              #include "msp430f5631.h"
    756    000000              #elif defined (__MSP430F5632__)
    757    000000              #include "msp430f5632.h"
    759    000000              #elif defined (__MSP430F5633__)
    760    000000              #include "msp430f5633.h"
    762    000000              #elif defined (__MSP430F5634__)
    763    000000              #include "msp430f5634.h"
    765    000000              #elif defined (__MSP430F5635__)
    766    000000              #include "msp430f5635.h"
    768    000000              #elif defined (__MSP430F5636__)
    769    000000              #include "msp430f5636.h"
    771    000000              #elif defined (__MSP430F5637__)
    772    000000              #include "msp430f5637.h"
    774    000000              #elif defined (__MSP430F5638__)
    775    000000              #include "msp430f5638.h"
    777    000000              #elif defined (__MSP430F6630__)
    778    000000              #include "msp430f6630.h"
    780    000000              #elif defined (__MSP430F6631__)
    781    000000              #include "msp430f6631.h"
    783    000000              #elif defined (__MSP430F6632__)
    784    000000              #include "msp430f6632.h"
    786    000000              #elif defined (__MSP430F6633__)
    787    000000              #include "msp430f6633.h"
    789    000000              #elif defined (__MSP430F6634__)
    790    000000              #include "msp430f6634.h"
    792    000000              #elif defined (__MSP430F6635__)
    793    000000              #include "msp430f6635.h"
    795    000000              #elif defined (__MSP430F6636__)
    796    000000              #include "msp430f6636.h"
    798    000000              #elif defined (__MSP430F6637__)
    799    000000              #include "msp430f6637.h"
    801    000000              #elif defined (__MSP430F6638__)
    802    000000              #include "msp430f6638.h"
    804    000000              #elif defined (__MSP430L092__)
    805    000000              #include "msp430l092.h"
    807    000000              #elif defined (__MSP430C091__)
    808    000000              #include "msp430c091.h"
    810    000000              #elif defined (__MSP430C092__)
    811    000000              #include "msp430c092.h"
    813    000000              #elif defined (__MSP430F5131__)
    814    000000              #include "msp430f5131.h"
    816    000000              #elif defined (__MSP430F5151__)
    817    000000              #include "msp430f5151.h"
    819    000000              #elif defined (__MSP430F5171__)
    820    000000              #include "msp430f5171.h"
    822    000000              #elif defined (__MSP430F5132__)
                                  - 4e-LP430 -                        Page    9

    823    000000              #include "msp430f5132.h"
    825    000000              #elif defined (__MSP430F5152__)
    826    000000              #include "msp430f5152.h"
    828    000000              #elif defined (__MSP430F5172__)
    829    000000              #include "msp430f5172.h"
    831    000000              #elif defined (__MSP430FR5720__)
    832    000000              #include "msp430fr5720.h"
    834    000000              #elif defined (__MSP430FR5725__)
    835    000000              #include "msp430fr5725.h"
    837    000000              #elif defined (__MSP430FR5728__)
    838    000000              #include "msp430fr5728.h"
    840    000000              #elif defined (__MSP430FR5729__)
    841    000000              #include "msp430fr5729.h"
    843    000000              #elif defined (__MSP430FR5730__)
    844    000000              #include "msp430fr5730.h"
    846    000000              #elif defined (__MSP430FR5735__)
    847    000000              #include "msp430fr5735.h"
    849    000000              #elif defined (__MSP430FR5738__)
    850    000000              #include "msp430fr5738.h"
    852    000000              #elif defined (__MSP430FR5739__)
    853    000000              #include "msp430fr5739.h"
    855    000000              #elif defined (__MSP430G2211__)
    856    000000              #include "msp430g2211.h"
    858    000000              #elif defined (__MSP430G2201__)
    859    000000              #include "msp430g2201.h"
    861    000000              #elif defined (__MSP430G2111__)
    862    000000              #include "msp430g2111.h"
    864    000000              #elif defined (__MSP430G2101__)
    865    000000              #include "msp430g2101.h"
    867    000000              #elif defined (__MSP430G2001__)
    868    000000              #include "msp430g2001.h"
    870    000000              #elif defined (__MSP430G2231__)
    871    000000              #include "msp430g2231.h"
    873    000000              #elif defined (__MSP430G2221__)
    874    000000              #include "msp430g2221.h"
    876    000000              #elif defined (__MSP430G2131__)
    877    000000              #include "msp430g2131.h"
    879    000000              #elif defined (__MSP430G2121__)
    880    000000              #include "msp430g2121.h"
    882    000000              #elif defined (__MSP430AFE221__)
    883    000000              #include "msp430afe221.h"
    885    000000              #elif defined (__MSP430AFE231__)
    886    000000              #include "msp430afe231.h"
    888    000000              #elif defined (__MSP430AFE251__)
    889    000000              #include "msp430afe251.h"
    891    000000              #elif defined (__MSP430AFE222__)
    892    000000              #include "msp430afe222.h"
    894    000000              #elif defined (__MSP430AFE232__)
    895    000000              #include "msp430afe232.h"
    897    000000              #elif defined (__MSP430AFE252__)
    898    000000              #include "msp430afe252.h"
    900    000000              #elif defined (__MSP430AFE223__)
    901    000000              #include "msp430afe223.h"
    903    000000              #elif defined (__MSP430AFE233__)
    904    000000              #include "msp430afe233.h"
    906    000000              #elif defined (__MSP430AFE253__)
    907    000000              #include "msp430afe253.h"
    909    000000              #elif defined (__MSP430G2102__)
    910    000000              #include "msp430g2102.h"
    912    000000              #elif defined (__MSP430G2202__)
    913    000000              #include "msp430g2202.h"
    915    000000              #elif defined (__MSP430G2302__)
    916    000000              #include "msp430g2302.h"
    918    000000              #elif defined (__MSP430G2402__)
    919    000000              #include "msp430g2402.h"
    921    000000              #elif defined (__MSP430G2132__)
    922    000000              #include "msp430g2132.h"
    924    000000              #elif defined (__MSP430G2232__)
    925    000000              #include "msp430g2232.h"
    927    000000              #elif defined (__MSP430G2332__)
    928    000000              #include "msp430g2332.h"
    930    000000              #elif defined (__MSP430G2432__)
    931    000000              #include "msp430g2432.h"
    933    000000              #elif defined (__MSP430G2112__)
    934    000000              #include "msp430g2112.h"
    936    000000              #elif defined (__MSP430G2212__)
    937    000000              #include "msp430g2212.h"
    939    000000              #elif defined (__MSP430G2312__)
                                  - 4e-LP430 -                        Page   10

    940    000000              #include "msp430g2312.h"
    942    000000              #elif defined (__MSP430G2412__)
    943    000000              #include "msp430g2412.h"
    945    000000              #elif defined (__MSP430G2152__)
    946    000000              #include "msp430g2152.h"
    948    000000              #elif defined (__MSP430G2252__)
    949    000000              #include "msp430g2252.h"
    951    000000              #elif defined (__MSP430G2352__)
    952    000000              #include "msp430g2352.h"
    954    000000              #elif defined (__MSP430G2452__)
    955    000000              #include "msp430g2452.h"
    957    000000              #elif defined (__MSP430G2113__)
    958    000000              #include "msp430g2113.h"
    960    000000              #elif defined (__MSP430G2213__)
    961    000000              #include "msp430g2213.h"
    963    000000              #elif defined (__MSP430G2313__)
    964    000000              #include "msp430g2313.h"
    966    000000              #elif defined (__MSP430G2413__)
    967    000000              #include "msp430g2413.h"
    969    000000              #elif defined (__MSP430G2513__)
    970    000000              #include "msp430g2513.h"
    972    000000              #elif defined (__MSP430G2153__)
    973    000000              #include "msp430g2153.h"
    975    000000              #elif defined (__MSP430G2253__)
    976    000000              #include "msp430g2253.h"
    978    000000              #elif defined (__MSP430G2353__)
    979    000000              #include "msp430g2353.h"
    981    000000              #elif defined (__MSP430G2453__)
    982    000000              #include "msp430g2453.h"
    984    000000              #elif defined (__MSP430G2553__)
    985    000000              #include "msp430g2553.h"
      1    000000              /***********************************************
                               *********************
      2    000000              *
      3    000000              * Standard register and bit definitions for the
                                Texas Instruments
      4    000000              * MSP430 microcontroller.
      5    000000              *
      6    000000              * This file supports assembler and C development
                                for
      7    000000              * MSP430G2553 devices.
      8    000000              *
      9    000000              * Texas Instruments, Version 1.0
     10    000000              *
     11    000000              * Rev. 1.0, Setup
     12    000000              *
     13    000000              ************************************************
                               ********************/
     14    000000              
     15    000000              #ifndef __MSP430G2553
     16    000000              #define __MSP430G2553
     17    000000              
     18    000000              #ifdef  __IAR_SYSTEMS_ICC__
     19    000000              #ifndef _SYSTEM_BUILD
     20    000000              #pragma system_include
     21    000000              #endif
     22    000000              #endif
     23    000000              
     24    000000              #if (((__TID__ >> 8) & 0x7F) != 0x2b)     /*
                                0x2b = 43 dec */
     25    000000              #error msp430g2553.h file for use with
                                ICC430/A430 only
     26    000000              #endif
     27    000000              
     28    000000              
     29    000000              #ifdef __IAR_SYSTEMS_ICC__
     30    000000              #include "in430.h"
     31    000000              #pragma language=extended
     33    000000              #define DEFC(name, address) __no_init volatile
                                unsigned char name @ address;
     34    000000              #define DEFW(name, address) __no_init volatile
                                unsigned short name @ address;
     35    000000              #define DEFXC  volatile unsigned char
     36    000000              #define DEFXW  volatile unsigned short
     38    000000              #endif  /* __IAR_SYSTEMS_ICC__  */
     39    000000              
     40    000000              
     41    000000              #ifdef __IAR_SYSTEMS_ASM__
                                  - 4e-LP430 -                        Page   11

     42    000000              #define DEFC(name, address) sfrb name =
                                address;
     43    000000              #define DEFW(name, address) sfrw name =
                                address;
     44    000000              
     45    000000              #endif /* __IAR_SYSTEMS_ASM__*/
     46    000000              
     47    000000              #ifdef __cplusplus
     48    000000              #define READ_ONLY
     49    000000              #else
     50    000000              #define READ_ONLY const
     51    000000              #endif
     52    000000              
     53    000000              /***********************************************
                               *************
     54    000000              * STANDARD BITS
     55    000000              ************************************************
                               ************/
     56    000000              
     57    000000              #define BIT0                (0x0001u)
     58    000000              #define BIT1                (0x0002u)
     59    000000              #define BIT2                (0x0004u)
     60    000000              #define BIT3                (0x0008u)
     61    000000              #define BIT4                (0x0010u)
     62    000000              #define BIT5                (0x0020u)
     63    000000              #define BIT6                (0x0040u)
     64    000000              #define BIT7                (0x0080u)
     65    000000              #define BIT8                (0x0100u)
     66    000000              #define BIT9                (0x0200u)
     67    000000              #define BITA                (0x0400u)
     68    000000              #define BITB                (0x0800u)
     69    000000              #define BITC                (0x1000u)
     70    000000              #define BITD                (0x2000u)
     71    000000              #define BITE                (0x4000u)
     72    000000              #define BITF                (0x8000u)
     73    000000              
     74    000000              /***********************************************
                               *************
     75    000000              * STATUS REGISTER BITS
     76    000000              ************************************************
                               ************/
     77    000000              
     78    000000              #define C                   (0x0001u)
     79    000000              #define Z                   (0x0002u)
     80    000000              #define N                   (0x0004u)
     81    000000              #define V                   (0x0100u)
     82    000000              #define GIE                 (0x0008u)
     83    000000              #define CPUOFF              (0x0010u)
     84    000000              #define OSCOFF              (0x0020u)
     85    000000              #define SCG0                (0x0040u)
     86    000000              #define SCG1                (0x0080u)
     87    000000              
     88    000000              /* Low Power Modes coded with Bits 4-7 in SR
                                */
     89    000000              
     90    000000              #ifndef __IAR_SYSTEMS_ICC__ /* Begin #defines
                                for assembler */
     91    000000              #define LPM0                (CPUOFF)
     92    000000              #define LPM1                (SCG0+CPUOFF)
     93    000000              #define LPM2                (SCG1+CPUOFF)
     94    000000              #define LPM3                (SCG1+SCG0+CPUOFF)
     95    000000              #define LPM4                (SCG1+SCG0+OSCOFF+CP
                               UOFF)
     96    000000              /* End #defines for assembler */
     97    000000              
     98    000000              #else /* Begin #defines for C */
     99    000000              #define LPM0_bits           (CPUOFF)
    100    000000              #define LPM1_bits           (SCG0+CPUOFF)
    101    000000              #define LPM2_bits           (SCG1+CPUOFF)
    102    000000              #define LPM3_bits           (SCG1+SCG0+CPUOFF)
    103    000000              #define LPM4_bits           (SCG1+SCG0+OSCOFF+CP
                               UOFF)
    105    000000              #include "in430.h"
    107    000000              #define LPM0      _BIS_SR(LPM0_bits)     /*
                                Enter Low Power Mode 0 */
    108    000000              #define LPM0_EXIT _BIC_SR_IRQ(LPM0_bits) /* Exit
                                Low Power Mode 0 */
    109    000000              #define LPM1      _BIS_SR(LPM1_bits)     /*
                                  - 4e-LP430 -                        Page   12

                                Enter Low Power Mode 1 */
    110    000000              #define LPM1_EXIT _BIC_SR_IRQ(LPM1_bits) /* Exit
                                Low Power Mode 1 */
    111    000000              #define LPM2      _BIS_SR(LPM2_bits)     /*
                                Enter Low Power Mode 2 */
    112    000000              #define LPM2_EXIT _BIC_SR_IRQ(LPM2_bits) /* Exit
                                Low Power Mode 2 */
    113    000000              #define LPM3      _BIS_SR(LPM3_bits)     /*
                                Enter Low Power Mode 3 */
    114    000000              #define LPM3_EXIT _BIC_SR_IRQ(LPM3_bits) /* Exit
                                Low Power Mode 3 */
    115    000000              #define LPM4      _BIS_SR(LPM4_bits)     /*
                                Enter Low Power Mode 4 */
    116    000000              #define LPM4_EXIT _BIC_SR_IRQ(LPM4_bits) /* Exit
                                Low Power Mode 4 */
    117    000000              #endif /* End #defines for C */
    118    000000              
    119    000000              /***********************************************
                               *************
    120    000000              * PERIPHERAL FILE MAP
    121    000000              ************************************************
                               ************/
    122    000000              
    123    000000              /***********************************************
                               *************
    124    000000              * SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL
                                BITS
    125    000000              ************************************************
                               ************/
    126    000000              
    127    000000              #define IE1_                (0x0000u)  /*
                                Interrupt Enable 1 */
    128    000000              DEFC(   IE1               , IE1_)
    129    000000              #define WDTIE               (0x01)    /*
                                Watchdog Interrupt Enable */
    130    000000              #define OFIE                (0x02)    /* Osc.
                                Fault  Interrupt Enable */
    131    000000              #define NMIIE               (0x10)    /* NMI
                                Interrupt Enable */
    132    000000              #define ACCVIE              (0x20)    /* Flash
                                Access Violation Interrupt Enable */
    133    000000              
    134    000000              #define IFG1_               (0x0002u)  /*
                                Interrupt Flag 1 */
    135    000000              DEFC(   IFG1              , IFG1_)
    136    000000              #define WDTIFG              (0x01)    /*
                                Watchdog Interrupt Flag */
    137    000000              #define OFIFG               (0x02)    /* Osc.
                                Fault Interrupt Flag */
    138    000000              #define PORIFG              (0x04)    /* Power
                                On Interrupt Flag */
    139    000000              #define RSTIFG              (0x08)    /* Reset
                                Interrupt Flag */
    140    000000              #define NMIIFG              (0x10)    /* NMI
                                Interrupt Flag */
    141    000000              
    142    000000              #define IE2_                (0x0001u)  /*
                                Interrupt Enable 2 */
    143    000000              DEFC(   IE2               , IE2_)
    144    000000              #define UC0IE               IE2
    145    000000              #define UCA0RXIE            (0x01)
    146    000000              #define UCA0TXIE            (0x02)
    147    000000              #define UCB0RXIE            (0x04)
    148    000000              #define UCB0TXIE            (0x08)
    149    000000              
    150    000000              #define IFG2_               (0x0003u)  /*
                                Interrupt Flag 2 */
    151    000000              DEFC(   IFG2              , IFG2_)
    152    000000              #define UC0IFG              IFG2
    153    000000              #define UCA0RXIFG           (0x01)
    154    000000              #define UCA0TXIFG           (0x02)
    155    000000              #define UCB0RXIFG           (0x04)
    156    000000              #define UCB0TXIFG           (0x08)
    157    000000              
    158    000000              /***********************************************
                               *************
    159    000000              * ADC10
    160    000000              ************************************************
                                  - 4e-LP430 -                        Page   13

                               ************/
    161    000000              #define __MSP430_HAS_ADC10__            /*
                                Definition to show that Module is available
                                */
    162    000000              
    163    000000              #define ADC10DTC0_          (0x0048u)    /*
                                ADC10 Data Transfer Control 0 */
    164    000000              DEFC(   ADC10DTC0         , ADC10DTC0_)
    165    000000              #define ADC10DTC1_          (0x0049u)    /*
                                ADC10 Data Transfer Control 1 */
    166    000000              DEFC(   ADC10DTC1         , ADC10DTC1_)
    167    000000              #define ADC10AE0_           (0x004Au)    /*
                                ADC10 Analog Enable 0 */
    168    000000              DEFC(   ADC10AE0          , ADC10AE0_)
    169    000000              
    170    000000              #define ADC10CTL0_          (0x01B0u)    /*
                                ADC10 Control 0 */
    171    000000              DEFW(   ADC10CTL0         , ADC10CTL0_)
    172    000000              #define ADC10CTL1_          (0x01B2u)    /*
                                ADC10 Control 1 */
    173    000000              DEFW(   ADC10CTL1         , ADC10CTL1_)
    174    000000              #define ADC10MEM_           (0x01B4u)    /*
                                ADC10 Memory */
    175    000000              DEFW(   ADC10MEM          , ADC10MEM_)
    176    000000              #define ADC10SA_            (0x01BCu)    /*
                                ADC10 Data Transfer Start Address */
    177    000000              DEFW(   ADC10SA           , ADC10SA_)
    178    000000              
    179    000000              /* ADC10CTL0 */
    180    000000              #define ADC10SC             (0x001)     /* ADC10
                                Start Conversion */
    181    000000              #define ENC                 (0x002)     /* ADC10
                                Enable Conversion */
    182    000000              #define ADC10IFG            (0x004)     /* ADC10
                                Interrupt Flag */
    183    000000              #define ADC10IE             (0x008)     /* ADC10
                                Interrupt Enalbe */
    184    000000              #define ADC10ON             (0x010)     /* ADC10
                                On/Enable */
    185    000000              #define REFON               (0x020)     /* ADC10
                                Reference on */
    186    000000              #define REF2_5V             (0x040)     /* ADC10
                                Ref 0:1.5V / 1:2.5V */
    187    000000              #define MSC                 (0x080)     /* ADC10
                                Multiple SampleConversion */
    188    000000              #define REFBURST            (0x100)     /* ADC10
                                Reference Burst Mode */
    189    000000              #define REFOUT              (0x200)     /* ADC10
                                Enalbe output of Ref. */
    190    000000              #define ADC10SR             (0x400)     /* ADC10
                                Sampling Rate 0:200ksps / 1:50ksps */
    191    000000              #define ADC10SHT0           (0x800)     /* ADC10
                                Sample Hold Select Bit: 0 */
    192    000000              #define ADC10SHT1           (0x1000u)    /*
                                ADC10 Sample Hold Select Bit: 1 */
    193    000000              #define SREF0               (0x2000u)    /*
                                ADC10 Reference Select Bit: 0 */
    194    000000              #define SREF1               (0x4000u)    /*
                                ADC10 Reference Select Bit: 1 */
    195    000000              #define SREF2               (0x8000u)    /*
                                ADC10 Reference Select Bit: 2 */
    196    000000              #define ADC10SHT_0          (0*0x800u)   /* 4 x
                                ADC10CLKs */
    197    000000              #define ADC10SHT_1          (1*0x800u)   /* 8 x
                                ADC10CLKs */
    198    000000              #define ADC10SHT_2          (2*0x800u)   /* 16 x
                                ADC10CLKs */
    199    000000              #define ADC10SHT_3          (3*0x800u)   /* 64 x
                                ADC10CLKs */
    200    000000              
    201    000000              #define SREF_0              (0*0x2000u)  /* VR+
                                = AVCC and VR- = AVSS */
    202    000000              #define SREF_1              (1*0x2000u)  /* VR+
                                = VREF+ and VR- = AVSS */
    203    000000              #define SREF_2              (2*0x2000u)  /* VR+
                                = VEREF+ and VR- = AVSS */
    204    000000              #define SREF_3              (3*0x2000u)  /* VR+
                                = VEREF+ and VR- = AVSS */
                                  - 4e-LP430 -                        Page   14

    205    000000              #define SREF_4              (4*0x2000u)  /* VR+
                                = AVCC and VR- = VREF-/VEREF- */
    206    000000              #define SREF_5              (5*0x2000u)  /* VR+
                                = VREF+ and VR- = VREF-/VEREF- */
    207    000000              #define SREF_6              (6*0x2000u)  /* VR+
                                = VEREF+ and VR- = VREF-/VEREF- */
    208    000000              #define SREF_7              (7*0x2000u)  /* VR+
                                = VEREF+ and VR- = VREF-/VEREF- */
    209    000000              
    210    000000              /* ADC10CTL1 */
    211    000000              #define ADC10BUSY           (0x0001u)    /*
                                ADC10 BUSY */
    212    000000              #define CONSEQ0             (0x0002u)    /*
                                ADC10 Conversion Sequence Select 0 */
    213    000000              #define CONSEQ1             (0x0004u)    /*
                                ADC10 Conversion Sequence Select 1 */
    214    000000              #define ADC10SSEL0          (0x0008u)    /*
                                ADC10 Clock Source Select Bit: 0 */
    215    000000              #define ADC10SSEL1          (0x0010u)    /*
                                ADC10 Clock Source Select Bit: 1 */
    216    000000              #define ADC10DIV0           (0x0020u)    /*
                                ADC10 Clock Divider Select Bit: 0 */
    217    000000              #define ADC10DIV1           (0x0040u)    /*
                                ADC10 Clock Divider Select Bit: 1 */
    218    000000              #define ADC10DIV2           (0x0080u)    /*
                                ADC10 Clock Divider Select Bit: 2 */
    219    000000              #define ISSH                (0x0100u)    /*
                                ADC10 Invert Sample Hold Signal */
    220    000000              #define ADC10DF             (0x0200u)    /*
                                ADC10 Data Format 0:binary 1:2's complement
                                */
    221    000000              #define SHS0                (0x0400u)    /*
                                ADC10 Sample/Hold Source Bit: 0 */
    222    000000              #define SHS1                (0x0800u)    /*
                                ADC10 Sample/Hold Source Bit: 1 */
    223    000000              #define INCH0               (0x1000u)    /*
                                ADC10 Input Channel Select Bit: 0 */
    224    000000              #define INCH1               (0x2000u)    /*
                                ADC10 Input Channel Select Bit: 1 */
    225    000000              #define INCH2               (0x4000u)    /*
                                ADC10 Input Channel Select Bit: 2 */
    226    000000              #define INCH3               (0x8000u)    /*
                                ADC10 Input Channel Select Bit: 3 */
    227    000000              
    228    000000              #define CONSEQ_0            (0*2u)       /*
                                Single channel single conversion */
    229    000000              #define CONSEQ_1            (1*2u)       /*
                                Sequence of channels */
    230    000000              #define CONSEQ_2            (2*2u)       /*
                                Repeat single channel */
    231    000000              #define CONSEQ_3            (3*2u)       /*
                                Repeat sequence of channels */
    232    000000              
    233    000000              #define ADC10SSEL_0         (0*8u)       /*
                                ADC10OSC */
    234    000000              #define ADC10SSEL_1         (1*8u)       /* ACLK
                                */
    235    000000              #define ADC10SSEL_2         (2*8u)       /* MCLK
                                */
    236    000000              #define ADC10SSEL_3         (3*8u)       /*
                                SMCLK */
    237    000000              
    238    000000              #define ADC10DIV_0          (0*0x20u)    /*
                                ADC10 Clock Divider Select 0 */
    239    000000              #define ADC10DIV_1          (1*0x20u)    /*
                                ADC10 Clock Divider Select 1 */
    240    000000              #define ADC10DIV_2          (2*0x20u)    /*
                                ADC10 Clock Divider Select 2 */
    241    000000              #define ADC10DIV_3          (3*0x20u)    /*
                                ADC10 Clock Divider Select 3 */
    242    000000              #define ADC10DIV_4          (4*0x20u)    /*
                                ADC10 Clock Divider Select 4 */
    243    000000              #define ADC10DIV_5          (5*0x20u)    /*
                                ADC10 Clock Divider Select 5 */
    244    000000              #define ADC10DIV_6          (6*0x20u)    /*
                                ADC10 Clock Divider Select 6 */
    245    000000              #define ADC10DIV_7          (7*0x20u)    /*
                                ADC10 Clock Divider Select 7 */
                                  - 4e-LP430 -                        Page   15

    246    000000              
    247    000000              #define SHS_0               (0*0x400u)   /*
                                ADC10SC */
    248    000000              #define SHS_1               (1*0x400u)   /* TA3
                                OUT1 */
    249    000000              #define SHS_2               (2*0x400u)   /* TA3
                                OUT0 */
    250    000000              #define SHS_3               (3*0x400u)   /* TA3
                                OUT2 */
    251    000000              
    252    000000              #define INCH_0              (0*0x1000u)  /*
                                Selects Channel 0 */
    253    000000              #define INCH_1              (1*0x1000u)  /*
                                Selects Channel 1 */
    254    000000              #define INCH_2              (2*0x1000u)  /*
                                Selects Channel 2 */
    255    000000              #define INCH_3              (3*0x1000u)  /*
                                Selects Channel 3 */
    256    000000              #define INCH_4              (4*0x1000u)  /*
                                Selects Channel 4 */
    257    000000              #define INCH_5              (5*0x1000u)  /*
                                Selects Channel 5 */
    258    000000              #define INCH_6              (6*0x1000u)  /*
                                Selects Channel 6 */
    259    000000              #define INCH_7              (7*0x1000u)  /*
                                Selects Channel 7 */
    260    000000              #define INCH_8              (8*0x1000u)  /*
                                Selects Channel 8 */
    261    000000              #define INCH_9              (9*0x1000u)  /*
                                Selects Channel 9 */
    262    000000              #define INCH_10             (10*0x1000u) /*
                                Selects Channel 10 */
    263    000000              #define INCH_11             (11*0x1000u) /*
                                Selects Channel 11 */
    264    000000              #define INCH_12             (12*0x1000u) /*
                                Selects Channel 12 */
    265    000000              #define INCH_13             (13*0x1000u) /*
                                Selects Channel 13 */
    266    000000              #define INCH_14             (14*0x1000u) /*
                                Selects Channel 14 */
    267    000000              #define INCH_15             (15*0x1000u) /*
                                Selects Channel 15 */
    268    000000              
    269    000000              /* ADC10DTC0 */
    270    000000              #define ADC10FETCH          (0x001)     /* This
                                bit should normally be reset */
    271    000000              #define ADC10B1             (0x002)     /* ADC10
                                block one */
    272    000000              #define ADC10CT             (0x004)     /* ADC10
                                continuous transfer */
    273    000000              #define ADC10TB             (0x008)     /* ADC10
                                two-block mode */
    274    000000              #define ADC10DISABLE        (0x000)     /*
                                ADC10DTC1 */
    275    000000              
    276    000000              /***********************************************
                               *************
    277    000000              * Basic Clock Module
    278    000000              ************************************************
                               ************/
    279    000000              #define __MSP430_HAS_BC2__            /*
                                Definition to show that Module is available
                                */
    280    000000              
    281    000000              #define DCOCTL_             (0x0056u)  /* DCO
                                Clock Frequency Control */
    282    000000              DEFC(   DCOCTL            , DCOCTL_)
    283    000000              #define BCSCTL1_            (0x0057u)  /* Basic
                                Clock System Control 1 */
    284    000000              DEFC(   BCSCTL1           , BCSCTL1_)
    285    000000              #define BCSCTL2_            (0x0058u)  /* Basic
                                Clock System Control 2 */
    286    000000              DEFC(   BCSCTL2           , BCSCTL2_)
    287    000000              #define BCSCTL3_            (0x0053u)  /* Basic
                                Clock System Control 3 */
    288    000000              DEFC(   BCSCTL3           , BCSCTL3_)
    289    000000              
    290    000000              #define MOD0                (0x01)   /*
                                  - 4e-LP430 -                        Page   16

                                Modulation Bit 0 */
    291    000000              #define MOD1                (0x02)   /*
                                Modulation Bit 1 */
    292    000000              #define MOD2                (0x04)   /*
                                Modulation Bit 2 */
    293    000000              #define MOD3                (0x08)   /*
                                Modulation Bit 3 */
    294    000000              #define MOD4                (0x10)   /*
                                Modulation Bit 4 */
    295    000000              #define DCO0                (0x20)   /* DCO
                                Select Bit 0 */
    296    000000              #define DCO1                (0x40)   /* DCO
                                Select Bit 1 */
    297    000000              #define DCO2                (0x80)   /* DCO
                                Select Bit 2 */
    298    000000              
    299    000000              #define RSEL0               (0x01)   /* Range
                                Select Bit 0 */
    300    000000              #define RSEL1               (0x02)   /* Range
                                Select Bit 1 */
    301    000000              #define RSEL2               (0x04)   /* Range
                                Select Bit 2 */
    302    000000              #define RSEL3               (0x08)   /* Range
                                Select Bit 3 */
    303    000000              #define DIVA0               (0x10)   /* ACLK
                                Divider 0 */
    304    000000              #define DIVA1               (0x20)   /* ACLK
                                Divider 1 */
    305    000000              #define XTS                 (0x40)   /* LFXTCLK
                                0:Low Freq. / 1: High Freq. */
    306    000000              #define XT2OFF              (0x80)   /* Enable
                                XT2CLK */
    307    000000              
    308    000000              #define DIVA_0              (0x00)   /* ACLK
                                Divider 0: /1 */
    309    000000              #define DIVA_1              (0x10)   /* ACLK
                                Divider 1: /2 */
    310    000000              #define DIVA_2              (0x20)   /* ACLK
                                Divider 2: /4 */
    311    000000              #define DIVA_3              (0x30)   /* ACLK
                                Divider 3: /8 */
    312    000000              
    313    000000              #define DIVS0               (0x02)   /* SMCLK
                                Divider 0 */
    314    000000              #define DIVS1               (0x04)   /* SMCLK
                                Divider 1 */
    315    000000              #define SELS                (0x08)   /* SMCLK
                                Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK
                                */
    316    000000              #define DIVM0               (0x10)   /* MCLK
                                Divider 0 */
    317    000000              #define DIVM1               (0x20)   /* MCLK
                                Divider 1 */
    318    000000              #define SELM0               (0x40)   /* MCLK
                                Source Select 0 */
    319    000000              #define SELM1               (0x80)   /* MCLK
                                Source Select 1 */
    320    000000              
    321    000000              #define DIVS_0              (0x00)   /* SMCLK
                                Divider 0: /1 */
    322    000000              #define DIVS_1              (0x02)   /* SMCLK
                                Divider 1: /2 */
    323    000000              #define DIVS_2              (0x04)   /* SMCLK
                                Divider 2: /4 */
    324    000000              #define DIVS_3              (0x06)   /* SMCLK
                                Divider 3: /8 */
    325    000000              
    326    000000              #define DIVM_0              (0x00)   /* MCLK
                                Divider 0: /1 */
    327    000000              #define DIVM_1              (0x10)   /* MCLK
                                Divider 1: /2 */
    328    000000              #define DIVM_2              (0x20)   /* MCLK
                                Divider 2: /4 */
    329    000000              #define DIVM_3              (0x30)   /* MCLK
                                Divider 3: /8 */
    330    000000              
    331    000000              #define SELM_0              (0x00)   /* MCLK
                                Source Select 0: DCOCLK */
                                  - 4e-LP430 -                        Page   17

    332    000000              #define SELM_1              (0x40)   /* MCLK
                                Source Select 1: DCOCLK */
    333    000000              #define SELM_2              (0x80)   /* MCLK
                                Source Select 2: XT2CLK/LFXTCLK */
    334    000000              #define SELM_3              (0xC0)   /* MCLK
                                Source Select 3: LFXTCLK */
    335    000000              
    336    000000              #define LFXT1OF             (0x01)   /* Low/high
                                Frequency Oscillator Fault Flag */
    337    000000              #define XT2OF               (0x02)   /* High
                                frequency oscillator 2 fault flag */
    338    000000              #define XCAP0               (0x04)   /* XIN/XOUT
                                Cap 0 */
    339    000000              #define XCAP1               (0x08)   /* XIN/XOUT
                                Cap 1 */
    340    000000              #define LFXT1S0             (0x10)   /* Mode 0
                                for LFXT1 (XTS = 0) */
    341    000000              #define LFXT1S1             (0x20)   /* Mode 1
                                for LFXT1 (XTS = 0) */
    342    000000              #define XT2S0               (0x40)   /* Mode 0
                                for XT2 */
    343    000000              #define XT2S1               (0x80)   /* Mode 1
                                for XT2 */
    344    000000              
    345    000000              #define XCAP_0              (0x00)   /* XIN/XOUT
                                Cap : 0 pF */
    346    000000              #define XCAP_1              (0x04)   /* XIN/XOUT
                                Cap : 6 pF */
    347    000000              #define XCAP_2              (0x08)   /* XIN/XOUT
                                Cap : 10 pF */
    348    000000              #define XCAP_3              (0x0C)   /* XIN/XOUT
                                Cap : 12.5 pF */
    349    000000              
    350    000000              #define LFXT1S_0            (0x00)   /* Mode 0
                                for LFXT1 : Normal operation */
    351    000000              #define LFXT1S_1            (0x10)   /* Mode 1
                                for LFXT1 : Reserved */
    352    000000              #define LFXT1S_2            (0x20)   /* Mode 2
                                for LFXT1 : VLO */
    353    000000              #define LFXT1S_3            (0x30)   /* Mode 3
                                for LFXT1 : Digital input signal */
    354    000000              
    355    000000              #define XT2S_0              (0x00)   /* Mode 0
                                for XT2 : 0.4 - 1 MHz */
    356    000000              #define XT2S_1              (0x40)   /* Mode 1
                                for XT2 : 1 - 4 MHz */
    357    000000              #define XT2S_2              (0x80)   /* Mode 2
                                for XT2 : 2 - 16 MHz */
    358    000000              #define XT2S_3              (0xC0)   /* Mode 3
                                for XT2 : Digital input signal */
    359    000000              
    360    000000              /***********************************************
                               *************
    361    000000              * Comparator A
    362    000000              ************************************************
                               ************/
    363    000000              #define __MSP430_HAS_CAPLUS__         /*
                                Definition to show that Module is available
                                */
    364    000000              
    365    000000              #define CACTL1_             (0x0059u)  /*
                                Comparator A Control 1 */
    366    000000              DEFC(   CACTL1            , CACTL1_)
    367    000000              #define CACTL2_             (0x005Au)  /*
                                Comparator A Control 2 */
    368    000000              DEFC(   CACTL2            , CACTL2_)
    369    000000              #define CAPD_               (0x005Bu)  /*
                                Comparator A Port Disable */
    370    000000              DEFC(   CAPD              , CAPD_)
    371    000000              
    372    000000              #define CAIFG               (0x01)    /* Comp. A
                                Interrupt Flag */
    373    000000              #define CAIE                (0x02)    /* Comp. A
                                Interrupt Enable */
    374    000000              #define CAIES               (0x04)    /* Comp. A
                                Int. Edge Select: 0:rising / 1:falling
                                */
    375    000000              #define CAON                (0x08)    /* Comp. A
                                  - 4e-LP430 -                        Page   18

                                enable */
    376    000000              #define CAREF0              (0x10)    /* Comp. A
                                Internal Reference Select 0 */
    377    000000              #define CAREF1              (0x20)    /* Comp. A
                                Internal Reference Select 1 */
    378    000000              #define CARSEL              (0x40)    /* Comp. A
                                Internal Reference Enable */
    379    000000              #define CAEX                (0x80)    /* Comp. A
                                Exchange Inputs */
    380    000000              
    381    000000              #define CAREF_0             (0x00)    /* Comp. A
                                Int. Ref. Select 0 : Off */
    382    000000              #define CAREF_1             (0x10)    /* Comp. A
                                Int. Ref. Select 1 : 0.25*Vcc */
    383    000000              #define CAREF_2             (0x20)    /* Comp. A
                                Int. Ref. Select 2 : 0.5*Vcc */
    384    000000              #define CAREF_3             (0x30)    /* Comp. A
                                Int. Ref. Select 3 : Vt*/
    385    000000              
    386    000000              #define CAOUT               (0x01)    /* Comp. A
                                Output */
    387    000000              #define CAF                 (0x02)    /* Comp. A
                                Enable Output Filter */
    388    000000              #define P2CA0               (0x04)    /* Comp. A
                                +Terminal Multiplexer */
    389    000000              #define P2CA1               (0x08)    /* Comp. A
                                -Terminal Multiplexer */
    390    000000              #define P2CA2               (0x10)    /* Comp. A
                                -Terminal Multiplexer */
    391    000000              #define P2CA3               (0x20)    /* Comp. A
                                -Terminal Multiplexer */
    392    000000              #define P2CA4               (0x40)    /* Comp. A
                                +Terminal Multiplexer */
    393    000000              #define CASHORT             (0x80)    /* Comp. A
                                Short + and - Terminals */
    394    000000              
    395    000000              #define CAPD0               (0x01)    /* Comp. A
                                Disable Input Buffer of Port Register .0
                                */
    396    000000              #define CAPD1               (0x02)    /* Comp. A
                                Disable Input Buffer of Port Register .1
                                */
    397    000000              #define CAPD2               (0x04)    /* Comp. A
                                Disable Input Buffer of Port Register .2
                                */
    398    000000              #define CAPD3               (0x08)    /* Comp. A
                                Disable Input Buffer of Port Register .3
                                */
    399    000000              #define CAPD4               (0x10)    /* Comp. A
                                Disable Input Buffer of Port Register .4
                                */
    400    000000              #define CAPD5               (0x20)    /* Comp. A
                                Disable Input Buffer of Port Register .5
                                */
    401    000000              #define CAPD6               (0x40)    /* Comp. A
                                Disable Input Buffer of Port Register .6
                                */
    402    000000              #define CAPD7               (0x80)    /* Comp. A
                                Disable Input Buffer of Port Register .7
                                */
    403    000000              
    404    000000              /***********************************************
                               **************
    405    000000              * Flash Memory
    406    000000              ************************************************
                               *************/
    407    000000              #define __MSP430_HAS_FLASH2__         /*
                                Definition to show that Module is available
                                */
    408    000000              
    409    000000              #define FCTL1_              (0x0128u)  /* FLASH
                                Control 1 */
    410    000000              DEFW(   FCTL1             , FCTL1_)
    411    000000              #define FCTL2_              (0x012Au)  /* FLASH
                                Control 2 */
    412    000000              DEFW(   FCTL2             , FCTL2_)
    413    000000              #define FCTL3_              (0x012Cu)  /* FLASH
                                Control 3 */
                                  - 4e-LP430 -                        Page   19

    414    000000              DEFW(   FCTL3             , FCTL3_)
    415    000000              
    416    000000              #define FRKEY               (0x9600u)  /* Flash
                                key returned by read */
    417    000000              #define FWKEY               (0xA500u)  /* Flash
                                key for write */
    418    000000              #define FXKEY               (0x3300u)  /* for
                                use with XOR instruction */
    419    000000              
    420    000000              #define ERASE               (0x0002u)  /* Enable
                                bit for Flash segment erase */
    421    000000              #define MERAS               (0x0004u)  /* Enable
                                bit for Flash mass erase */
    422    000000              #define WRT                 (0x0040u)  /* Enable
                                bit for Flash write */
    423    000000              #define BLKWRT              (0x0080u)  /* Enable
                                bit for Flash segment write */
    424    000000              #define SEGWRT              (0x0080u)  /* old
                                definition */ /* Enable bit for Flash segment
                                write */
    425    000000              
    426    000000              #define FN0                 (0x0001u)  /* Divide
                                Flash clock by 1 to 64 using FN0 to FN5
                                according to: */
    427    000000              #define FN1                 (0x0002u)  /* 
                                32*FN5 + 16*FN4 + 8*FN3 + 4*FN2 + 2*FN1 + FN0 +
                                1 */
    428    000000              #ifndef FN2
    429    000000              #define FN2                 (0x0004u)
    430    000000              #endif
    431    000000              #ifndef FN3
    432    000000              #define FN3                 (0x0008u)
    433    000000              #endif
    434    000000              #ifndef FN4
    435    000000              #define FN4                 (0x0010u)
    436    000000              #endif
    437    000000              #define FN5                 (0x0020u)
    438    000000              #define FSSEL0              (0x0040u)  /* Flash
                                clock select 0 */        /* to distinguish from
                                USART SSELx */
    439    000000              #define FSSEL1              (0x0080u)  /* Flash
                                clock select 1 */
    440    000000              
    441    000000              #define FSSEL_0             (0x0000u)  /* Flash
                                clock select: 0 - ACLK */
    442    000000              #define FSSEL_1             (0x0040u)  /* Flash
                                clock select: 1 - MCLK */
    443    000000              #define FSSEL_2             (0x0080u)  /* Flash
                                clock select: 2 - SMCLK */
    444    000000              #define FSSEL_3             (0x00C0u)  /* Flash
                                clock select: 3 - SMCLK */
    445    000000              
    446    000000              #define BUSY                (0x0001u)  /* Flash
                                busy: 1 */
    447    000000              #define KEYV                (0x0002u)  /* Flash
                                Key violation flag */
    448    000000              #define ACCVIFG             (0x0004u)  /* Flash
                                Access violation flag */
    449    000000              #define WAIT                (0x0008u)  /* Wait
                                flag for segment write */
    450    000000              #define LOCK                (0x0010u)  /* Lock
                                bit: 1 - Flash is locked (read only) */
    451    000000              #define EMEX                (0x0020u)  /* Flash
                                Emergency Exit */
    452    000000              #define LOCKA               (0x0040u)  /*
                                Segment A Lock bit: read = 1 - Segment is
                                locked (read only) */
    453    000000              #define FAIL                (0x0080u)  /* Last
                                Program or Erase failed */
    454    000000              
    455    000000              /***********************************************
                               *************
    456    000000              * DIGITAL I/O Port1/2 Pull up / Pull down
                                Resistors
    457    000000              ************************************************
                               ************/
    458    000000              #define __MSP430_HAS_PORT1_R__        /*
                                Definition to show that Module is available
                                  - 4e-LP430 -                        Page   20

                                */
    459    000000              #define __MSP430_HAS_PORT2_R__        /*
                                Definition to show that Module is available
                                */
    460    000000              
    461    000000              #define P1IN_               (0x0020u)  /* Port 1
                                Input */
    462    000000              READ_ONLY DEFC( P1IN           , P1IN_)
    463    000000              #define P1OUT_              (0x0021u)  /* Port 1
                                Output */
    464    000000              DEFC(   P1OUT             , P1OUT_)
    465    000000              #define P1DIR_              (0x0022u)  /* Port 1
                                Direction */
    466    000000              DEFC(   P1DIR             , P1DIR_)
    467    000000              #define P1IFG_              (0x0023u)  /* Port 1
                                Interrupt Flag */
    468    000000              DEFC(   P1IFG             , P1IFG_)
    469    000000              #define P1IES_              (0x0024u)  /* Port 1
                                Interrupt Edge Select */
    470    000000              DEFC(   P1IES             , P1IES_)
    471    000000              #define P1IE_               (0x0025u)  /* Port 1
                                Interrupt Enable */
    472    000000              DEFC(   P1IE              , P1IE_)
    473    000000              #define P1SEL_              (0x0026u)  /* Port 1
                                Selection */
    474    000000              DEFC(   P1SEL             , P1SEL_)
    475    000000              #define P1SEL2_             (0x0041u)  /* Port 1
                                Selection 2 */
    476    000000              DEFC(   P1SEL2            , P1SEL2_)
    477    000000              #define P1REN_              (0x0027u)  /* Port 1
                                Resistor Enable */
    478    000000              DEFC(   P1REN             , P1REN_)
    479    000000              
    480    000000              #define P2IN_               (0x0028u)  /* Port 2
                                Input */
    481    000000              READ_ONLY DEFC( P2IN           , P2IN_)
    482    000000              #define P2OUT_              (0x0029u)  /* Port 2
                                Output */
    483    000000              DEFC(   P2OUT             , P2OUT_)
    484    000000              #define P2DIR_              (0x002Au)  /* Port 2
                                Direction */
    485    000000              DEFC(   P2DIR             , P2DIR_)
    486    000000              #define P2IFG_              (0x002Bu)  /* Port 2
                                Interrupt Flag */
    487    000000              DEFC(   P2IFG             , P2IFG_)
    488    000000              #define P2IES_              (0x002Cu)  /* Port 2
                                Interrupt Edge Select */
    489    000000              DEFC(   P2IES             , P2IES_)
    490    000000              #define P2IE_               (0x002Du)  /* Port 2
                                Interrupt Enable */
    491    000000              DEFC(   P2IE              , P2IE_)
    492    000000              #define P2SEL_              (0x002Eu)  /* Port 2
                                Selection */
    493    000000              DEFC(   P2SEL             , P2SEL_)
    494    000000              #define P2SEL2_             (0x0042u)  /* Port 2
                                Selection 2 */
    495    000000              DEFC(   P2SEL2            , P2SEL2_)
    496    000000              #define P2REN_              (0x002Fu)  /* Port 2
                                Resistor Enable */
    497    000000              DEFC(   P2REN             , P2REN_)
    498    000000              
    499    000000              /***********************************************
                               *************
    500    000000              * DIGITAL I/O Port3 Pull up / Pull down
                                Resistors
    501    000000              ************************************************
                               ************/
    502    000000              #define __MSP430_HAS_PORT3_R__          /*
                                Definition to show that Module is available
                                */
    503    000000              
    504    000000              #define P3IN_               (0x0018u)  /* Port 3
                                Input */
    505    000000              READ_ONLY DEFC( P3IN           , P3IN_)
    506    000000              #define P3OUT_              (0x0019u)  /* Port 3
                                Output */
    507    000000              DEFC(   P3OUT             , P3OUT_)
    508    000000              #define P3DIR_              (0x001Au)  /* Port 3
                                  - 4e-LP430 -                        Page   21

                                Direction */
    509    000000              DEFC(   P3DIR             , P3DIR_)
    510    000000              #define P3SEL_              (0x001Bu)  /* Port 3
                                Selection */
    511    000000              DEFC(   P3SEL             , P3SEL_)
    512    000000              #define P3SEL2_             (0x0043u)  /* Port 3
                                Selection 2 */
    513    000000              DEFC(   P3SEL2            , P3SEL2_)
    514    000000              #define P3REN_              (0x0010u)  /* Port 3
                                Resistor Enable */
    515    000000              DEFC(   P3REN             , P3REN_)
    516    000000              
    517    000000              /***********************************************
                               *************
    518    000000              * Timer0_A3
    519    000000              ************************************************
                               ************/
    520    000000              #define __MSP430_HAS_TA3__            /*
                                Definition to show that Module is available
                                */
    521    000000              
    522    000000              #define TA0IV_              (0x012Eu)  /*
                                Timer0_A3 Interrupt Vector Word */
    523    000000              READ_ONLY DEFW( TA0IV          , TA0IV_)
    524    000000              #define TA0CTL_             (0x0160u)  /*
                                Timer0_A3 Control */
    525    000000              DEFW(   TA0CTL            , TA0CTL_)
    526    000000              #define TA0CCTL0_           (0x0162u)  /*
                                Timer0_A3 Capture/Compare Control 0 */
    527    000000              DEFW(   TA0CCTL0          , TA0CCTL0_)
    528    000000              #define TA0CCTL1_           (0x0164u)  /*
                                Timer0_A3 Capture/Compare Control 1 */
    529    000000              DEFW(   TA0CCTL1          , TA0CCTL1_)
    530    000000              #define TA0CCTL2_           (0x0166u)  /*
                                Timer0_A3 Capture/Compare Control 2 */
    531    000000              DEFW(   TA0CCTL2          , TA0CCTL2_)
    532    000000              #define TA0R_               (0x0170u)  /*
                                Timer0_A3 */
    533    000000              DEFW(   TA0R              , TA0R_)
    534    000000              #define TA0CCR0_            (0x0172u)  /*
                                Timer0_A3 Capture/Compare 0 */
    535    000000              DEFW(   TA0CCR0           , TA0CCR0_)
    536    000000              #define TA0CCR1_            (0x0174u)  /*
                                Timer0_A3 Capture/Compare 1 */
    537    000000              DEFW(   TA0CCR1           , TA0CCR1_)
    538    000000              #define TA0CCR2_            (0x0176u)  /*
                                Timer0_A3 Capture/Compare 2 */
    539    000000              DEFW(   TA0CCR2           , TA0CCR2_)
    540    000000              
    541    000000              /* Alternate register names */
    542    000000              #define TAIV                TA0IV     /* Timer A
                                Interrupt Vector Word */
    543    000000              #define TACTL               TA0CTL    /* Timer A
                                Control */
    544    000000              #define TACCTL0             TA0CCTL0  /* Timer A
                                Capture/Compare Control 0 */
    545    000000              #define TACCTL1             TA0CCTL1  /* Timer A
                                Capture/Compare Control 1 */
    546    000000              #define TACCTL2             TA0CCTL2  /* Timer A
                                Capture/Compare Control 2 */
    547    000000              #define TAR                 TA0R      /* Timer A
                                */
    548    000000              #define TACCR0              TA0CCR0   /* Timer A
                                Capture/Compare 0 */
    549    000000              #define TACCR1              TA0CCR1   /* Timer A
                                Capture/Compare 1 */
    550    000000              #define TACCR2              TA0CCR2   /* Timer A
                                Capture/Compare 2 */
    551    000000              #define TAIV_               TA0IV_    /* Timer A
                                Interrupt Vector Word */
    552    000000              #define TACTL_              TA0CTL_   /* Timer A
                                Control */
    553    000000              #define TACCTL0_            TA0CCTL0_ /* Timer A
                                Capture/Compare Control 0 */
    554    000000              #define TACCTL1_            TA0CCTL1_ /* Timer A
                                Capture/Compare Control 1 */
    555    000000              #define TACCTL2_            TA0CCTL2_ /* Timer A
                                Capture/Compare Control 2 */
                                  - 4e-LP430 -                        Page   22

    556    000000              #define TAR_                TA0R_     /* Timer A
                                */
    557    000000              #define TACCR0_             TA0CCR0_  /* Timer A
                                Capture/Compare 0 */
    558    000000              #define TACCR1_             TA0CCR1_  /* Timer A
                                Capture/Compare 1 */
    559    000000              #define TACCR2_             TA0CCR2_  /* Timer A
                                Capture/Compare 2 */
    560    000000              
    561    000000              /* Alternate register names 2 */
    562    000000              #define CCTL0               TACCTL0   /* Timer A
                                Capture/Compare Control 0 */
    563    000000              #define CCTL1               TACCTL1   /* Timer A
                                Capture/Compare Control 1 */
    564    000000              #define CCTL2               TACCTL2   /* Timer A
                                Capture/Compare Control 2 */
    565    000000              #define CCR0                TACCR0    /* Timer A
                                Capture/Compare 0 */
    566    000000              #define CCR1                TACCR1    /* Timer A
                                Capture/Compare 1 */
    567    000000              #define CCR2                TACCR2    /* Timer A
                                Capture/Compare 2 */
    568    000000              #define CCTL0_              TACCTL0_  /* Timer A
                                Capture/Compare Control 0 */
    569    000000              #define CCTL1_              TACCTL1_  /* Timer A
                                Capture/Compare Control 1 */
    570    000000              #define CCTL2_              TACCTL2_  /* Timer A
                                Capture/Compare Control 2 */
    571    000000              #define CCR0_               TACCR0_   /* Timer A
                                Capture/Compare 0 */
    572    000000              #define CCR1_               TACCR1_   /* Timer A
                                Capture/Compare 1 */
    573    000000              #define CCR2_               TACCR2_   /* Timer A
                                Capture/Compare 2 */
    574    000000              
    575    000000              #define TASSEL1             (0x0200u)  /* Timer
                                A clock source select 0 */
    576    000000              #define TASSEL0             (0x0100u)  /* Timer
                                A clock source select 1 */
    577    000000              #define ID1                 (0x0080u)  /* Timer
                                A clock input divider 1 */
    578    000000              #define ID0                 (0x0040u)  /* Timer
                                A clock input divider 0 */
    579    000000              #define MC1                 (0x0020u)  /* Timer
                                A mode control 1 */
    580    000000              #define MC0                 (0x0010u)  /* Timer
                                A mode control 0 */
    581    000000              #define TACLR               (0x0004u)  /* Timer
                                A counter clear */
    582    000000              #define TAIE                (0x0002u)  /* Timer
                                A counter interrupt enable */
    583    000000              #define TAIFG               (0x0001u)  /* Timer
                                A counter interrupt flag */
    584    000000              
    585    000000              #define MC_0                (0*0x10u)  /* Timer
                                A mode control: 0 - Stop */
    586    000000              #define MC_1                (1*0x10u)  /* Timer
                                A mode control: 1 - Up to CCR0 */
    587    000000              #define MC_2                (2*0x10u)  /* Timer
                                A mode control: 2 - Continous up */
    588    000000              #define MC_3                (3*0x10u)  /* Timer
                                A mode control: 3 - Up/Down */
    589    000000              #define ID_0                (0*0x40u)  /* Timer
                                A input divider: 0 - /1 */
    590    000000              #define ID_1                (1*0x40u)  /* Timer
                                A input divider: 1 - /2 */
    591    000000              #define ID_2                (2*0x40u)  /* Timer
                                A input divider: 2 - /4 */
    592    000000              #define ID_3                (3*0x40u)  /* Timer
                                A input divider: 3 - /8 */
    593    000000              #define TASSEL_0            (0*0x100u) /* Timer
                                A clock source select: 0 - TACLK */
    594    000000              #define TASSEL_1            (1*0x100u) /* Timer
                                A clock source select: 1 - ACLK  */
    595    000000              #define TASSEL_2            (2*0x100u) /* Timer
                                A clock source select: 2 - SMCLK */
    596    000000              #define TASSEL_3            (3*0x100u) /* Timer
                                A clock source select: 3 - INCLK */
                                  - 4e-LP430 -                        Page   23

    597    000000              
    598    000000              #define CM1                 (0x8000u)  /*
                                Capture mode 1 */
    599    000000              #define CM0                 (0x4000u)  /*
                                Capture mode 0 */
    600    000000              #define CCIS1               (0x2000u)  /*
                                Capture input select 1 */
    601    000000              #define CCIS0               (0x1000u)  /*
                                Capture input select 0 */
    602    000000              #define SCS                 (0x0800u)  /*
                                Capture sychronize */
    603    000000              #define SCCI                (0x0400u)  /*
                                Latched capture signal (read) */
    604    000000              #define CAP                 (0x0100u)  /*
                                Capture mode: 1 /Compare mode : 0 */
    605    000000              #define OUTMOD2             (0x0080u)  /* Output
                                mode 2 */
    606    000000              #define OUTMOD1             (0x0040u)  /* Output
                                mode 1 */
    607    000000              #define OUTMOD0             (0x0020u)  /* Output
                                mode 0 */
    608    000000              #define CCIE                (0x0010u)  /*
                                Capture/compare interrupt enable */
    609    000000              #define CCI                 (0x0008u)  /*
                                Capture input signal (read) */
    610    000000              #define OUT                 (0x0004u)  /* PWM
                                Output signal if output mode 0 */
    611    000000              #define COV                 (0x0002u)  /*
                                Capture/compare overflow flag */
    612    000000              #define CCIFG               (0x0001u)  /*
                                Capture/compare interrupt flag */
    613    000000              
    614    000000              #define OUTMOD_0            (0*0x20u)  /* PWM
                                output mode: 0 - output only */
    615    000000              #define OUTMOD_1            (1*0x20u)  /* PWM
                                output mode: 1 - set */
    616    000000              #define OUTMOD_2            (2*0x20u)  /* PWM
                                output mode: 2 - PWM toggle/reset */
    617    000000              #define OUTMOD_3            (3*0x20u)  /* PWM
                                output mode: 3 - PWM set/reset */
    618    000000              #define OUTMOD_4            (4*0x20u)  /* PWM
                                output mode: 4 - toggle */
    619    000000              #define OUTMOD_5            (5*0x20u)  /* PWM
                                output mode: 5 - Reset */
    620    000000              #define OUTMOD_6            (6*0x20u)  /* PWM
                                output mode: 6 - PWM toggle/set */
    621    000000              #define OUTMOD_7            (7*0x20u)  /* PWM
                                output mode: 7 - PWM reset/set */
    622    000000              #define CCIS_0              (0*0x1000u) /*
                                Capture input select: 0 - CCIxA */
    623    000000              #define CCIS_1              (1*0x1000u) /*
                                Capture input select: 1 - CCIxB */
    624    000000              #define CCIS_2              (2*0x1000u) /*
                                Capture input select: 2 - GND */
    625    000000              #define CCIS_3              (3*0x1000u) /*
                                Capture input select: 3 - Vcc */
    626    000000              #define CM_0                (0*0x4000u) /*
                                Capture mode: 0 - disabled */
    627    000000              #define CM_1                (1*0x4000u) /*
                                Capture mode: 1 - pos. edge */
    628    000000              #define CM_2                (2*0x4000u) /*
                                Capture mode: 1 - neg. edge */
    629    000000              #define CM_3                (3*0x4000u) /*
                                Capture mode: 1 - both edges */
    630    000000              
    631    000000              /* T0_A3IV Definitions */
    632    000000              #define TA0IV_NONE          (0x0000u)    /* No
                                Interrupt pending */
    633    000000              #define TA0IV_TACCR1        (0x0002u)    /*
                                TA0CCR1_CCIFG */
    634    000000              #define TA0IV_TACCR2        (0x0004u)    /*
                                TA0CCR2_CCIFG */
    635    000000              #define TA0IV_6             (0x0006u)    /*
                                Reserved */
    636    000000              #define TA0IV_8             (0x0008u)    /*
                                Reserved */
    637    000000              #define TA0IV_TAIFG         (0x000Au)    /*
                                TA0IFG */
                                  - 4e-LP430 -                        Page   24

    638    000000              
    639    000000              /***********************************************
                               *************
    640    000000              * Timer1_A3
    641    000000              ************************************************
                               ************/
    642    000000              #define __MSP430_HAS_T1A3__           /*
                                Definition to show that Module is available
                                */
    643    000000              
    644    000000              #define TA1IV_              (0x011Eu)  /*
                                Timer1_A3 Interrupt Vector Word */
    645    000000              READ_ONLY DEFW( TA1IV          , TA1IV_)
    646    000000              #define TA1CTL_             (0x0180u)  /*
                                Timer1_A3 Control */
    647    000000              DEFW(   TA1CTL            , TA1CTL_)
    648    000000              #define TA1CCTL0_           (0x0182u)  /*
                                Timer1_A3 Capture/Compare Control 0 */
    649    000000              DEFW(   TA1CCTL0          , TA1CCTL0_)
    650    000000              #define TA1CCTL1_           (0x0184u)  /*
                                Timer1_A3 Capture/Compare Control 1 */
    651    000000              DEFW(   TA1CCTL1          , TA1CCTL1_)
    652    000000              #define TA1CCTL2_           (0x0186u)  /*
                                Timer1_A3 Capture/Compare Control 2 */
    653    000000              DEFW(   TA1CCTL2          , TA1CCTL2_)
    654    000000              #define TA1R_               (0x0190u)  /*
                                Timer1_A3 */
    655    000000              DEFW(   TA1R              , TA1R_)
    656    000000              #define TA1CCR0_            (0x0192u)  /*
                                Timer1_A3 Capture/Compare 0 */
    657    000000              DEFW(   TA1CCR0           , TA1CCR0_)
    658    000000              #define TA1CCR1_            (0x0194u)  /*
                                Timer1_A3 Capture/Compare 1 */
    659    000000              DEFW(   TA1CCR1           , TA1CCR1_)
    660    000000              #define TA1CCR2_            (0x0196u)  /*
                                Timer1_A3 Capture/Compare 2 */
    661    000000              DEFW(   TA1CCR2           , TA1CCR2_)
    662    000000              
    663    000000              /* Bits are already defined within the Timer0_Ax
                                */
    664    000000              
    665    000000              /* T1_A3IV Definitions */
    666    000000              #define TA1IV_NONE          (0x0000u)    /* No
                                Interrupt pending */
    667    000000              #define TA1IV_TACCR1        (0x0002u)    /*
                                TA1CCR1_CCIFG */
    668    000000              #define TA1IV_TACCR2        (0x0004u)    /*
                                TA1CCR2_CCIFG */
    669    000000              #define TA1IV_TAIFG         (0x000Au)    /*
                                TA1IFG */
    670    000000              
    671    000000              /***********************************************
                               *************
    672    000000              * USCI
    673    000000              ************************************************
                               ************/
    674    000000              #define __MSP430_HAS_USCI__           /*
                                Definition to show that Module is available
                                */
    675    000000              
    676    000000              #define UCA0CTL0_           (0x0060u)  /* USCI
                                A0 Control Register 0 */
    677    000000              DEFC(   UCA0CTL0          , UCA0CTL0_)
    678    000000              #define UCA0CTL1_           (0x0061u)  /* USCI
                                A0 Control Register 1 */
    679    000000              DEFC(   UCA0CTL1          , UCA0CTL1_)
    680    000000              #define UCA0BR0_            (0x0062u)  /* USCI
                                A0 Baud Rate 0 */
    681    000000              DEFC(   UCA0BR0           , UCA0BR0_)
    682    000000              #define UCA0BR1_            (0x0063u)  /* USCI
                                A0 Baud Rate 1 */
    683    000000              DEFC(   UCA0BR1           , UCA0BR1_)
    684    000000              #define UCA0MCTL_           (0x0064u)  /* USCI
                                A0 Modulation Control */
    685    000000              DEFC(   UCA0MCTL          , UCA0MCTL_)
    686    000000              #define UCA0STAT_           (0x0065u)  /* USCI
                                A0 Status Register */
    687    000000              DEFC(   UCA0STAT          , UCA0STAT_)
                                  - 4e-LP430 -                        Page   25

    688    000000              #define UCA0RXBUF_          (0x0066u)  /* USCI
                                A0 Receive Buffer */
    689    000000              READ_ONLY DEFC( UCA0RXBUF      , UCA0RXBUF_)
    690    000000              #define UCA0TXBUF_          (0x0067u)  /* USCI
                                A0 Transmit Buffer */
    691    000000              DEFC(   UCA0TXBUF         , UCA0TXBUF_)
    692    000000              #define UCA0ABCTL_          (0x005Du)  /* USCI
                                A0 LIN Control */
    693    000000              DEFC(   UCA0ABCTL         , UCA0ABCTL_)
    694    000000              #define UCA0IRTCTL_         (0x005Eu)  /* USCI
                                A0 IrDA Transmit Control */
    695    000000              DEFC(   UCA0IRTCTL        , UCA0IRTCTL_)
    696    000000              #define UCA0IRRCTL_         (0x005Fu)  /* USCI
                                A0 IrDA Receive Control */
    697    000000              DEFC(   UCA0IRRCTL        , UCA0IRRCTL_)
    698    000000              
    699    000000              
    700    000000              
    701    000000              #define UCB0CTL0_           (0x0068u)  /* USCI
                                B0 Control Register 0 */
    702    000000              DEFC(   UCB0CTL0          , UCB0CTL0_)
    703    000000              #define UCB0CTL1_           (0x0069u)  /* USCI
                                B0 Control Register 1 */
    704    000000              DEFC(   UCB0CTL1          , UCB0CTL1_)
    705    000000              #define UCB0BR0_            (0x006Au)  /* USCI
                                B0 Baud Rate 0 */
    706    000000              DEFC(   UCB0BR0           , UCB0BR0_)
    707    000000              #define UCB0BR1_            (0x006Bu)  /* USCI
                                B0 Baud Rate 1 */
    708    000000              DEFC(   UCB0BR1           , UCB0BR1_)
    709    000000              #define UCB0I2CIE_          (0x006Cu)  /* USCI
                                B0 I2C Interrupt Enable Register */
    710    000000              DEFC(   UCB0I2CIE         , UCB0I2CIE_)
    711    000000              #define UCB0STAT_           (0x006Du)  /* USCI
                                B0 Status Register */
    712    000000              DEFC(   UCB0STAT          , UCB0STAT_)
    713    000000              #define UCB0RXBUF_          (0x006Eu)  /* USCI
                                B0 Receive Buffer */
    714    000000              READ_ONLY DEFC( UCB0RXBUF      , UCB0RXBUF_)
    715    000000              #define UCB0TXBUF_          (0x006Fu)  /* USCI
                                B0 Transmit Buffer */
    716    000000              DEFC(   UCB0TXBUF         , UCB0TXBUF_)
    717    000000              #define UCB0I2COA_          (0x0118u)  /* USCI
                                B0 I2C Own Address */
    718    000000              DEFW(   UCB0I2COA         , UCB0I2COA_)
    719    000000              #define UCB0I2CSA_          (0x011Au)  /* USCI
                                B0 I2C Slave Address */
    720    000000              DEFW(   UCB0I2CSA         , UCB0I2CSA_)
    721    000000              
    722    000000              // UART-Mode Bits
    723    000000              #define UCPEN               (0x80)    /* Async.
                                Mode: Parity enable */
    724    000000              #define UCPAR               (0x40)    /* Async.
                                Mode: Parity     0:odd / 1:even */
    725    000000              #define UCMSB               (0x20)    /* Async.
                                Mode: MSB first  0:LSB / 1:MSB */
    726    000000              #define UC7BIT              (0x10)    /* Async.
                                Mode: Data Bits  0:8-bits / 1:7-bits */
    727    000000              #define UCSPB               (0x08)    /* Async.
                                Mode: Stop Bits  0:one / 1: two */
    728    000000              #define UCMODE1             (0x04)    /* Async.
                                Mode: USCI Mode 1 */
    729    000000              #define UCMODE0             (0x02)    /* Async.
                                Mode: USCI Mode 0 */
    730    000000              #define UCSYNC              (0x01)    /*
                                Sync-Mode  0:UART-Mode / 1:SPI-Mode */
    731    000000              
    732    000000              // SPI-Mode Bits
    733    000000              #define UCCKPH              (0x80)    /* Sync.
                                Mode: Clock Phase */
    734    000000              #define UCCKPL              (0x40)    /* Sync.
                                Mode: Clock Polarity */
    735    000000              #define UCMST               (0x08)    /* Sync.
                                Mode: Master Select */
    736    000000              
    737    000000              // I2C-Mode Bits
    738    000000              #define UCA10               (0x80)    /* 10-bit
                                Address Mode */
                                  - 4e-LP430 -                        Page   26

    739    000000              #define UCSLA10             (0x40)    /* 10-bit
                                Slave Address Mode */
    740    000000              #define UCMM                (0x20)    /*
                                Multi-Master Environment */
    741    000000              //#define res               (0x10)    /*
                                reserved */
    742    000000              #define UCMODE_0            (0x00)    /* Sync.
                                Mode: USCI Mode: 0 */
    743    000000              #define UCMODE_1            (0x02)    /* Sync.
                                Mode: USCI Mode: 1 */
    744    000000              #define UCMODE_2            (0x04)    /* Sync.
                                Mode: USCI Mode: 2 */
    745    000000              #define UCMODE_3            (0x06)    /* Sync.
                                Mode: USCI Mode: 3 */
    746    000000              
    747    000000              // UART-Mode Bits
    748    000000              #define UCSSEL1             (0x80)    /* USCI 0
                                Clock Source Select 1 */
    749    000000              #define UCSSEL0             (0x40)    /* USCI 0
                                Clock Source Select 0 */
    750    000000              #define UCRXEIE             (0x20)    /* RX
                                Error interrupt enable */
    751    000000              #define UCBRKIE             (0x10)    /* Break
                                interrupt enable */
    752    000000              #define UCDORM              (0x08)    /* Dormant
                                (Sleep) Mode */
    753    000000              #define UCTXADDR            (0x04)    /* Send
                                next Data as Address */
    754    000000              #define UCTXBRK             (0x02)    /* Send
                                next Data as Break */
    755    000000              #define UCSWRST             (0x01)    /* USCI
                                Software Reset */
    756    000000              
    757    000000              // SPI-Mode Bits
    758    000000              //#define res               (0x20)    /*
                                reserved */
    759    000000              //#define res               (0x10)    /*
                                reserved */
    760    000000              //#define res               (0x08)    /*
                                reserved */
    761    000000              //#define res               (0x04)    /*
                                reserved */
    762    000000              //#define res               (0x02)    /*
                                reserved */
    763    000000              
    764    000000              // I2C-Mode Bits
    765    000000              //#define res               (0x20)    /*
                                reserved */
    766    000000              #define UCTR                (0x10)    /*
                                Transmit/Receive Select/Flag */
    767    000000              #define UCTXNACK            (0x08)    /*
                                Transmit NACK */
    768    000000              #define UCTXSTP             (0x04)    /*
                                Transmit STOP */
    769    000000              #define UCTXSTT             (0x02)    /*
                                Transmit START */
    770    000000              #define UCSSEL_0            (0x00)    /* USCI 0
                                Clock Source: 0 */
    771    000000              #define UCSSEL_1            (0x40)    /* USCI 0
                                Clock Source: 1 */
    772    000000              #define UCSSEL_2            (0x80)    /* USCI 0
                                Clock Source: 2 */
    773    000000              #define UCSSEL_3            (0xC0)    /* USCI 0
                                Clock Source: 3 */
    774    000000              
    775    000000              #define UCBRF3              (0x80)    /* USCI
                                First Stage Modulation Select 3 */
    776    000000              #define UCBRF2              (0x40)    /* USCI
                                First Stage Modulation Select 2 */
    777    000000              #define UCBRF1              (0x20)    /* USCI
                                First Stage Modulation Select 1 */
    778    000000              #define UCBRF0              (0x10)    /* USCI
                                First Stage Modulation Select 0 */
    779    000000              #define UCBRS2              (0x08)    /* USCI
                                Second Stage Modulation Select 2 */
    780    000000              #define UCBRS1              (0x04)    /* USCI
                                Second Stage Modulation Select 1 */
    781    000000              #define UCBRS0              (0x02)    /* USCI
                                  - 4e-LP430 -                        Page   27

                                Second Stage Modulation Select 0 */
    782    000000              #define UCOS16              (0x01)    /* USCI
                                16-times Oversampling enable */
    783    000000              
    784    000000              #define UCBRF_0             (0x00)    /* USCI
                                First Stage Modulation: 0 */
    785    000000              #define UCBRF_1             (0x10)    /* USCI
                                First Stage Modulation: 1 */
    786    000000              #define UCBRF_2             (0x20)    /* USCI
                                First Stage Modulation: 2 */
    787    000000              #define UCBRF_3             (0x30)    /* USCI
                                First Stage Modulation: 3 */
    788    000000              #define UCBRF_4             (0x40)    /* USCI
                                First Stage Modulation: 4 */
    789    000000              #define UCBRF_5             (0x50)    /* USCI
                                First Stage Modulation: 5 */
    790    000000              #define UCBRF_6             (0x60)    /* USCI
                                First Stage Modulation: 6 */
    791    000000              #define UCBRF_7             (0x70)    /* USCI
                                First Stage Modulation: 7 */
    792    000000              #define UCBRF_8             (0x80)    /* USCI
                                First Stage Modulation: 8 */
    793    000000              #define UCBRF_9             (0x90)    /* USCI
                                First Stage Modulation: 9 */
    794    000000              #define UCBRF_10            (0xA0)    /* USCI
                                First Stage Modulation: A */
    795    000000              #define UCBRF_11            (0xB0)    /* USCI
                                First Stage Modulation: B */
    796    000000              #define UCBRF_12            (0xC0)    /* USCI
                                First Stage Modulation: C */
    797    000000              #define UCBRF_13            (0xD0)    /* USCI
                                First Stage Modulation: D */
    798    000000              #define UCBRF_14            (0xE0)    /* USCI
                                First Stage Modulation: E */
    799    000000              #define UCBRF_15            (0xF0)    /* USCI
                                First Stage Modulation: F */
    800    000000              
    801    000000              #define UCBRS_0             (0x00)    /* USCI
                                Second Stage Modulation: 0 */
    802    000000              #define UCBRS_1             (0x02)    /* USCI
                                Second Stage Modulation: 1 */
    803    000000              #define UCBRS_2             (0x04)    /* USCI
                                Second Stage Modulation: 2 */
    804    000000              #define UCBRS_3             (0x06)    /* USCI
                                Second Stage Modulation: 3 */
    805    000000              #define UCBRS_4             (0x08)    /* USCI
                                Second Stage Modulation: 4 */
    806    000000              #define UCBRS_5             (0x0A)    /* USCI
                                Second Stage Modulation: 5 */
    807    000000              #define UCBRS_6             (0x0C)    /* USCI
                                Second Stage Modulation: 6 */
    808    000000              #define UCBRS_7             (0x0E)    /* USCI
                                Second Stage Modulation: 7 */
    809    000000              
    810    000000              #define UCLISTEN            (0x80)    /* USCI
                                Listen mode */
    811    000000              #define UCFE                (0x40)    /* USCI
                                Frame Error Flag */
    812    000000              #define UCOE                (0x20)    /* USCI
                                Overrun Error Flag */
    813    000000              #define UCPE                (0x10)    /* USCI
                                Parity Error Flag */
    814    000000              #define UCBRK               (0x08)    /* USCI
                                Break received */
    815    000000              #define UCRXERR             (0x04)    /* USCI RX
                                Error Flag */
    816    000000              #define UCADDR              (0x02)    /* USCI
                                Address received Flag */
    817    000000              #define UCBUSY              (0x01)    /* USCI
                                Busy Flag */
    818    000000              #define UCIDLE              (0x02)    /* USCI
                                Idle line detected Flag */
    819    000000              
    820    000000              //#define res               (0x80)    /*
                                reserved */
    821    000000              //#define res               (0x40)    /*
                                reserved */
    822    000000              //#define res               (0x20)    /*
                                  - 4e-LP430 -                        Page   28

                                reserved */
    823    000000              //#define res               (0x10)    /*
                                reserved */
    824    000000              #define UCNACKIE            (0x08)    /* NACK
                                Condition interrupt enable */
    825    000000              #define UCSTPIE             (0x04)    /* STOP
                                Condition interrupt enable */
    826    000000              #define UCSTTIE             (0x02)    /* START
                                Condition interrupt enable */
    827    000000              #define UCALIE              (0x01)    /*
                                Arbitration Lost interrupt enable */
    828    000000              
    829    000000              #define UCSCLLOW            (0x40)    /* SCL low
                                */
    830    000000              #define UCGC                (0x20)    /* General
                                Call address received Flag */
    831    000000              #define UCBBUSY             (0x10)    /* Bus
                                Busy Flag */
    832    000000              #define UCNACKIFG           (0x08)    /* NAK
                                Condition interrupt Flag */
    833    000000              #define UCSTPIFG            (0x04)    /* STOP
                                Condition interrupt Flag */
    834    000000              #define UCSTTIFG            (0x02)    /* START
                                Condition interrupt Flag */
    835    000000              #define UCALIFG             (0x01)    /*
                                Arbitration Lost interrupt Flag */
    836    000000              
    837    000000              #define UCIRTXPL5           (0x80)    /* IRDA
                                Transmit Pulse Length 5 */
    838    000000              #define UCIRTXPL4           (0x40)    /* IRDA
                                Transmit Pulse Length 4 */
    839    000000              #define UCIRTXPL3           (0x20)    /* IRDA
                                Transmit Pulse Length 3 */
    840    000000              #define UCIRTXPL2           (0x10)    /* IRDA
                                Transmit Pulse Length 2 */
    841    000000              #define UCIRTXPL1           (0x08)    /* IRDA
                                Transmit Pulse Length 1 */
    842    000000              #define UCIRTXPL0           (0x04)    /* IRDA
                                Transmit Pulse Length 0 */
    843    000000              #define UCIRTXCLK           (0x02)    /* IRDA
                                Transmit Pulse Clock Select */
    844    000000              #define UCIREN              (0x01)    /* IRDA
                                Encoder/Decoder enable */
    845    000000              
    846    000000              #define UCIRRXFL5           (0x80)    /* IRDA
                                Receive Filter Length 5 */
    847    000000              #define UCIRRXFL4           (0x40)    /* IRDA
                                Receive Filter Length 4 */
    848    000000              #define UCIRRXFL3           (0x20)    /* IRDA
                                Receive Filter Length 3 */
    849    000000              #define UCIRRXFL2           (0x10)    /* IRDA
                                Receive Filter Length 2 */
    850    000000              #define UCIRRXFL1           (0x08)    /* IRDA
                                Receive Filter Length 1 */
    851    000000              #define UCIRRXFL0           (0x04)    /* IRDA
                                Receive Filter Length 0 */
    852    000000              #define UCIRRXPL            (0x02)    /* IRDA
                                Receive Input Polarity */
    853    000000              #define UCIRRXFE            (0x01)    /* IRDA
                                Receive Filter enable */
    854    000000              
    855    000000              //#define res               (0x80)    /*
                                reserved */
    856    000000              //#define res               (0x40)    /*
                                reserved */
    857    000000              #define UCDELIM1            (0x20)    /* Break
                                Sync Delimiter 1 */
    858    000000              #define UCDELIM0            (0x10)    /* Break
                                Sync Delimiter 0 */
    859    000000              #define UCSTOE              (0x08)    /*
                                Sync-Field Timeout error */
    860    000000              #define UCBTOE              (0x04)    /* Break
                                Timeout error */
    861    000000              //#define res               (0x02)    /*
                                reserved */
    862    000000              #define UCABDEN             (0x01)    /* Auto
                                Baud Rate detect enable */
    863    000000              
                                  - 4e-LP430 -                        Page   29

    864    000000              #define UCGCEN              (0x8000u)  /* I2C
                                General Call enable */
    865    000000              #define UCOA9               (0x0200u)  /* I2C
                                Own Address 9 */
    866    000000              #define UCOA8               (0x0100u)  /* I2C
                                Own Address 8 */
    867    000000              #define UCOA7               (0x0080u)  /* I2C
                                Own Address 7 */
    868    000000              #define UCOA6               (0x0040u)  /* I2C
                                Own Address 6 */
    869    000000              #define UCOA5               (0x0020u)  /* I2C
                                Own Address 5 */
    870    000000              #define UCOA4               (0x0010u)  /* I2C
                                Own Address 4 */
    871    000000              #define UCOA3               (0x0008u)  /* I2C
                                Own Address 3 */
    872    000000              #define UCOA2               (0x0004u)  /* I2C
                                Own Address 2 */
    873    000000              #define UCOA1               (0x0002u)  /* I2C
                                Own Address 1 */
    874    000000              #define UCOA0               (0x0001u)  /* I2C
                                Own Address 0 */
    875    000000              
    876    000000              #define UCSA9               (0x0200u)  /* I2C
                                Slave Address 9 */
    877    000000              #define UCSA8               (0x0100u)  /* I2C
                                Slave Address 8 */
    878    000000              #define UCSA7               (0x0080u)  /* I2C
                                Slave Address 7 */
    879    000000              #define UCSA6               (0x0040u)  /* I2C
                                Slave Address 6 */
    880    000000              #define UCSA5               (0x0020u)  /* I2C
                                Slave Address 5 */
    881    000000              #define UCSA4               (0x0010u)  /* I2C
                                Slave Address 4 */
    882    000000              #define UCSA3               (0x0008u)  /* I2C
                                Slave Address 3 */
    883    000000              #define UCSA2               (0x0004u)  /* I2C
                                Slave Address 2 */
    884    000000              #define UCSA1               (0x0002u)  /* I2C
                                Slave Address 1 */
    885    000000              #define UCSA0               (0x0001u)  /* I2C
                                Slave Address 0 */
    886    000000              
    887    000000              /***********************************************
                               *************
    888    000000              * WATCHDOG TIMER
    889    000000              ************************************************
                               ************/
    890    000000              #define __MSP430_HAS_WDT__            /*
                                Definition to show that Module is available
                                */
    891    000000              
    892    000000              #define WDTCTL_             (0x0120u)  /*
                                Watchdog Timer Control */
    893    000000              DEFW(   WDTCTL            , WDTCTL_)
    894    000000              /* The bit names have been prefixed with "WDT"
                                */
    895    000000              #define WDTIS0              (0x0001u)
    896    000000              #define WDTIS1              (0x0002u)
    897    000000              #define WDTSSEL             (0x0004u)
    898    000000              #define WDTCNTCL            (0x0008u)
    899    000000              #define WDTTMSEL            (0x0010u)
    900    000000              #define WDTNMI              (0x0020u)
    901    000000              #define WDTNMIES            (0x0040u)
    902    000000              #define WDTHOLD             (0x0080u)
    903    000000              
    904    000000              #define WDTPW               (0x5A00u)
    905    000000              
    906    000000              /* WDT-interval times [1ms] coded with Bits 0-2
                                */
    907    000000              /* WDT is clocked by fSMCLK (assumed 1MHz)
                                */
    908    000000              #define WDT_MDLY_32         (WDTPW+WDTTMSEL+WDTC
                               NTCL)                         /* 32ms interval
                                (default) */
    909    000000              #define WDT_MDLY_8          (WDTPW+WDTTMSEL+WDTC
                               NTCL+WDTIS0)                  /* 8ms     "
                                  - 4e-LP430 -                        Page   30

                                */
    910    000000              #define WDT_MDLY_0_5        (WDTPW+WDTTMSEL+WDTC
                               NTCL+WDTIS1)                  /* 0.5ms   "
                                */
    911    000000              #define WDT_MDLY_0_064      (WDTPW+WDTTMSEL+WDTC
                               NTCL+WDTIS1+WDTIS0)           /* 0.064ms "
                                */
    912    000000              /* WDT is clocked by fACLK (assumed 32KHz)
                                */
    913    000000              #define WDT_ADLY_1000       (WDTPW+WDTTMSEL+WDTC
                               NTCL+WDTSSEL)                 /* 1000ms  "
                                */
    914    000000              #define WDT_ADLY_250        (WDTPW+WDTTMSEL+WDTC
                               NTCL+WDTSSEL+WDTIS0)          /* 250ms   "
                                */
    915    000000              #define WDT_ADLY_16         (WDTPW+WDTTMSEL+WDTC
                               NTCL+WDTSSEL+WDTIS1)          /* 16ms    "
                                */
    916    000000              #define WDT_ADLY_1_9        (WDTPW+WDTTMSEL+WDTC
                               NTCL+WDTSSEL+WDTIS1+WDTIS0)   /* 1.9ms   "
                                */
    917    000000              /* Watchdog mode -> reset after expired time
                                */
    918    000000              /* WDT is clocked by fSMCLK (assumed 1MHz)
                                */
    919    000000              #define WDT_MRST_32         (WDTPW+WDTCNTCL)    
                                                             /* 32ms interval
                                (default) */
    920    000000              #define WDT_MRST_8          (WDTPW+WDTCNTCL+WDTI
                               S0)                           /* 8ms     "
                                */
    921    000000              #define WDT_MRST_0_5        (WDTPW+WDTCNTCL+WDTI
                               S1)                           /* 0.5ms   "
                                */
    922    000000              #define WDT_MRST_0_064      (WDTPW+WDTCNTCL+WDTI
                               S1+WDTIS0)                    /* 0.064ms "
                                */
    923    000000              /* WDT is clocked by fACLK (assumed 32KHz)
                                */
    924    000000              #define WDT_ARST_1000       (WDTPW+WDTCNTCL+WDTS
                               SEL)                          /* 1000ms  "
                                */
    925    000000              #define WDT_ARST_250        (WDTPW+WDTCNTCL+WDTS
                               SEL+WDTIS0)                   /* 250ms   "
                                */
    926    000000              #define WDT_ARST_16         (WDTPW+WDTCNTCL+WDTS
                               SEL+WDTIS1)                   /* 16ms    "
                                */
    927    000000              #define WDT_ARST_1_9        (WDTPW+WDTCNTCL+WDTS
                               SEL+WDTIS1+WDTIS0)            /* 1.9ms   "
                                */
    928    000000              
    929    000000              /* INTERRUPT CONTROL */
    930    000000              /* These two bits are defined in the Special
                                Function Registers */
    931    000000              /* #define WDTIE               0x01 */
    932    000000              /* #define WDTIFG              0x01 */
    933    000000              
    934    000000              /***********************************************
                               *************
    935    000000              * Calibration Data in Info Mem
    936    000000              ************************************************
                               ************/
    937    000000              
    938    000000              #ifndef __DisableCalData
    939    000000              
    940    000000              #define CALDCO_16MHZ_         (0x10F8u)  /*
                                DCOCTL  Calibration Data for 16MHz */
    941    000000              READ_ONLY DEFC( CALDCO_16MHZ     , CALDCO_16MHZ_
                               )
    942    000000              #define CALBC1_16MHZ_         (0x10F9u)  /*
                                BCSCTL1 Calibration Data for 16MHz */
    943    000000              READ_ONLY DEFC( CALBC1_16MHZ     , CALBC1_16MHZ_
                               )
    944    000000              #define CALDCO_12MHZ_         (0x10FAu)  /*
                                DCOCTL  Calibration Data for 12MHz */
    945    000000              READ_ONLY DEFC( CALDCO_12MHZ     , CALDCO_12MHZ_
                               )
                                  - 4e-LP430 -                        Page   31

    946    000000              #define CALBC1_12MHZ_         (0x10FBu)  /*
                                BCSCTL1 Calibration Data for 12MHz */
    947    000000              READ_ONLY DEFC( CALBC1_12MHZ     , CALBC1_12MHZ_
                               )
    948    000000              #define CALDCO_8MHZ_          (0x10FCu)  /*
                                DCOCTL  Calibration Data for 8MHz */
    949    000000              READ_ONLY DEFC( CALDCO_8MHZ      , CALDCO_8MHZ_)
    950    000000              #define CALBC1_8MHZ_          (0x10FDu)  /*
                                BCSCTL1 Calibration Data for 8MHz */
    951    000000              READ_ONLY DEFC( CALBC1_8MHZ      , CALBC1_8MHZ_)
    952    000000              #define CALDCO_1MHZ_          (0x10FEu)  /*
                                DCOCTL  Calibration Data for 1MHz */
    953    000000              READ_ONLY DEFC( CALDCO_1MHZ      , CALDCO_1MHZ_)
    954    000000              #define CALBC1_1MHZ_          (0x10FFu)  /*
                                BCSCTL1 Calibration Data for 1MHz */
    955    000000              READ_ONLY DEFC( CALBC1_1MHZ      , CALBC1_1MHZ_)
    956    000000              
    957    000000              #endif /* #ifndef __DisableCalData */
    958    000000              
    959    000000              /***********************************************
                               *************
    960    000000              * Interrupt Vectors (offset from 0xFFE0)
    961    000000              ************************************************
                               ************/
    962    000000              
    963    000000              #define PORT1_VECTOR        (2 * 2u)  /* 0xFFE4
                                Port 1 */
    964    000000              #define PORT2_VECTOR        (3 * 2u)  /* 0xFFE6
                                Port 2 */
    965    000000              #define ADC10_VECTOR        (5 * 2u)  /* 0xFFEA
                                ADC10 */
    966    000000              #define USCIAB0TX_VECTOR    (6 * 2u)  /* 0xFFEC
                                USCI A0/B0 Transmit */
    967    000000              #define USCIAB0RX_VECTOR    (7 * 2u)  /* 0xFFEE
                                USCI A0/B0 Receive */
    968    000000              #define TIMER0_A1_VECTOR    (8 * 2u)  /* 0xFFF0
                                Timer0)A CC1, TA0 */
    969    000000              #define TIMER0_A0_VECTOR    (9 * 2u)  /* 0xFFF2
                                Timer0_A CC0 */
    970    000000              #define WDT_VECTOR          (10 * 2u) /* 0xFFF4
                                Watchdog Timer */
    971    000000              #define COMPARATORA_VECTOR  (11 * 2u) /* 0xFFF6
                                Comparator A */
    972    000000              #define TIMER1_A1_VECTOR    (12 * 2u) /* 0xFFF8
                                Timer1_A CC1-4, TA1 */
    973    000000              #define TIMER1_A0_VECTOR    (13 * 2u) /* 0xFFFA
                                Timer1_A CC0 */
    974    000000              #define NMI_VECTOR          (14 * 2u) /* 0xFFFC
                                Non-maskable */
    975    000000              #define RESET_VECTOR        (15 * 2u) /* 0xFFFE
                                Reset [Highest Priority] */
    976    000000              
    977    000000              /***********************************************
                               *************
    978    000000              * End of Modules
    979    000000              ************************************************
                               ************/
    980    000000              #pragma language=default
    981    000000              
    982    000000              #endif /* #ifndef __MSP430G2553 */
    983    000000              
    986    000000              
    987    000000              #elif defined (__MSP430G2203__)
    988    000000              #include "msp430g2203.h"
    990    000000              #elif defined (__MSP430G2303__)
    991    000000              #include "msp430g2303.h"
    993    000000              #elif defined (__MSP430G2403__)
    994    000000              #include "msp430g2403.h"
    996    000000              #elif defined (__MSP430G2233__)
    997    000000              #include "msp430g2233.h"
    999    000000              #elif defined (__MSP430G2333__)
   1000    000000              #include "msp430g2333.h"
   1002    000000              #elif defined (__MSP430G2433__)
   1003    000000              #include "msp430g2433.h"
   1005    000000              #elif defined (__MSP430G2533__)
   1006    000000              #include "msp430g2533.h"
   1008    000000              #elif defined (__MSP430BT5190__)
   1009    000000              #include "msp430bt5190.h"
                                  - 4e-LP430 -                        Page   32

   1014    000000              #elif defined (__MSP430GENERIC__)
   1015    000000              #error "msp430 generic device does not have a
                                default include file"
   1017    000000              #elif defined (__MSP430XGENERIC__)
   1018    000000              #error "msp430X generic device does not have a
                                default include file"
   1024    000000              #else
   1025    000000              #error "Failed to match a default include
                                file"
   1026    000000              #endif
   1027    000000              
   1028    000000              #endif /* #ifndef __msp430 */
   1029    000000              
     31    000000              #include "4e-CF430G2553forth.h"         ; header
                                macros and register defs
      1    000000              ; ----------------------------------------------
                               ------------------------
      2    000000              ; 4e4th is a Forth based on CamelForth
                                
      3    000000              ; for the Texas Instruments MSP430 
      4    000000              ; 
      5    000000              ; This program is free software; you can
                                redistribute it and/or modify
      6    000000              ; it under the terms of the GNU General Public
                                License as published by
      7    000000              ; the Free Software Foundation; either version 3
                                of the License, or
      8    000000              ; (at your option) any later version.
      9    000000              ; 
     10    000000              ; This program is distributed in the hope that
                                it will be useful,
     11    000000              ; but WITHOUT ANY WARRANTY; without even the
                                implied warranty of
     12    000000              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
                                PURPOSE.  See the
     13    000000              ; GNU General Public License for more details.
     14    000000              ;
     15    000000              ; You should have received a copy of the GNU
                                General Public License
     16    000000              ; along with this program.  If not, see
                                <http://www.gnu.org/licenses/>.
     17    000000              ; 
     18    000000              ; See LICENSE TERMS in Brads file readme.txt as
                                well.
     19    000000              
     20    000000              ; ----------------------------------------------
                               ------------------------
     21    000000              ; 4e-CF430G2553forth.h: - Register, Model, Macro
                                declarations - MSP430G2553
     22    000000              ; ----------------------------------------------
                               ------------------------
     23    000000              
     24    000000              // ; FORTH MEMORY USAGE
     25    000000              // ; for Flash memory operations - this includes
                                information and main
     26    000000              // ; ROM, but not the main ROM used by the
                                kernel (above E000h)
     27    000000              #define INFOSTART   (0x1000) // ok mk
     28    000000              #define INFOEND     (0x10FF) // ok mk
     29    000000              #define RAMSTART    (0x0200) // ok mk
     30    000000              #define RAMEND      (0x0400) // ok mk
     31    000000              #define USERFLASHSTART  (0xC000) // ok mk
                                
     32    000000              #define USERFLASHEND    (0xD7FF) // muss
                                übereinstimmen mit -P CODE linker 
     33    000000              #define ISRSTART    (0xFE00) 
     34    000000              #define ISREND      (0xFFDF)
     35    000000              #define MAINSEG     (512) // wozu ?? mk
     36    000000              #define INFOSEG     (128) // ?? mk
     37    000000              
     38    000000              // ; FORTH REGISTER USAGE
     39    000000              
     40    000000              // ; Forth virtual machine
     41    000000              // PC = R00 
     42    000000              #define RSP SP // R01
     43    000000              // R02 = SR statusregister
     44    000000              // R03 = CG constantgenerator
     45    000000              #define PSP R4
                                  - 4e-LP430 -                        Page   33

     46    000000              #define IP  R5
     47    000000              #define W   R6
     48    000000              #define TOS R7
     49    000000              
     50    000000              // ; Loop parameters in registers
     51    000000              #define INDEX R8
     52    000000              #define LIMIT R9
     53    000000              
     54    000000              // ; Scratch registers
     55    000000              #define X  R10
     56    000000              #define Y  R11
     57    000000              #define Q  R12
     58    000000              #define T  R13
     59    000000              // nc  R14
     60    000000              // nc  R15
     61    000000              
     62    000000              
     63    000000              // ; T.I. Integer Subroutines Definitions
     64    000000              #define IROP1   TOS
     65    000000              #define IROP2L  R10
     66    000000              #define IROP2M  R11
     67    000000              #define IRACL   R12
     68    000000              #define IRACM   R13
     69    000000              #define IRBT    W  
     70    000000              
     71    000000              // ; INDIRECT-THREADED NEXT
     72    000000              
     77    000000              
     78    000000              // ; BRANCH DESTINATION (RELATIVE BRANCH)
     79    000000              // ; For relative branch addresses, i.e., a
                                branch is ADD @IP,IP
     80    000000              
     84    000000              
     85    000000              // ; HEADER CONSTRUCTION MACROS
     86    000000              
    101    000000              
    110    000000              
    125    000000              
     32    000000              
     33    000000                      EXTERN  UP,UAREA,PADAREA,LSTACK,PSTACK,R
 STACK
     34    000000                      EXTERN  TIBAREA,RAMDICT,ROMDICT
     35    000000                      EXTERN  TIB_SIZE,UAREA_SIZE,VARAREA,VAR_
                               SIZE,nullirq
     36    000000              
     37    000000                      RSEG    CODE                    ; place
  program in 'CODE' segment
     38    000000              
     39    000000              link    SET 0           ; initial dictionary
                                link
     40    000000              
     41    000000              ; production fuse bits 
     42    000000 FFFF         PROFUSE:  DW 0xFFFF  ; burn fuse to prohibit
                                                     WIPE 
     43    000002              
     44    000002              
     45    000002 13           version:  DB (verend-ver0)
     46    000003 204D53503433*ver0:     DB ' MSP430G2553 4E4th ' 
     47    000016                        EVEN 0x20 ; use blank as padding
                                byte
     48    000016              verend:
     49    000016              
     50    000016 16           stamp:    DB (stampend-stamp0)
     51    000017 446563203231*stamp0:   DB __date__,' ',__time__
     52    00002D              stampend: 
     53    00002D              
     54    00002D              /*
     55    00002D              id:       DB (idend-id0)
     56    00002D              id0:      DB 'MSP430G2553 '
     57    00002D                        EVEN 0x20 ; use blank as padding
                                byte
     58    00002D              idend:
     59    00002D              */
     60    00002D              
     61    00002D              ; ----------------------------------------------
                               ------------------------
     62    00002D              ; We #include the following source files, rather
                                than compiling them 
                                  - 4e-LP430 -                        Page   34

     63    00002D              ; separately, so that they can inherit the value
                                of 'link'.
     64    00002D              
     65    00002D              #include "4e-core430.s43"
      1    00002D              ; ----------------------------------------------
                               ------------------------
      2    00002D              ; 4e4th is a Forth based on CamelForth
                                
      3    00002D              ; for the Texas Instruments MSP430 
      4    00002D              ; 
      5    00002D              ; This program is free software; you can
                                redistribute it and/or modify
      6    00002D              ; it under the terms of the GNU General Public
                                License as published by
      7    00002D              ; the Free Software Foundation; either version 3
                                of the License, or
      8    00002D              ; (at your option) any later version.
      9    00002D              ; 
     10    00002D              ; This program is distributed in the hope that
                                it will be useful,
     11    00002D              ; but WITHOUT ANY WARRANTY; without even the
                                implied warranty of
     12    00002D              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
                                PURPOSE.  See the
     13    00002D              ; GNU General Public License for more details.
     14    00002D              ;
     15    00002D              ; You should have received a copy of the GNU
                                General Public License
     16    00002D              ; along with this program.  If not, see
                                <http://www.gnu.org/licenses/>.
     17    00002D              ; 
     18    00002D              ; See LICENSE TERMS in Brads file readme.txt as
                                well.
     19    00002D              
     20    00002D              ; ----------------------------------------------
                               ------------------------
     21    00002D              ; 4e-core430.s43 - Machine Language Primitives -
                                MSP430G2553 
     22    00002D              ; ----------------------------------------------
                               ------------------------
     23    00002D              
     24    00002D              ; Revision History
     25    00002D              ;  1 mar 09 bjr - changed Flash write and erase
                                primitives to correctly
     26    00002D              ;       write RAM outside Info Flash and Main
                                Flash address limits.
     27    00002D              /*
     28    00002D              #include "msp430.h"                     ;
                                #define controlled include file
     29    00002D              #include "4e-CF430G2553forth.h"         ; header
                                macros and register defs
     30    00002D              
     31    00002D                      EXTERN  UP,UAREA,PADAREA,LSTACK,PSTACK,R
                               STACK
     32    00002D                      EXTERN  TIBAREA,RAMDICT,ROMDICT
     33    00002D                      EXTERN  TIB_SIZE,UAREA_SIZE,VARAREA,VAR_
                               SIZE,nullirq
     34    00002D              
     35    00002D                      RSEG    CODE                    ; place
                                program in 'CODE' segment
     36    00002D              
     37    00002D              link    SET 0           ; initial dictionary
                                link
     38    00002D              
     39    00002D              ; production fuse bits 
     40    00002D              PROFUSE:  DW 0xFFFF  ; burn fuse to prohibit
                                WIPE 
     41    00002D              
     42    00002D              
     43    00002D              version:  DB (verend-ver0)
     44    00002D              ver0:     DB ' MSP430G2553 4E4th ' 
     45    00002D                        EVEN 0x20 ; use blank as padding
                                byte
     46    00002D              verend:
     47    00002D              
     48    00002D              stamp:    DB (stampend-stamp0)
     49    00002D              stamp0:   DB __date__,' ',__time__
     50    00002D              stampend: 
                                  - 4e-LP430 -                        Page   35

     51    00002D              
     52    00002D              /*
     53    00002D              id:       DB (idend-id0)
     54    00002D              id0:      DB 'MSP430G2553 '
     55    00002D                        EVEN 0x20 ; use blank as padding
                                byte
     56    00002D              idend:
     57    00002D              */
     58    00002D              */
     59    00002D              ; ----------------------------------------------
                               ------------------------
     60    00002D              ; INTERPRETER LOGIC
     61    00002D              ; ITC NEXT is defined as
     62    00002D              ;        MOV @IP+,W      ; 2 fetch word address
                                into W
     63    00002D              ;        MOV @W+,PC      ; 2 fetch code address
                                into PC, W=PFA
     64    00002D              
     65    00002D              ;C EXECUTE   i*x xt -- j*x   execute Forth word
                                at 'xt'
     66    00002D                      HEADER  EXECUTE,7,'EXECUTE',DOCODE
     66.1  000000                      PUBLIC  EXECUTE
     66.2  00002D 0000                 DW      link
     66.3  00002F FF                   DB      0FFh       ; not immediate
     66.4  000030              link    SET     $
     66.5  000030 07                   DB      7
     66.6  000031 455845435554*        DB      'EXECUTE'
     66.7  000038                      EVEN
     66.8  000038                      IF      'DOCODE'='DOCODE'
     66.9  000038 ....         EXECUTE: DW     $+2
     66.10 00003A                      ELSE
     66.11 00003A              EXECUTE: DW      DOCODE
     66.12 00003A                      ENDIF
     66.13 00003A                      ENDM
     67    00003A 0647                 MOV TOS,W       ; 1 put word address
                                                        into W
     68    00003C 3744                 MOV @PSP+,TOS   ; 2 fetch new TOS
     69    00003E 3046                 MOV @W+,PC      ; 2 fetch code address
                                                        into PC, W=PFA
     70    000040              
     71    000040              ;Z lit      -- x    fetch inline literal to
                                stack
     72    000040              ; This is the primtive compiled by LITERAL.
     73    000040                      HEADER  lit,3,'lit',DOCODE
     73.1  000000                      PUBLIC  lit
     73.2  000040 ....                 DW      link
     73.3  000042 FF                   DB      0FFh       ; not immediate
     73.4  000043              link    SET     $
     73.5  000043 03                   DB      3
     73.6  000044 6C6974               DB      'lit'
     73.7  000047 00                   EVEN
     73.8  000048                      IF      'DOCODE'='DOCODE'
     73.9  000048 ....         lit: DW     $+2
     73.10 00004A                      ELSE
     73.11 00004A              lit: DW      DOCODE
     73.12 00004A                      ENDIF
     73.13 00004A                      ENDM
     74    00004A 2483                 SUB #2,PSP      ; 1  push old TOS..
     75    00004C 84470000             MOV TOS,0(PSP)  ; 4  ..onto stack
     76    000050 3745                 MOV @IP+,TOS    ; 2  fetch new TOS
                                                        value
     77    000052                      NEXT            ; 4
     77.1  000052 3645                 MOV @IP+,W     // ; fetch word address
                                                            into W
     77.2  000054 3046                 MOV @W+,PC     // ; fetch code address
                                                            into PC, W=PFA
     77.3  000056                      ENDM
     78    000056              
     79    000056              ;C EXIT     --            exit a colon
                                definition
     80    000056                      HEADER  EXIT,4,'EXIT',DOCODE
     80.1  000000                      PUBLIC  EXIT
     80.2  000056 ....                 DW      link
     80.3  000058 FF                   DB      0FFh       ; not immediate
     80.4  000059              link    SET     $
     80.5  000059 04                   DB      4
     80.6  00005A 45584954             DB      'EXIT'
     80.7  00005E                      EVEN
                                  - 4e-LP430 -                        Page   36

     80.8  00005E                      IF      'DOCODE'='DOCODE'
     80.9  00005E ....         EXIT: DW     $+2
     80.10 000060                      ELSE
     80.11 000060              EXIT: DW      DOCODE
     80.12 000060                      ENDIF
     80.13 000060                      ENDM
     81    000060 3541                 MOV @RSP+,IP    ; 2 pop old IP from
                                                        return stack
     82    000062                      NEXT            ; 4
     82.1  000062 3645                 MOV @IP+,W     // ; fetch word address
                                                            into W
     82.2  000064 3046                 MOV @W+,PC     // ; fetch code address
                                                            into PC, W=PFA
     82.3  000066                      ENDM
     83    000066              
     84    000066              ; ----------------------------------------------
                               ------------------------
     85    000066              ; DEFINING WORDS - ROMable ITC model 
     86    000066              
     87    000066              ; DOCOLON enters a new high-level thread (colon
                                definition.)
     88    000066              ; (internal code fragment, not a Forth
                                word)
     89    000000                      PUBLIC DOCOLON
     90    000066              DOCOLON: 
     91    000066 0512                 PUSH IP         ; 3 save old IP on
                                                        return stack
     92    000068 0546                 MOV W,IP        ; 1 set new IP to
                                                        PFA
     93    00006A                      NEXT            ; 4
     93.1  00006A 3645                 MOV @IP+,W     // ; fetch word address
                                                            into W
     93.2  00006C 3046                 MOV @W+,PC     // ; fetch code address
                                                            into PC, W=PFA
     93.3  00006E                      ENDM
     94    00006E              
     95    00006E              ;C VARIABLE   --            define a Forth
                                VARIABLE
     96    00006E              ;   CREATE CELL ALLOT ;
     97    00006E              ; Action of ROMable variable is the same as
                                CREATE; it builds a
     98    00006E              ; constant holding the RAM address.  See CREATE
                                in hilvl430.s43.
     99    00006E                      HEADER VARIABLE,8,'VARIABLE',DOCOLON
     99.1  000000                      PUBLIC  VARIABLE
     99.2  00006E ....                 DW      link
     99.3  000070 FF                   DB      0FFh       ; not immediate
     99.4  000071              link    SET     $
     99.5  000071 08                   DB      8
     99.6  000072 564152494142*        DB      'VARIABLE'
     99.7  00007A                      EVEN
     99.8  00007A                      IF      'DOCOLON'='DOCODE'
     99.9  00007A              VARIABLE: DW     $+2
     99.10 00007A                      ELSE
     99.11 00007A ....         VARIABLE: DW      DOCOLON
     99.12 00007C                      ENDIF
     99.13 00007C                      ENDM
    100    00007C ............*        DW CREATE,CELL,ALLOT,EXIT
    101    000084              
    102    000084              ;C CONSTANT   --            define a Forth
                                constant
    103    000084              ;   <BUILDS  I,   Flashable Harvard model
    104    000084              ;   DOES> (machine code fragment)
    105    000084              ; Note that the constant is stored in Code
                                space.
    106    000084                      HEADER CONSTANT,8,'CONSTANT',DOCOLON
    106.1  000000                      PUBLIC  CONSTANT
    106.2  000084 ....                 DW      link
    106.3  000086 FF                   DB      0FFh       ; not immediate
    106.4  000087              link    SET     $
    106.5  000087 08                   DB      8
    106.6  000088 434F4E535441*        DB      'CONSTANT'
    106.7  000090                      EVEN
    106.8  000090                      IF      'DOCOLON'='DOCODE'
    106.9  000090              CONSTANT: DW     $+2
    106.10 000090                      ELSE
    106.11 000090 ....         CONSTANT: DW      DOCOLON
    106.12 000092                      ENDIF
                                  - 4e-LP430 -                        Page   37

    106.13 000092                      ENDM
    107    000092 ............         DW BUILDS,ICOMMA,XDOES
    108    000098              ; DOCON, code action of CONSTANT,
    109    000098              ; entered with W=Parameter Field Adrs
    110    000098              ; This is also the action of VARIABLE (Harvard
                                model)
    111    000098              ; This is also the action of CREATE (Harvard
                                model)
    112    000000                      PUBLIC DOCON
    113    000000                      PUBLIC docreate
    114    000000                      PUBLIC DOVAR
    115    000098              docreate: ; -- a-addr   ; ROMable CREATE fetches
                                address from PFA
    116    000098              DOVAR:  ; -- a-addr     ; ROMable VARIABLE
                                fetches address from PFA
    117    000098              DOCON:  ; -- x          ; CONSTANT fetches cell
                                from PFA to TOS
    118    000098 2483                 SUB #2,PSP      ; make room on
                                                        stack
    119    00009A 84470000             MOV TOS,0(PSP)
    120    00009E 2746                 MOV @W,TOS      ; fetch from parameter
                                                        field to TOS
    121    0000A0                      NEXT
    121.1  0000A0 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    121.2  0000A2 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    121.3  0000A4                      ENDM
    122    0000A4              
    123    0000A4              ; DOCREATE's action is for a table in RAM.
    124    0000A4              ; DOROM is the code action for a table in
                                ROM;
    125    0000A4              ; it returns the address of the parameter
                                field.
    126    000000                      PUBLIC DOROM
    127    0000A4              DOROM:  ; -- a-addr     ; Table in ROM: get PFA
                                into TOS
    128    0000A4 2483                 SUB #2,PSP 
    129    0000A6 84470000             MOV TOS,0(PSP)
    130    0000AA 0746                 MOV W,TOS
    131    0000AC                      NEXT
    131.1  0000AC 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    131.2  0000AE 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    131.3  0000B0                      ENDM
    132    0000B0              
    133    0000B0              ;Z USER     n --        define user variable
                                'n'
    134    0000B0              ;   <BUILDS I, DOES> (machine code fragment)   
                                Flashable model
    135    0000B0                      HEADER USER,4,'USER',DOCOLON
    135.1  000000                      PUBLIC  USER
    135.2  0000B0 ....                 DW      link
    135.3  0000B2 FF                   DB      0FFh       ; not immediate
    135.4  0000B3              link    SET     $
    135.5  0000B3 04                   DB      4
    135.6  0000B4 55534552             DB      'USER'
    135.7  0000B8                      EVEN
    135.8  0000B8                      IF      'DOCOLON'='DOCODE'
    135.9  0000B8              USER: DW     $+2
    135.10 0000B8                      ELSE
    135.11 0000B8 ....         USER: DW      DOCOLON
    135.12 0000BA                      ENDIF
    135.13 0000BA                      ENDM
    136    0000BA ............         DW BUILDS,ICOMMA,XDOES
    137    000000                      PUBLIC DOUSER
    138    0000C0              DOUSER: ; -- a-addr     ; add constant to User
                                Pointer, result in TOS
    139    0000C0 2483                 SUB #2,PSP
    140    0000C2 84470000             MOV TOS,0(PSP)
    141    0000C6 2746                 MOV @W,TOS
    142    0000C8 1752....             ADD &UP,TOS
    143    0000CC                      NEXT
    143.1  0000CC 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    143.2  0000CE 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
                                  - 4e-LP430 -                        Page   38

    143.3  0000D0                      ENDM
    144    0000D0              
    145    0000D0              ; DOALIAS  used to build a word which performs
                                the action of
    146    0000D0              ; another word.  Its action is to fetch the
                                "alias" CFA from
    147    0000D0              ; the parameter field, and execute that, e.g.
                                DOES> I@ EXECUTE ;
    148    0000D0              ; This is currently used only within the Forth
                                kernel.
    149    000000                      PUBLIC DOALIAS
    150    0000D0              DOALIAS:  ; --          ; fetch CFA of word to
                                execute
    151    0000D0 2646                 MOV @W,W        ; 2 fetch from parameter
                                                        field to W
    152    0000D2 3046                 MOV @W+,PC      ; 2 fetch code address
                                                        into PC, W=PFA
    153    0000D4              
    154    0000D4              ; DODOES is the code action of a DOES> clause. 
                                For ITC Forth:
    155    0000D4              ; defined word:  CFA: doescode
    156    0000D4              ;                PFA: parameter field
    157    0000D4              ;
    158    0000D4              ; doescode: MOV #DODOES,PC      ; 16-bit direct
                                jump, in two cells
    159    0000D4              ;           high-level thread
    160    0000D4              ;
    161    0000D4              ; Note that we use JMP DODOES instead of CALL
                                #DODOES because we can 
    162    0000D4              ; efficiently obtain the thread address.  DODOES
                                is entered with W=PFA.
    163    0000D4              ; It enters the high-level thread with the
                                address of the parameter
    164    0000D4              ; field on top of stack.
    165    0000D4              
    166    000000                      PUBLIC dodoes
    167    0000D4              dodoes: ; -- a-addr     ; 3 for MOV #DODOES,PC
    168    0000D4 2483                 SUB #2,PSP      ; 1 make room on
                                                        stack
    169    0000D6 84470000             MOV TOS,0(PSP)  ; 4
    170    0000DA 0746                 MOV W,TOS       ; 1 put defined word's
                                                        PFA in TOS
    171    0000DC 0512                 PUSH IP         ; 3 save old IP on
                                                        return stack
    172    0000DE 1546FEFF             MOV -2(W),IP    ; 3 fetch adrs of
                                                        doescode from defined
                                                        word
    173    0000E2 2552                 ADD #4,IP       ; 1 skip MOV instruction
                                                        to get thread
                                                        adrs
    174    0000E4                      NEXT            ; 4
    174.1  0000E4 3645                 MOV @IP+,W     // ; fetch word address
                                                            into W
    174.2  0000E6 3046                 MOV @W+,PC     // ; fetch code address
                                                            into PC, W=PFA
    174.3  0000E8                      ENDM
    175    0000E8              
    176    0000E8              ; OPTION 1              ; OPTION 2
    177    0000E8              ;  MOV #DODOES,PC   3   ;  CALL #DODOES     
                                5
    178    0000E8              ;   ...                 ;   ...
    179    0000E8              ;  PUSH IP          3   ;  POP W           
                                2
    180    0000E8              ;  MOVE -2(W),IP    3   ;  PUSH IP         
                                3
    181    0000E8              ;  ADD #4,IP        1   ;  MOV W,IP        
                                1
    182    0000E8              
    183    0000E8              
    184    0000E8              ; ----------------------------------------------
                               ------------------------
    185    0000E8              ; STACK OPERATIONS
    186    0000E8              
    187    0000E8              ;C DUP      x -- x x      duplicate top of
                                stack
    188    0000E8                      HEADER  DUP,3,'DUP',DOCODE 
    188.1  000000                      PUBLIC  DUP
    188.2  0000E8 ....                 DW      link
                                  - 4e-LP430 -                        Page   39

    188.3  0000EA FF                   DB      0FFh       ; not immediate
    188.4  0000EB              link    SET     $
    188.5  0000EB 03                   DB      3
    188.6  0000EC 445550               DB      'DUP'
    188.7  0000EF 00                   EVEN
    188.8  0000F0                      IF      'DOCODE'='DOCODE'
    188.9  0000F0 ....         DUP: DW     $+2
    188.10 0000F2                      ELSE
    188.11 0000F2              DUP: DW      DOCODE
    188.12 0000F2                      ENDIF
    188.13 0000F2                      ENDM
    189    0000F2 2483         PUSHTOS: SUB    #2,PSP          ; 1  push old
                                                                TOS..
    190    0000F4 84470000             MOV     TOS,0(PSP)      ; 4  ..onto
                                                                stack
    191    0000F8                      NEXT                    ; 4
    191.1  0000F8 3645                 MOV @IP+,W     // ; fetch word address
                                                                    into
                                                                    W
    191.2  0000FA 3046                 MOV @W+,PC     // ; fetch code address
                                                                    into PC,
                                                                    W=PFA
    191.3  0000FC                      ENDM
    192    0000FC              
    193    0000FC              ;C ?DUP     x -- 0 | x x    DUP if nonzero
    194    0000FC                      HEADER  QDUP,4,'?DUP',DOCODE
    194.1  000000                      PUBLIC  QDUP
    194.2  0000FC ....                 DW      link
    194.3  0000FE FF                   DB      0FFh       ; not immediate
    194.4  0000FF              link    SET     $
    194.5  0000FF 04                   DB      4
    194.6  000100 3F445550             DB      '?DUP'
    194.7  000104                      EVEN
    194.8  000104                      IF      'DOCODE'='DOCODE'
    194.9  000104 ....         QDUP: DW     $+2
    194.10 000106                      ELSE
    194.11 000106              QDUP: DW      DOCODE
    194.12 000106                      ENDIF
    194.13 000106                      ENDM
    195    000106 0793                 CMP     #0,TOS          ; 1  test for
                                                                TOS nonzero
    196    000108 F423                 JNZ     PUSHTOS         ; 2
    197    00010A              NODUP:  NEXT                    ; 4
    197.1  00010A 3645                 MOV @IP+,W     // ; fetch word address
                                                                    into
                                                                    W
    197.2  00010C 3046                 MOV @W+,PC     // ; fetch code address
                                                                    into PC,
                                                                    W=PFA
    197.3  00010E                      ENDM
    198    00010E              
    199    00010E              ;C DROP     x --          drop top of stack
    200    00010E                      HEADER  DROP,4,'DROP',DOCODE
    200.1  000000                      PUBLIC  DROP
    200.2  00010E ....                 DW      link
    200.3  000110 FF                   DB      0FFh       ; not immediate
    200.4  000111              link    SET     $
    200.5  000111 04                   DB      4
    200.6  000112 44524F50             DB      'DROP'
    200.7  000116                      EVEN
    200.8  000116                      IF      'DOCODE'='DOCODE'
    200.9  000116 ....         DROP: DW     $+2
    200.10 000118                      ELSE
    200.11 000118              DROP: DW      DOCODE
    200.12 000118                      ENDIF
    200.13 000118                      ENDM
    201    000118 3744                 MOV     @PSP+,TOS       ; 2
    202    00011A                      NEXT                    ; 4
    202.1  00011A 3645                 MOV @IP+,W     // ; fetch word address
                                                                    into
                                                                    W
    202.2  00011C 3046                 MOV @W+,PC     // ; fetch code address
                                                                    into PC,
                                                                    W=PFA
    202.3  00011E                      ENDM
    203    00011E              
    204    00011E              ;C SWAP     x1 x2 -- x2 x1    swap top two
                                items
                                  - 4e-LP430 -                        Page   40

    205    00011E                      HEADER  SWAP,4,'SWAP',DOCODE
    205.1  000000                      PUBLIC  SWAP
    205.2  00011E ....                 DW      link
    205.3  000120 FF                   DB      0FFh       ; not immediate
    205.4  000121              link    SET     $
    205.5  000121 04                   DB      4
    205.6  000122 53574150             DB      'SWAP'
    205.7  000126                      EVEN
    205.8  000126                      IF      'DOCODE'='DOCODE'
    205.9  000126 ....         SWAP: DW     $+2
    205.10 000128                      ELSE
    205.11 000128              SWAP: DW      DOCODE
    205.12 000128                      ENDIF
    205.13 000128                      ENDM
    206    000128 2644                 MOV     @PSP,W          ; 2
    207    00012A 84470000             MOV     TOS,0(PSP)      ; 4
    208    00012E 0746                 MOV     W,TOS           ; 1
    209    000130                      NEXT                    ; 4
    209.1  000130 3645                 MOV @IP+,W     // ; fetch word address
                                                                    into
                                                                    W
    209.2  000132 3046                 MOV @W+,PC     // ; fetch code address
                                                                    into PC,
                                                                    W=PFA
    209.3  000134                      ENDM
    210    000134              
    211    000134              ;C OVER    x1 x2 -- x1 x2 x1   per stack
                                diagram
    212    000134                      HEADER  OVER,4,'OVER',DOCODE
    212.1  000000                      PUBLIC  OVER
    212.2  000134 ....                 DW      link
    212.3  000136 FF                   DB      0FFh       ; not immediate
    212.4  000137              link    SET     $
    212.5  000137 04                   DB      4
    212.6  000138 4F564552             DB      'OVER'
    212.7  00013C                      EVEN
    212.8  00013C                      IF      'DOCODE'='DOCODE'
    212.9  00013C ....         OVER: DW     $+2
    212.10 00013E                      ELSE
    212.11 00013E              OVER: DW      DOCODE
    212.12 00013E                      ENDIF
    212.13 00013E                      ENDM
    213    00013E 2644                 MOV     @PSP,W          ; 2
    214    000140 2483                 SUB     #2,PSP          ; 2
    215    000142 84470000             MOV     TOS,0(PSP)      ; 4
    216    000146 0746                 MOV     W,TOS           ; 1
    217    000148                      NEXT                    ; 4
    217.1  000148 3645                 MOV @IP+,W     // ; fetch word address
                                                                    into
                                                                    W
    217.2  00014A 3046                 MOV @W+,PC     // ; fetch code address
                                                                    into PC,
                                                                    W=PFA
    217.3  00014C                      ENDM
    218    00014C              
    219    00014C              ;C ROT    x1 x2 x3 -- x2 x3 x1  per stack
                                diagram
    220    00014C                      HEADER  ROT,3,'ROT',DOCODE
    220.1  000000                      PUBLIC  ROT
    220.2  00014C ....                 DW      link
    220.3  00014E FF                   DB      0FFh       ; not immediate
    220.4  00014F              link    SET     $
    220.5  00014F 03                   DB      3
    220.6  000150 524F54               DB      'ROT'
    220.7  000153 00                   EVEN
    220.8  000154                      IF      'DOCODE'='DOCODE'
    220.9  000154 ....         ROT: DW     $+2
    220.10 000156                      ELSE
    220.11 000156              ROT: DW      DOCODE
    220.12 000156                      ENDIF
    220.13 000156                      ENDM
    221    000156 2644                 MOV     @PSP,W          ; 2 fetch
                                                                x2
    222    000158 84470000             MOV     TOS,0(PSP)      ; 4 store
                                                                x3
    223    00015C 17440200             MOV     2(PSP),TOS      ; 3 fetch
                                                                x1
    224    000160 84460200             MOV     W,2(PSP)        ; 4 store
                                  - 4e-LP430 -                        Page   41

                                                                x2
    225    000164                      NEXT                    ; 4
    225.1  000164 3645                 MOV @IP+,W     // ; fetch word address
                                                                    into
                                                                    W
    225.2  000166 3046                 MOV @W+,PC     // ; fetch code address
                                                                    into PC,
                                                                    W=PFA
    225.3  000168                      ENDM
    226    000168              
    227    000168              ;X NIP    x1 x2 -- x2           per stack
                                diagram
    228    000168                      HEADER  NIP,3,'NIP',DOCODE
    228.1  000000                      PUBLIC  NIP
    228.2  000168 ....                 DW      link
    228.3  00016A FF                   DB      0FFh       ; not immediate
    228.4  00016B              link    SET     $
    228.5  00016B 03                   DB      3
    228.6  00016C 4E4950               DB      'NIP'
    228.7  00016F 00                   EVEN
    228.8  000170                      IF      'DOCODE'='DOCODE'
    228.9  000170 ....         NIP: DW     $+2
    228.10 000172                      ELSE
    228.11 000172              NIP: DW      DOCODE
    228.12 000172                      ENDIF
    228.13 000172                      ENDM
    229    000172 2453                 ADD     #2,PSP          ; 1 
    230    000174                      NEXT                    ; 4
    230.1  000174 3645                 MOV @IP+,W     // ; fetch word address
                                                                    into
                                                                    W
    230.2  000176 3046                 MOV @W+,PC     // ; fetch code address
                                                                    into PC,
                                                                    W=PFA
    230.3  000178                      ENDM
    231    000178              ; Das funktioniert, weil TOS im Register
                                ist.
    232    000178              ; TOS beleibt dort unverändert, derweil der PSP
                                um eins erhöht wird.
    233    000178              ; Das entspricht einem DROP ohne den TOS neu zu
                                laden.
    234    000178              ; cool. mk
    235    000178              
    236    000178              ;C >R    x -- R: -- x      push to return
                                stack
    237    000178                      HEADER  TOR,2,'>R',DOCODE
    237.1  000000                      PUBLIC  TOR
    237.2  000178 ....                 DW      link
    237.3  00017A FF                   DB      0FFh       ; not immediate
    237.4  00017B              link    SET     $
    237.5  00017B 02                   DB      2
    237.6  00017C 3E52                 DB      '>R'
    237.7  00017E                      EVEN
    237.8  00017E                      IF      'DOCODE'='DOCODE'
    237.9  00017E ....         TOR: DW     $+2
    237.10 000180                      ELSE
    237.11 000180              TOR: DW      DOCODE
    237.12 000180                      ENDIF
    237.13 000180                      ENDM
    238    000180 0712                 PUSH TOS
    239    000182 3744                 MOV @PSP+,TOS
    240    000184                      NEXT
    240.1  000184 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    240.2  000186 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    240.3  000188                      ENDM
    241    000188              
    242    000188              ;C R>    -- x R: x --     pop from return
                                stack
    243    000188                      HEADER  RFROM,2,'R>',DOCODE
    243.1  000000                      PUBLIC  RFROM
    243.2  000188 ....                 DW      link
    243.3  00018A FF                   DB      0FFh       ; not immediate
    243.4  00018B              link    SET     $
    243.5  00018B 02                   DB      2
    243.6  00018C 523E                 DB      'R>'
    243.7  00018E                      EVEN
                                  - 4e-LP430 -                        Page   42

    243.8  00018E                      IF      'DOCODE'='DOCODE'
    243.9  00018E ....         RFROM: DW     $+2
    243.10 000190                      ELSE
    243.11 000190              RFROM: DW      DOCODE
    243.12 000190                      ENDIF
    243.13 000190                      ENDM
    244    000190 2483                 SUB #2,PSP      ; 2
    245    000192 84470000             MOV TOS,0(PSP)    ; 4
    246    000196 3741                 MOV @RSP+,TOS
    247    000198                      NEXT
    247.1  000198 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    247.2  00019A 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    247.3  00019C                      ENDM
    248    00019C              
    249    00019C              ;C R@    -- x R: x -- x     fetch from rtn
                                stk
    250    00019C                      HEADER  RFETCH,2,'R@',DOCODE
    250.1  000000                      PUBLIC  RFETCH
    250.2  00019C ....                 DW      link
    250.3  00019E FF                   DB      0FFh       ; not immediate
    250.4  00019F              link    SET     $
    250.5  00019F 02                   DB      2
    250.6  0001A0 5240                 DB      'R@'
    250.7  0001A2                      EVEN
    250.8  0001A2                      IF      'DOCODE'='DOCODE'
    250.9  0001A2 ....         RFETCH: DW     $+2
    250.10 0001A4                      ELSE
    250.11 0001A4              RFETCH: DW      DOCODE
    250.12 0001A4                      ENDIF
    250.13 0001A4                      ENDM
    251    0001A4 2483                 SUB #2,PSP
    252    0001A6 84470000             MOV TOS,0(PSP)
    253    0001AA 2741                 MOV @RSP,TOS
    254    0001AC                      NEXT
    254.1  0001AC 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    254.2  0001AE 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    254.3  0001B0                      ENDM
    255    0001B0              
    256    0001B0              ;Z SP@  -- a-addr       get data stack
                                pointer
    257    0001B0                      HEADER  SPFETCH,3,'SP@',DOCODE
    257.1  000000                      PUBLIC  SPFETCH
    257.2  0001B0 ....                 DW      link
    257.3  0001B2 FF                   DB      0FFh       ; not immediate
    257.4  0001B3              link    SET     $
    257.5  0001B3 03                   DB      3
    257.6  0001B4 535040               DB      'SP@'
    257.7  0001B7 00                   EVEN
    257.8  0001B8                      IF      'DOCODE'='DOCODE'
    257.9  0001B8 ....         SPFETCH: DW     $+2
    257.10 0001BA                      ELSE
    257.11 0001BA              SPFETCH: DW      DOCODE
    257.12 0001BA                      ENDIF
    257.13 0001BA                      ENDM
    258    0001BA 2483                 SUB #2,PSP
    259    0001BC 84470000             MOV TOS,0(PSP)
    260    0001C0 0744                 MOV PSP,TOS
    261    0001C2                      NEXT
    261.1  0001C2 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    261.2  0001C4 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    261.3  0001C6                      ENDM
    262    0001C6              
    263    0001C6              ;Z SP!  a-addr --       set data stack
                                pointer
    264    0001C6                      HEADER  SPSTORE,3,'SP!',DOCODE
    264.1  000000                      PUBLIC  SPSTORE
    264.2  0001C6 ....                 DW      link
    264.3  0001C8 FF                   DB      0FFh       ; not immediate
    264.4  0001C9              link    SET     $
    264.5  0001C9 03                   DB      3
    264.6  0001CA 535021               DB      'SP!'
    264.7  0001CD 00                   EVEN
                                  - 4e-LP430 -                        Page   43

    264.8  0001CE                      IF      'DOCODE'='DOCODE'
    264.9  0001CE ....         SPSTORE: DW     $+2
    264.10 0001D0                      ELSE
    264.11 0001D0              SPSTORE: DW      DOCODE
    264.12 0001D0                      ENDIF
    264.13 0001D0                      ENDM
    265    0001D0 0447                 MOV     TOS,PSP
    266    0001D2 3744                 MOV     @PSP+,TOS       ; 2
    267    0001D4                      NEXT
    267.1  0001D4 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    267.2  0001D6 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    267.3  0001D8                      ENDM
    268    0001D8              
    269    0001D8              ;Z RP@  -- a-addr       get return stack
                                pointer
    270    0001D8                      HEADER  RPFETCH,3,'RP@',DOCODE
    270.1  000000                      PUBLIC  RPFETCH
    270.2  0001D8 ....                 DW      link
    270.3  0001DA FF                   DB      0FFh       ; not immediate
    270.4  0001DB              link    SET     $
    270.5  0001DB 03                   DB      3
    270.6  0001DC 525040               DB      'RP@'
    270.7  0001DF 00                   EVEN
    270.8  0001E0                      IF      'DOCODE'='DOCODE'
    270.9  0001E0 ....         RPFETCH: DW     $+2
    270.10 0001E2                      ELSE
    270.11 0001E2              RPFETCH: DW      DOCODE
    270.12 0001E2                      ENDIF
    270.13 0001E2                      ENDM
    271    0001E2 2483                 SUB #2,PSP
    272    0001E4 84470000             MOV TOS,0(PSP)
    273    0001E8 0741                 MOV RSP,TOS
    274    0001EA                      NEXT
    274.1  0001EA 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    274.2  0001EC 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    274.3  0001EE                      ENDM
    275    0001EE              
    276    0001EE              ;Z RP!  a-addr --       set return stack
                                pointer
    277    0001EE                      HEADER  RPSTORE,3,'RP!',DOCODE
    277.1  000000                      PUBLIC  RPSTORE
    277.2  0001EE ....                 DW      link
    277.3  0001F0 FF                   DB      0FFh       ; not immediate
    277.4  0001F1              link    SET     $
    277.5  0001F1 03                   DB      3
    277.6  0001F2 525021               DB      'RP!'
    277.7  0001F5 00                   EVEN
    277.8  0001F6                      IF      'DOCODE'='DOCODE'
    277.9  0001F6 ....         RPSTORE: DW     $+2
    277.10 0001F8                      ELSE
    277.11 0001F8              RPSTORE: DW      DOCODE
    277.12 0001F8                      ENDIF
    277.13 0001F8                      ENDM
    278    0001F8 0147                 MOV     TOS,RSP
    279    0001FA 3744                 MOV     @PSP+,TOS       ; 2
    280    0001FC                      NEXT
    280.1  0001FC 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    280.2  0001FE 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    280.3  000200                      ENDM
    281    000200              
    282    000200              ;X TUCK   x1 x2 -- x2 x1 x2     per stack
                                diagram
    283    000200                      HEADER  TUCK,4,'TUCK',DOCOLON
    283.1  000000                      PUBLIC  TUCK
    283.2  000200 ....                 DW      link
    283.3  000202 FF                   DB      0FFh       ; not immediate
    283.4  000203              link    SET     $
    283.5  000203 04                   DB      4
    283.6  000204 5455434B             DB      'TUCK'
    283.7  000208                      EVEN
    283.8  000208                      IF      'DOCOLON'='DOCODE'
    283.9  000208              TUCK: DW     $+2
                                  - 4e-LP430 -                        Page   44

    283.10 000208                      ELSE
    283.11 000208 ....         TUCK: DW      DOCOLON
    283.12 00020A                      ENDIF
    283.13 00020A                      ENDM
    284    00020A ............         DC16    SWAP,OVER,EXIT
    285    000210              
    286    000210              ; ----------------------------------------------
                               ------------------------
    287    000210              ; MEMORY OPERATIONS
    288    000210              
    289    000210              ;C @       a-addr -- x   fetch cell from
                                memory
    290    000210                      HEADER  FETCH,1,'@',DOCODE
    290.1  000000                      PUBLIC  FETCH
    290.2  000210 ....                 DW      link
    290.3  000212 FF                   DB      0FFh       ; not immediate
    290.4  000213              link    SET     $
    290.5  000213 01                   DB      1
    290.6  000214 40                   DB      '@'
    290.7  000215 00                   EVEN
    290.8  000216                      IF      'DOCODE'='DOCODE'
    290.9  000216 ....         FETCH: DW     $+2
    290.10 000218                      ELSE
    290.11 000218              FETCH: DW      DOCODE
    290.12 000218                      ENDIF
    290.13 000218                      ENDM
    291    000218 2747                 MOV     @TOS,TOS
    292    00021A                      NEXT
    292.1  00021A 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    292.2  00021C 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    292.3  00021E                      ENDM
    293    00021E              
    294    00021E              ;C !        x a-addr --   store cell in
                                memory
    295    00021E                      HEADER  STORE,1,'!',DOCODE
    295.1  000000                      PUBLIC  STORE
    295.2  00021E ....                 DW      link
    295.3  000220 FF                   DB      0FFh       ; not immediate
    295.4  000221              link    SET     $
    295.5  000221 01                   DB      1
    295.6  000222 21                   DB      '!'
    295.7  000223 00                   EVEN
    295.8  000224                      IF      'DOCODE'='DOCODE'
    295.9  000224 ....         STORE: DW     $+2
    295.10 000226                      ELSE
    295.11 000226              STORE: DW      DOCODE
    295.12 000226                      ENDIF
    295.13 000226                      ENDM
    296    000226 B7440000             MOV     @PSP+,0(TOS)
    297    00022A 3744                 MOV     @PSP+,TOS
    298    00022C                      NEXT
    298.1  00022C 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    298.2  00022E 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    298.3  000230                      ENDM
    299    000230              
    300    000230              ;C C@     c-addr -- char   fetch char from
                                memory
    301    000230                      HEADER  CFETCH,2,'C@',DOCODE
    301.1  000000                      PUBLIC  CFETCH
    301.2  000230 ....                 DW      link
    301.3  000232 FF                   DB      0FFh       ; not immediate
    301.4  000233              link    SET     $
    301.5  000233 02                   DB      2
    301.6  000234 4340                 DB      'C@'
    301.7  000236                      EVEN
    301.8  000236                      IF      'DOCODE'='DOCODE'
    301.9  000236 ....         CFETCH: DW     $+2
    301.10 000238                      ELSE
    301.11 000238              CFETCH: DW      DOCODE
    301.12 000238                      ENDIF
    301.13 000238                      ENDM
    302    000238 6747                 MOV.B   @TOS,TOS
    303    00023A                      NEXT
    303.1  00023A 3645                 MOV @IP+,W     // ; fetch word address
                                  - 4e-LP430 -                        Page   45

                                                          into W
    303.2  00023C 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    303.3  00023E                      ENDM
    304    00023E              
    305    00023E              ;C C!      char c-addr --    store char in
                                memory
    306    00023E                      HEADER  CSTORE,2,'C!',DOCODE
    306.1  000000                      PUBLIC  CSTORE
    306.2  00023E ....                 DW      link
    306.3  000240 FF                   DB      0FFh       ; not immediate
    306.4  000241              link    SET     $
    306.5  000241 02                   DB      2
    306.6  000242 4321                 DB      'C!'
    306.7  000244                      EVEN
    306.8  000244                      IF      'DOCODE'='DOCODE'
    306.9  000244 ....         CSTORE: DW     $+2
    306.10 000246                      ELSE
    306.11 000246              CSTORE: DW      DOCODE
    306.12 000246                      ENDIF
    306.13 000246                      ENDM
    307    000246 3644                 MOV     @PSP+,W
    308    000248 C7460000             MOV.B   W,0(TOS)
    309    00024C 3744                 MOV     @PSP+,TOS
    310    00024E                      NEXT
    310.1  00024E 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    310.2  000250 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    310.3  000252                      ENDM
    311    000252              
    312    000252              ; FLASH MEMORY OPERATIONS
    313    000252              ; Note that an I! or IC! to a RAM address
                                >FLASHSTART will work -- it 
    314    000252              ; will enable the flash, write the RAM, and then
                                disable the flash.
    315    000252              ; An FLERASE to a RAM address will merely clear
                                that one RAM cell.
    316    000252              
    317    000252              ;Z FLERASE  a-addr n --     erase n bytes of
                                flash, full segment sizes.
    318    000252                      HEADER  FLERASE,7,'FLERASE',DOCODE
    318.1  000000                      PUBLIC  FLERASE
    318.2  000252 ....                 DW      link
    318.3  000254 FF                   DB      0FFh       ; not immediate
    318.4  000255              link    SET     $
    318.5  000255 07                   DB      7
    318.6  000256 464C45524153*        DB      'FLERASE'
    318.7  00025D 00                   EVEN
    318.8  00025E                      IF      'DOCODE'='DOCODE'
    318.9  00025E ....         FLERASE: DW     $+2
    318.10 000260                      ELSE
    318.11 000260              FLERASE: DW      DOCODE
    318.12 000260                      ENDIF
    318.13 000260                      ENDM
    319    000260 3644                 MOV     @PSP+,W         ; get address in
                                                                W
    320    000262 0756                 ADD     W,TOS           ; TOS=end adrs
                                                                (first unerased
                                                                adrs)
    321    000264              FLE_1:
    322    000264 0697                 CMP     TOS,W           ; adr-end
    323    000266 2E2C                 JC      FLE_X           ; if no borrow,
                                                                adr>=end, do
                                                                not erase
    324    000268                      ; is it within Main flash?
    325    000268 369000C0             CMP     #USERFLASHSTART,W       ; flash
                                                                        start
    326    00026C 0328                 JNC     FLE_VEC        ; if borrow,
                                                               adr<start, check
                                                               if vec
    327    00026E 369000D8             CMP     #USERFLASHEND+1,W     ; flash
                                                                      end
    328    000272 0C28                 JNC     FLE_OK          ; if no borrow,
                                                                adr>end, check
                                                                if vec
    329    000274              
    330    000274              FLE_VEC
                                  - 4e-LP430 -                        Page   46

    331    000274              ; danger!! only for MSPG2553 apps
    332    000274                      ; is it within interrupt vector
                                flash?
    333    000274 369000FE             CMP     #ISRSTART,W       ; flash
                                                                  start
    334    000278 0328                 JNC     FLE_INFO        ; if borrow,
                                                                adr<start,
                                                                check if
                                                                Info
    335    00027A 3690E0FF             CMP     #ISREND+1,W     ; flash
                                                                end
    336    00027E 0628                 JNC     FLE_OK          ; if no borrow,
                                                                adr>end, check
                                                                if Info
    337    000280              ; /danger
    338    000280              
    339    000280              FLE_INFO: ; is it within Info flash?
    340    000280 36900010             CMP     #INFOSTART,W
    341    000284 1F28                 JNC     FLE_X           ; if borrow,
                                                                adr<start, do
                                                                not erase
    342    000286 36900011             CMP     #INFOEND+1,W
    343    00028A 1C2C                 JC      FLE_X           ; if no borrow,
                                                                adr>end, do not
                                                                erase
    344    00028C              FLE_OK: ; Address is either in Main flash, or in
                                Info flash.
    345    00028C                      ; Segment Erase from flash. 
    346    00028C                      ; Assumes ACCVIE = NMIIE = OFIE = 0,
                                watchdog disabled.
    347    00028C                      ; Per section 5.3.2 of MSP430 Family
                                User's Guide
    348    00028C 0212                 PUSH sr
    349    00028E 32C2                 DINT                    ; Disable
                                                                interrupts
    350    000290 B24000A52C01         MOV #FWKEY,&FCTL3       ; Clear
                                                                LOCK
    351    000296 B24002A52801         MOV #FWKEY+ERASE,&FCTL1 ; Enable segment
                                                                erase
    352    00029C B6430000             MOV     #-1,0(W)        ; Dummy write in
                                                                segment to
                                                                erase
    353    0002A0 B24000A52801         MOV #FWKEY,&FCTL1       ; Done. Clear
                                                                erase
                                                                command.
    354    0002A6 B24010A52C01         MOV #FWKEY+LOCK,&FCTL3  ; Done, set
                                                                LOCK
    355    0002AC              ;        EINT                    ; Enable
                                interrupts
    356    0002AC 3241                 POP sr
    357    0002AE                      ; Advance flash pointer by 512 bytes or
                                128 bytes
    358    0002AE                      ; is it within Main flash?
    359    0002AE 369000C0             CMP     #USERFLASHSTART,W
    360    0002B2 0528                 JNC     FL_INFO         ; if borrow,
                                                                adr<start, must
                                                                be Info
    361    0002B4 369000D8             CMP     #USERFLASHEND+1,W
    362    0002B8 022C                 JC      FL_INFO         ; if no borrow,
                                                                adr>end, must
                                                                be Info
    363    0002BA 36508001             ADD     #(MAINSEG-INFOSEG),W
    364    0002BE 36508000     FL_INFO: ADD    #INFOSEG,W
    365    0002C2 D03F                 JMP     FLE_1           ; continue till
                                                                past end or
                                                                outside
                                                                limits
    366    0002C4 3744         FLE_X:  MOV     @PSP+,TOS
    367    0002C6                      NEXT
    367.1  0002C6 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    367.2  0002C8 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    367.3  0002CA                      ENDM
    368    0002CA              
    369    0002CA              ; Program Space (Flash) operators 
    370    0002CA              
    371    0002CA              ;Z I!        x a-addr --   store cell in
                                  - 4e-LP430 -                        Page   47

                                Instruction memory
    372    0002CA                      HEADER  ISTORE,2,'I!',DOCODE
    372.1  000000                      PUBLIC  ISTORE
    372.2  0002CA ....                 DW      link
    372.3  0002CC FF                   DB      0FFh       ; not immediate
    372.4  0002CD              link    SET     $
    372.5  0002CD 02                   DB      2
    372.6  0002CE 4921                 DB      'I!'
    372.7  0002D0                      EVEN
    372.8  0002D0                      IF      'DOCODE'='DOCODE'
    372.9  0002D0 ....         ISTORE: DW     $+2
    372.10 0002D2                      ELSE
    372.11 0002D2              ISTORE: DW      DOCODE
    372.12 0002D2                      ENDIF
    372.13 0002D2                      ENDM
    373    0002D2 3644                 MOV     @PSP+,W         ; get data to
                                                                write
    374    0002D4 17B3                 BIT     #1,TOS
    375    0002D6 1F20                 JNZ     IST_X           ; if not even
                                                                address, do not
                                                                write
    376    0002D8 2697                 CMP     @TOS,W
    377    0002DA 1D24                 JZ      IST_X           ; if memory is
                                                                desired value,
                                                                do not
                                                                write
    378    0002DC                      ; is it within Main flash?
    379    0002DC 379000C0             CMP     #USERFLASHSTART,TOS
    380    0002E0 0328                 JNC     IST_INFO        ; if borrow,
                                                                adr<start,
                                                                check if
                                                                Info
    381    0002E2 379000D8             CMP     #USERFLASHEND+1,TOS
    382    0002E6 0628                 JNC     IST_OK          ; if no borrow,
                                                                adr>end, check
                                                                if Info
    383    0002E8              IST_INFO: ; is it within Info flash?
    384    0002E8 37900010             CMP     #INFOSTART,TOS
    385    0002EC 0B28                 JNC     IST_RAM         ; if borrow,
                                                                adr<start,
                                                                assume it's
                                                                RAM
    386    0002EE 37900011             CMP     #INFOEND+1,TOS
    387    0002F2 082C                 JC      IST_RAM         ; if no borrow,
                                                                adr>end, assume
                                                                it's RAM
    388    0002F4              IST_OK: ; Address is either in Main flash, or in
                                Info flash.
    389    0002F4                      ; Byte/word write from flash. 
    390    0002F4                      ; Assumes location to write is already
                                erased
    391    0002F4                      ; Assumes ACCVIE = NMIIE = OFIE = 0,
                                watchdog disabled.
    392    0002F4                      ; Per section 5.3.3 of MSP430 Family
                                User's Guide
    393    0002F4 0212                 PUSH sr
    394    0002F6 32C2                 DINT                    ; Disable
                                                                interrupts
    395    0002F8 B24000A52C01         MOV #FWKEY,&FCTL3       ; Clear
                                                                LOCK
    396    0002FE B24040A52801         MOV #FWKEY+WRT,&FCTL1   ; Enable
                                                                write
    397    000304              IST_RAM: ; If RAM, jump here to write. 
                                FCTL1,FCTL3,EINT are superfluous
    398    000304 87460000             MOV     W,0(TOS)        ; Write word to
                                                                flash
                                                                location
    399    000308 B24000A52801         MOV #FWKEY,&FCTL1       ; Done. Clear
                                                                WRT.
    400    00030E B24010A52C01         MOV #FWKEY+LOCK,&FCTL3  ; Set LOCK
    401    000314              ;        EINT                    ; Enable
                                interrupts
    402    000314 3241                 POP sr
    403    000316 3744         IST_X:  MOV     @PSP+,TOS       ; pop new
                                                                TOS
    404    000318                      NEXT
    404.1  000318 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
                                  - 4e-LP430 -                        Page   48

    404.2  00031A 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    404.3  00031C                      ENDM
    405    00031C              
    406    00031C              ;Z IC!        x a-addr --   store char in
                                Instruction memory
    407    00031C                      HEADER  ICSTORE,3,'IC!',DOCODE
    407.1  000000                      PUBLIC  ICSTORE
    407.2  00031C ....                 DW      link
    407.3  00031E FF                   DB      0FFh       ; not immediate
    407.4  00031F              link    SET     $
    407.5  00031F 03                   DB      3
    407.6  000320 494321               DB      'IC!'
    407.7  000323 00                   EVEN
    407.8  000324                      IF      'DOCODE'='DOCODE'
    407.9  000324 ....         ICSTORE: DW     $+2
    407.10 000326                      ELSE
    407.11 000326              ICSTORE: DW      DOCODE
    407.12 000326                      ENDIF
    407.13 000326                      ENDM
    408    000326 3644                 MOV     @PSP+,W         ; get data to
                                                                write
    409    000328 6697                 CMP.B   @TOS,W
    410    00032A F527                 JZ      IST_X           ; if memory is
                                                                desired value,
                                                                do not
                                                                write
    411    00032C                      ; is it within Main flash?
    412    00032C 379000C0             CMP     #USERFLASHSTART,TOS
    413    000330 0328                 JNC     ICST_INFO       ; if borrow,
                                                                adr<start,
                                                                check if
                                                                Info
    414    000332 379000D8             CMP     #USERFLASHEND+1,TOS
    415    000336 0628                 JNC     ICST_OK         ; if no borrow,
                                                                adr>end, check
                                                                if Info
    416    000338              ICST_INFO: ; is it within Info flash?
    417    000338 37900010             CMP     #INFOSTART,TOS
    418    00033C 0B28                 JNC     ICST_RAM        ; if borrow,
                                                                adr<start,
                                                                assume it's
                                                                RAM
    419    00033E 37900011             CMP     #INFOEND+1,TOS
    420    000342 082C                 JC      ICST_RAM        ; if no borrow,
                                                                adr>end, assume
                                                                it's RAM
    421    000344              ICST_OK: ; Address is either in Main flash, or
                                in Info flash.
    422    000344                      ; Byte/word write from flash. 
    423    000344                      ; Assumes location to write is already
                                erased
    424    000344                      ; Assumes ACCVIE = NMIIE = OFIE = 0,
                                watchdog disabled.
    425    000344                      ; Per section 5.3.3 of MSP430 Family
                                User's Guide
    426    000344 0212                 PUSH sr
    427    000346 32C2                 DINT                    ; Disable
                                                                interrupts
    428    000348 B24000A52C01         MOV #FWKEY,&FCTL3       ; Clear
                                                                LOCK
    429    00034E B24040A52801         MOV #FWKEY+WRT,&FCTL1   ; Enable
                                                                write
    430    000354              ICST_RAM: ; If RAM, jump here to write. 
                                FCTL1,FCTL3,EINT are superfluous
    431    000354 C7460000             MOV.B   W,0(TOS)        ; Write byte to
                                                                flash
                                                                location
    432    000358 B24000A52801         MOV #FWKEY,&FCTL1       ; Done. Clear
                                                                WRT.
    433    00035E B24010A52C01         MOV #FWKEY+LOCK,&FCTL3  ; Set LOCK
    434    000364              ;        EINT                    ; Enable
                                interrupts
    435    000364 3241                 POP sr
    436    000366 D73F                 JMP     IST_X
    437    000368              
    438    000368              /*
    439    000368              ;Z I@       a-addr -- x   fetch cell from
                                  - 4e-LP430 -                        Page   49

                                Instruction memory
    440    000368                      HEADER  IFETCH,2,'I@',FETCH+2
    441    000368              
    442    000368              ;Z IC@       a-addr -- x   fetch char from
                                Instruction memory
    443    000368                      HEADER  ICFETCH,3,'IC@',CFETCH+2
    444    000368              */
    445    000368              #define IFETCH FETCH
    446    000368              #define ICFETCH CFETCH
    447    000368              
    448    000368              
    449    000368              
    450    000368              ;Z D->I     c-addr1 c-addr2 u --  move
                                Data->Code
    451    000368              ; Block move from Data space to Code space. 
                                Flashable.
    452    000368              ; For the MSP430, this uses a "smart" algorithm
                                that uses word writes,
    453    000368              ; rather than byte writes, whenever possible. 
                                Note that byte reads
    454    000368              ; are used for the source, so it need not be
                                aligned.
    455    000368                      HEADER  DTOI,4,'D->I',DOCODE
    455.1  000000                      PUBLIC  DTOI
    455.2  000368 ....                 DW      link
    455.3  00036A FF                   DB      0FFh       ; not immediate
    455.4  00036B              link    SET     $
    455.5  00036B 04                   DB      4
    455.6  00036C 442D3E49             DB      'D->I'
    455.7  000370                      EVEN
    455.8  000370                      IF      'DOCODE'='DOCODE'
    455.9  000370 ....         DTOI: DW     $+2
    455.10 000372                      ELSE
    455.11 000372              DTOI: DW      DOCODE
    455.12 000372                      ENDIF
    455.13 000372                      ENDM
    456    000372 3644                 MOV     @PSP+,W     ; dest adrs
    457    000374 3A44                 MOV     @PSP+,X     ; src adrs
    458    000376 0793                 CMP     #0,TOS
    459    000378 2124                 JZ      DTOI_X
    460    00037A              DTOI_LOOP: ; Begin flash write sequence
    461    00037A 0212                 PUSH sr
    462    00037C 32C2                 DINT                    ; Disable
                                                                interrupts
    463    00037E B24000A52C01         MOV #FWKEY,&FCTL3       ; Clear
                                                                LOCK
    464    000384 B24040A52801         MOV #FWKEY+WRT,&FCTL1   ; Enable
                                                                write
    465    00038A                      ; If length is 1, or dest. address is
                                odd, do a byte write.
    466    00038A                      ; Else, do a word write.
    467    00038A 1793                 CMP     #1,TOS
    468    00038C 0B24                 JZ      DTOI_BYTE
    469    00038E 16B3                 BIT     #1,W
    470    000390 0920                 JNZ     DTOI_BYTE
    471    000392 7B4A         DTOI_WORD: MOV.B @X+,Y          ; get low byte
                                                                of word
    472    000394 7C4A                 MOV.B   @X+,Q           ; get high byte
                                                                of word
    473    000396 8C10                 SWPB    Q
    474    000398 0BDC                 BIS     Q,Y             ; merge
                                                                bytes
    475    00039A 864B0000             MOV.W   Y,0(W)          ; write byte to
                                                                dest 
    476    00039E 2653                 ADD     #2,W
    477    0003A0 1783                 SUB     #1,TOS          ; another 1 will
                                                                be subtracted
                                                                below
    478    0003A2 033C                 JMP     DTOI_END
    479    0003A4 F64A0000     DTOI_BYTE: MOV.B  @X+,0(W)      ; copy byte from
                                                                src to
                                                                dest
    480    0003A8 1653                 ADD     #1,W
    481    0003AA              DTOI_END: ; End flash write sequence
    482    0003AA B24000A52801         MOV #FWKEY,&FCTL1       ; Done. Clear
                                                                WRT.
    483    0003B0 B24010A52C01         MOV #FWKEY+LOCK,&FCTL3  ; Set LOCK
    484    0003B6              ;        EINT                    ; Enable
                                  - 4e-LP430 -                        Page   50

                                interrupts
    485    0003B6 3241                 POP sr
    486    0003B8 1783                 SUB     #1,TOS
    487    0003BA DF23                 JNZ     DTOI_LOOP
    488    0003BC 3744         DTOI_X: MOV     @PSP+,TOS       ; pop new
                                                                TOS
    489    0003BE                      NEXT
    489.1  0003BE 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    489.2  0003C0 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    489.3  0003C2                      ENDM
    490    0003C2              
    491    0003C2              ; ----------------------------------------------
                               ------------------------
    492    0003C2              ; ARITHMETIC OPERATIONS
    493    0003C2              
    494    0003C2              ;C +       n1/u1 n2/u2 -- n3/u3     add
                                n1+n2
    495    0003C2                      HEADER  PLUS,1,'+',DOCODE
    495.1  000000                      PUBLIC  PLUS
    495.2  0003C2 ....                 DW      link
    495.3  0003C4 FF                   DB      0FFh       ; not immediate
    495.4  0003C5              link    SET     $
    495.5  0003C5 01                   DB      1
    495.6  0003C6 2B                   DB      '+'
    495.7  0003C7 00                   EVEN
    495.8  0003C8                      IF      'DOCODE'='DOCODE'
    495.9  0003C8 ....         PLUS: DW     $+2
    495.10 0003CA                      ELSE
    495.11 0003CA              PLUS: DW      DOCODE
    495.12 0003CA                      ENDIF
    495.13 0003CA                      ENDM
    496    0003CA 3754                 ADD     @PSP+,TOS
    497    0003CC                      NEXT
    497.1  0003CC 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    497.2  0003CE 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    497.3  0003D0                      ENDM
    498    0003D0              
    499    0003D0              ;C +!     n/u a-addr --       add cell to
                                memory
    500    0003D0                      HEADER  PLUSSTORE,2,'+!',DOCODE
    500.1  000000                      PUBLIC  PLUSSTORE
    500.2  0003D0 ....                 DW      link
    500.3  0003D2 FF                   DB      0FFh       ; not immediate
    500.4  0003D3              link    SET     $
    500.5  0003D3 02                   DB      2
    500.6  0003D4 2B21                 DB      '+!'
    500.7  0003D6                      EVEN
    500.8  0003D6                      IF      'DOCODE'='DOCODE'
    500.9  0003D6 ....         PLUSSTORE: DW     $+2
    500.10 0003D8                      ELSE
    500.11 0003D8              PLUSSTORE: DW      DOCODE
    500.12 0003D8                      ENDIF
    500.13 0003D8                      ENDM
    501    0003D8 B7540000             ADD     @PSP+,0(TOS)
    502    0003DC 3744                 MOV     @PSP+,TOS
    503    0003DE                      NEXT
    503.1  0003DE 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    503.2  0003E0 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    503.3  0003E2                      ENDM
    504    0003E2              
    505    0003E2              ;X M+       d n -- d         add single to
                                double
    506    0003E2                      HEADER  MPLUS,2,'M+',DOCODE
    506.1  000000                      PUBLIC  MPLUS
    506.2  0003E2 ....                 DW      link
    506.3  0003E4 FF                   DB      0FFh       ; not immediate
    506.4  0003E5              link    SET     $
    506.5  0003E5 02                   DB      2
    506.6  0003E6 4D2B                 DB      'M+'
    506.7  0003E8                      EVEN
    506.8  0003E8                      IF      'DOCODE'='DOCODE'
    506.9  0003E8 ....         MPLUS: DW     $+2
                                  - 4e-LP430 -                        Page   51

    506.10 0003EA                      ELSE
    506.11 0003EA              MPLUS: DW      DOCODE
    506.12 0003EA                      ENDIF
    506.13 0003EA                      ENDM
    507    0003EA 84570200             ADD     TOS,2(PSP)
    508    0003EE 84630000             ADDC    #0,0(PSP)
    509    0003F2 3744                 MOV     @PSP+,TOS
    510    0003F4                      NEXT
    510.1  0003F4 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    510.2  0003F6 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    510.3  0003F8                      ENDM
    511    0003F8              
    512    0003F8              ;C -      n1/u1 n2/u2 -- n3/u3    subtract
                                n1-n2
    513    0003F8                      HEADER  MINUS,1,'-',DOCODE
    513.1  000000                      PUBLIC  MINUS
    513.2  0003F8 ....                 DW      link
    513.3  0003FA FF                   DB      0FFh       ; not immediate
    513.4  0003FB              link    SET     $
    513.5  0003FB 01                   DB      1
    513.6  0003FC 2D                   DB      '-'
    513.7  0003FD 00                   EVEN
    513.8  0003FE                      IF      'DOCODE'='DOCODE'
    513.9  0003FE ....         MINUS: DW     $+2
    513.10 000400                      ELSE
    513.11 000400              MINUS: DW      DOCODE
    513.12 000400                      ENDIF
    513.13 000400                      ENDM
    514    000400 3644                 MOV     @PSP+,W
    515    000402 0687                 SUB     TOS,W
    516    000404 0746                 MOV     W,TOS
    517    000406                      NEXT
    517.1  000406 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    517.2  000408 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    517.3  00040A                      ENDM
    518    00040A              
    519    00040A              ;C AND    x1 x2 -- x3            logical
                                AND
    520    00040A                      HEADER  ANDD,3,'AND',DOCODE
    520.1  000000                      PUBLIC  ANDD
    520.2  00040A ....                 DW      link
    520.3  00040C FF                   DB      0FFh       ; not immediate
    520.4  00040D              link    SET     $
    520.5  00040D 03                   DB      3
    520.6  00040E 414E44               DB      'AND'
    520.7  000411 00                   EVEN
    520.8  000412                      IF      'DOCODE'='DOCODE'
    520.9  000412 ....         ANDD: DW     $+2
    520.10 000414                      ELSE
    520.11 000414              ANDD: DW      DOCODE
    520.12 000414                      ENDIF
    520.13 000414                      ENDM
    521    000414 37F4                 AND     @PSP+,TOS
    522    000416                      NEXT
    522.1  000416 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    522.2  000418 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    522.3  00041A                      ENDM
    523    00041A              
    524    00041A              ;C OR     x1 x2 -- x3           logical
                                OR
    525    00041A                      HEADER  ORR,2,'OR',DOCODE
    525.1  000000                      PUBLIC  ORR
    525.2  00041A ....                 DW      link
    525.3  00041C FF                   DB      0FFh       ; not immediate
    525.4  00041D              link    SET     $
    525.5  00041D 02                   DB      2
    525.6  00041E 4F52                 DB      'OR'
    525.7  000420                      EVEN
    525.8  000420                      IF      'DOCODE'='DOCODE'
    525.9  000420 ....         ORR: DW     $+2
    525.10 000422                      ELSE
    525.11 000422              ORR: DW      DOCODE
                                  - 4e-LP430 -                        Page   52

    525.12 000422                      ENDIF
    525.13 000422                      ENDM
    526    000422 37D4                 BIS     @PSP+,TOS
    527    000424                      NEXT
    527.1  000424 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    527.2  000426 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    527.3  000428                      ENDM
    528    000428              
    529    000428              ;C XOR    x1 x2 -- x3            logical
                                XOR
    530    000428                      HEADER  XORR,3,'XOR',DOCODE
    530.1  000000                      PUBLIC  XORR
    530.2  000428 ....                 DW      link
    530.3  00042A FF                   DB      0FFh       ; not immediate
    530.4  00042B              link    SET     $
    530.5  00042B 03                   DB      3
    530.6  00042C 584F52               DB      'XOR'
    530.7  00042F 00                   EVEN
    530.8  000430                      IF      'DOCODE'='DOCODE'
    530.9  000430 ....         XORR: DW     $+2
    530.10 000432                      ELSE
    530.11 000432              XORR: DW      DOCODE
    530.12 000432                      ENDIF
    530.13 000432                      ENDM
    531    000432 37E4                 XOR     @PSP+,TOS
    532    000434                      NEXT
    532.1  000434 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    532.2  000436 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    532.3  000438                      ENDM
    533    000438              
    534    000438              ;C INVERT   x1 -- x2            bitwise
                                inversion
    535    000438                      HEADER  INVERT,6,'INVERT',DOCODE
    535.1  000000                      PUBLIC  INVERT
    535.2  000438 ....                 DW      link
    535.3  00043A FF                   DB      0FFh       ; not immediate
    535.4  00043B              link    SET     $
    535.5  00043B 06                   DB      6
    535.6  00043C 494E56455254         DB      'INVERT'
    535.7  000442                      EVEN
    535.8  000442                      IF      'DOCODE'='DOCODE'
    535.9  000442 ....         INVERT: DW     $+2
    535.10 000444                      ELSE
    535.11 000444              INVERT: DW      DOCODE
    535.12 000444                      ENDIF
    535.13 000444                      ENDM
    536    000444 37E3                 XOR     #-1,TOS
    537    000446                      NEXT
    537.1  000446 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    537.2  000448 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    537.3  00044A                      ENDM
    538    00044A              
    539    00044A              ;C NEGATE   x1 -- x2            two's complement
    540    00044A                      HEADER  NEGATE,6,'NEGATE',DOCODE
    540.1  000000                      PUBLIC  NEGATE
    540.2  00044A ....                 DW      link
    540.3  00044C FF                   DB      0FFh       ; not immediate
    540.4  00044D              link    SET     $
    540.5  00044D 06                   DB      6
    540.6  00044E 4E4547415445         DB      'NEGATE'
    540.7  000454                      EVEN
    540.8  000454                      IF      'DOCODE'='DOCODE'
    540.9  000454 ....         NEGATE: DW     $+2
    540.10 000456                      ELSE
    540.11 000456              NEGATE: DW      DOCODE
    540.12 000456                      ENDIF
    540.13 000456                      ENDM
    541    000456 37E3                 XOR     #-1,TOS
    542    000458 1753                 ADD     #1,TOS
    543    00045A                      NEXT
    543.1  00045A 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
                                  - 4e-LP430 -                        Page   53

    543.2  00045C 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    543.3  00045E                      ENDM
    544    00045E              
    545    00045E              ;C 1+      n1/u1 -- n2/u2       add 1 to
                                TOS
    546    00045E                      HEADER  ONEPLUS,2,'1+',DOCODE
    546.1  000000                      PUBLIC  ONEPLUS
    546.2  00045E ....                 DW      link
    546.3  000460 FF                   DB      0FFh       ; not immediate
    546.4  000461              link    SET     $
    546.5  000461 02                   DB      2
    546.6  000462 312B                 DB      '1+'
    546.7  000464                      EVEN
    546.8  000464                      IF      'DOCODE'='DOCODE'
    546.9  000464 ....         ONEPLUS: DW     $+2
    546.10 000466                      ELSE
    546.11 000466              ONEPLUS: DW      DOCODE
    546.12 000466                      ENDIF
    546.13 000466                      ENDM
    547    000466 1753                 ADD     #1,TOS
    548    000468                      NEXT
    548.1  000468 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    548.2  00046A 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    548.3  00046C                      ENDM
    549    00046C              
    550    00046C              ;C 1-      n1/u1 -- n2/u2     subtract 1 from
                                TOS
    551    00046C                      HEADER  ONEMINUS,2,'1-',DOCODE
    551.1  000000                      PUBLIC  ONEMINUS
    551.2  00046C ....                 DW      link
    551.3  00046E FF                   DB      0FFh       ; not immediate
    551.4  00046F              link    SET     $
    551.5  00046F 02                   DB      2
    551.6  000470 312D                 DB      '1-'
    551.7  000472                      EVEN
    551.8  000472                      IF      'DOCODE'='DOCODE'
    551.9  000472 ....         ONEMINUS: DW     $+2
    551.10 000474                      ELSE
    551.11 000474              ONEMINUS: DW      DOCODE
    551.12 000474                      ENDIF
    551.13 000474                      ENDM
    552    000474 1783                 SUB     #1,TOS
    553    000476                      NEXT
    553.1  000476 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    553.2  000478 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    553.3  00047A                      ENDM
    554    00047A              
    555    00047A              ;Z ><      x1 -- x2         swap bytes (not
                                ANSI)
    556    00047A                      HEADER  SWAPBYTES,2,'><',DOCODE
    556.1  000000                      PUBLIC  SWAPBYTES
    556.2  00047A ....                 DW      link
    556.3  00047C FF                   DB      0FFh       ; not immediate
    556.4  00047D              link    SET     $
    556.5  00047D 02                   DB      2
    556.6  00047E 3E3C                 DB      '><'
    556.7  000480                      EVEN
    556.8  000480                      IF      'DOCODE'='DOCODE'
    556.9  000480 ....         SWAPBYTES: DW     $+2
    556.10 000482                      ELSE
    556.11 000482              SWAPBYTES: DW      DOCODE
    556.12 000482                      ENDIF
    556.13 000482                      ENDM
    557    000482 8710                 SWPB    TOS
    558    000484                      NEXT
    558.1  000484 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    558.2  000486 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    558.3  000488                      ENDM
    559    000488              
    560    000488              ;C 2*      x1 -- x2         arithmetic left
                                shift
                                  - 4e-LP430 -                        Page   54

    561    000488                      HEADER  TWOSTAR,2,'2*',DOCODE
    561.1  000000                      PUBLIC  TWOSTAR
    561.2  000488 ....                 DW      link
    561.3  00048A FF                   DB      0FFh       ; not immediate
    561.4  00048B              link    SET     $
    561.5  00048B 02                   DB      2
    561.6  00048C 322A                 DB      '2*'
    561.7  00048E                      EVEN
    561.8  00048E                      IF      'DOCODE'='DOCODE'
    561.9  00048E ....         TWOSTAR: DW     $+2
    561.10 000490                      ELSE
    561.11 000490              TWOSTAR: DW      DOCODE
    561.12 000490                      ENDIF
    561.13 000490                      ENDM
    562    000490 0757                 ADD     TOS,TOS
    563    000492                      NEXT
    563.1  000492 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    563.2  000494 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    563.3  000496                      ENDM
    564    000496              
    565    000496              ;C 2/      x1 -- x2        arithmetic right
                                shift
    566    000496                      HEADER  TWOSLASH,2,'2/',DOCODE
    566.1  000000                      PUBLIC  TWOSLASH
    566.2  000496 ....                 DW      link
    566.3  000498 FF                   DB      0FFh       ; not immediate
    566.4  000499              link    SET     $
    566.5  000499 02                   DB      2
    566.6  00049A 322F                 DB      '2/'
    566.7  00049C                      EVEN
    566.8  00049C                      IF      'DOCODE'='DOCODE'
    566.9  00049C ....         TWOSLASH: DW     $+2
    566.10 00049E                      ELSE
    566.11 00049E              TWOSLASH: DW      DOCODE
    566.12 00049E                      ENDIF
    566.13 00049E                      ENDM
    567    00049E 0711                 RRA     TOS
    568    0004A0                      NEXT
    568.1  0004A0 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    568.2  0004A2 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    568.3  0004A4                      ENDM
    569    0004A4              
    570    0004A4              ;C LSHIFT  x1 u -- x2    logical L shift u
                                places
    571    0004A4                      HEADER  LSHIFT,6,'LSHIFT',DOCODE
    571.1  000000                      PUBLIC  LSHIFT
    571.2  0004A4 ....                 DW      link
    571.3  0004A6 FF                   DB      0FFh       ; not immediate
    571.4  0004A7              link    SET     $
    571.5  0004A7 06                   DB      6
    571.6  0004A8 4C5348494654         DB      'LSHIFT'
    571.7  0004AE                      EVEN
    571.8  0004AE                      IF      'DOCODE'='DOCODE'
    571.9  0004AE ....         LSHIFT: DW     $+2
    571.10 0004B0                      ELSE
    571.11 0004B0              LSHIFT: DW      DOCODE
    571.12 0004B0                      ENDIF
    571.13 0004B0                      ENDM
    572    0004B0 3644                 MOV     @PSP+,W
    573    0004B2 37F01F00             AND     #1Fh,TOS        ; no need to
                                                                shift more than
                                                                16
    574    0004B6 0324                 JZ      LSH_X
    575    0004B8 0656         LSH_1:  ADD     W,W
    576    0004BA 1783                 SUB     #1,TOS
    577    0004BC FD23                 JNZ     LSH_1
    578    0004BE 0746         LSH_X:  MOV     W,TOS
    579    0004C0                      NEXT
    579.1  0004C0 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    579.2  0004C2 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    579.3  0004C4                      ENDM
    580    0004C4              
                                  - 4e-LP430 -                        Page   55

    581    0004C4              ;C RSHIFT  x1 u -- x2    logical R shift u
                                places
    582    0004C4                      HEADER  RSHIFT,6,'RSHIFT',DOCODE
    582.1  000000                      PUBLIC  RSHIFT
    582.2  0004C4 ....                 DW      link
    582.3  0004C6 FF                   DB      0FFh       ; not immediate
    582.4  0004C7              link    SET     $
    582.5  0004C7 06                   DB      6
    582.6  0004C8 525348494654         DB      'RSHIFT'
    582.7  0004CE                      EVEN
    582.8  0004CE                      IF      'DOCODE'='DOCODE'
    582.9  0004CE ....         RSHIFT: DW     $+2
    582.10 0004D0                      ELSE
    582.11 0004D0              RSHIFT: DW      DOCODE
    582.12 0004D0                      ENDIF
    582.13 0004D0                      ENDM
    583    0004D0 3644                 MOV     @PSP+,W
    584    0004D2 37F01F00             AND     #1Fh,TOS        ; no need to
                                                                shift more than
                                                                16
    585    0004D6 0424                 JZ      RSH_X
    586    0004D8 12C3         RSH_1:  CLRC
    587    0004DA 0610                 RRC     W
    588    0004DC 1783                 SUB     #1,TOS
    589    0004DE FC23                 JNZ     RSH_1
    590    0004E0 0746         RSH_X:  MOV     W,TOS
    591    0004E2                      NEXT
    591.1  0004E2 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    591.2  0004E4 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    591.3  0004E6                      ENDM
    592    0004E6              
    593    0004E6              ; ----------------------------------------------
                               ------------------------
    594    0004E6              ; COMPARISON OPERATIONS 
    595    0004E6              
    596    0004E6              ;C 0=     n/u -- flag    return true if
                                TOS=0
    597    0004E6                      HEADER ZEROEQUAL,2,'0=',DOCODE
    597.1  000000                      PUBLIC  ZEROEQUAL
    597.2  0004E6 ....                 DW      link
    597.3  0004E8 FF                   DB      0FFh       ; not immediate
    597.4  0004E9              link    SET     $
    597.5  0004E9 02                   DB      2
    597.6  0004EA 303D                 DB      '0='
    597.7  0004EC                      EVEN
    597.8  0004EC                      IF      'DOCODE'='DOCODE'
    597.9  0004EC ....         ZEROEQUAL: DW     $+2
    597.10 0004EE                      ELSE
    597.11 0004EE              ZEROEQUAL: DW      DOCODE
    597.12 0004EE                      ENDIF
    597.13 0004EE                      ENDM
    598    0004EE 1783                 SUB     #1,TOS      ; borrow (clear cy)
                                                            if TOS was
                                                            0
    599    0004F0 0777                 SUBC    TOS,TOS     ; TOS=-1 if borrow
                                                            was set
    600    0004F2                      NEXT
    600.1  0004F2 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    600.2  0004F4 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    600.3  0004F6                      ENDM
    601    0004F6              
    602    0004F6              ;C 0<     n -- flag      true if TOS negative
    603    0004F6                      HEADER ZEROLESS,2,'0<',DOCODE
    603.1  000000                      PUBLIC  ZEROLESS
    603.2  0004F6 ....                 DW      link
    603.3  0004F8 FF                   DB      0FFh       ; not immediate
    603.4  0004F9              link    SET     $
    603.5  0004F9 02                   DB      2
    603.6  0004FA 303C                 DB      '0<'
    603.7  0004FC                      EVEN
    603.8  0004FC                      IF      'DOCODE'='DOCODE'
    603.9  0004FC ....         ZEROLESS: DW     $+2
    603.10 0004FE                      ELSE
    603.11 0004FE              ZEROLESS: DW      DOCODE
                                  - 4e-LP430 -                        Page   56

    603.12 0004FE                      ENDIF
    603.13 0004FE                      ENDM
    604    0004FE 0757                 ADD     TOS,TOS     ; set cy if TOS
                                                            negative
    605    000500 0777                 SUBC    TOS,TOS     ; TOS=-1 if carry
                                                            was clear
    606    000502 37E3                 XOR     #-1,TOS     ; TOS=-1 if carry
                                                            was set
    607    000504                      NEXT
    607.1  000504 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    607.2  000506 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    607.3  000508                      ENDM
    608    000508              
    609    000508              ;C =      x1 x2 -- flag         test x1=x2
    610    000508                      HEADER EQUAL,1,'=',DOCODE
    610.1  000000                      PUBLIC  EQUAL
    610.2  000508 ....                 DW      link
    610.3  00050A FF                   DB      0FFh       ; not immediate
    610.4  00050B              link    SET     $
    610.5  00050B 01                   DB      1
    610.6  00050C 3D                   DB      '='
    610.7  00050D 00                   EVEN
    610.8  00050E                      IF      'DOCODE'='DOCODE'
    610.9  00050E ....         EQUAL: DW     $+2
    610.10 000510                      ELSE
    610.11 000510              EQUAL: DW      DOCODE
    610.12 000510                      ENDIF
    610.13 000510                      ENDM
    611    000510 3644                 MOV     @PSP+,W
    612    000512 0687                 SUB     TOS,W       ; x1-x2 in W, flags
                                                            set
    613    000514 1124                 JZ      TOSTRUE
    614    000516 0743         TOSFALSE: MOV   #0,TOS
    615    000518                      NEXT
    615.1  000518 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    615.2  00051A 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    615.3  00051C                      ENDM
    616    00051C              
    617    00051C              ;X <>     x1 x2 -- flag    test not eq (not
                                ANSI)
    618    00051C                      HEADER NOTEQUAL,2,'<>',DOCOLON
    618.1  000000                      PUBLIC  NOTEQUAL
    618.2  00051C ....                 DW      link
    618.3  00051E FF                   DB      0FFh       ; not immediate
    618.4  00051F              link    SET     $
    618.5  00051F 02                   DB      2
    618.6  000520 3C3E                 DB      '<>'
    618.7  000522                      EVEN
    618.8  000522                      IF      'DOCOLON'='DOCODE'
    618.9  000522              NOTEQUAL: DW     $+2
    618.10 000522                      ELSE
    618.11 000522 ....         NOTEQUAL: DW      DOCOLON
    618.12 000524                      ENDIF
    618.13 000524                      ENDM
    619    000524 ............         DW EQUAL,ZEROEQUAL,EXIT
    620    00052A              
    621    00052A              ;C <      n1 n2 -- flag        test n1<n2,
                                signed
    622    00052A                      HEADER LESS,1,'<',DOCODE
    622.1  000000                      PUBLIC  LESS
    622.2  00052A ....                 DW      link
    622.3  00052C FF                   DB      0FFh       ; not immediate
    622.4  00052D              link    SET     $
    622.5  00052D 01                   DB      1
    622.6  00052E 3C                   DB      '<'
    622.7  00052F 00                   EVEN
    622.8  000530                      IF      'DOCODE'='DOCODE'
    622.9  000530 ....         LESS: DW     $+2
    622.10 000532                      ELSE
    622.11 000532              LESS: DW      DOCODE
    622.12 000532                      ENDIF
    622.13 000532                      ENDM
    623    000532 3644                 MOV     @PSP+,W
    624    000534 0687                 SUB     TOS,W       ; x1-x2 in W, flags
                                  - 4e-LP430 -                        Page   57

                                                            set
    625    000536 EF37                 JGE     TOSFALSE
    626    000538 3743         TOSTRUE: MOV    #-1,TOS
    627    00053A                      NEXT
    627.1  00053A 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    627.2  00053C 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    627.3  00053E                      ENDM
    628    00053E              
    629    00053E              ;C >     n1 n2 -- flag         test n1>n2,
                                signed
    630    00053E                      HEADER GREATER,1,'>',DOCOLON
    630.1  000000                      PUBLIC  GREATER
    630.2  00053E ....                 DW      link
    630.3  000540 FF                   DB      0FFh       ; not immediate
    630.4  000541              link    SET     $
    630.5  000541 01                   DB      1
    630.6  000542 3E                   DB      '>'
    630.7  000543 00                   EVEN
    630.8  000544                      IF      'DOCOLON'='DOCODE'
    630.9  000544              GREATER: DW     $+2
    630.10 000544                      ELSE
    630.11 000544 ....         GREATER: DW      DOCOLON
    630.12 000546                      ENDIF
    630.13 000546                      ENDM
    631    000546 ............         DW SWAP,LESS,EXIT
    632    00054C              
    633    00054C              ;C U<    u1 u2 -- flag       test u1<u2,
                                unsigned
    634    00054C                      HEADER ULESS,2,'U<',DOCODE
    634.1  000000                      PUBLIC  ULESS
    634.2  00054C ....                 DW      link
    634.3  00054E FF                   DB      0FFh       ; not immediate
    634.4  00054F              link    SET     $
    634.5  00054F 02                   DB      2
    634.6  000550 553C                 DB      'U<'
    634.7  000552                      EVEN
    634.8  000552                      IF      'DOCODE'='DOCODE'
    634.9  000552 ....         ULESS: DW     $+2
    634.10 000554                      ELSE
    634.11 000554              ULESS: DW      DOCODE
    634.12 000554                      ENDIF
    634.13 000554                      ENDM
    635    000554 3644                 MOV     @PSP+,W
    636    000556 0687                 SUB     TOS,W       ; u1-u2 in W, cy
                                                            clear if borrow
    637    000558 EF2B                 JNC     TOSTRUE
    638    00055A DD3F                 JMP     TOSFALSE
    639    00055C              
    640    00055C              ;X U>    u1 u2 -- flag     u1>u2 unsgd (not
                                ANSI)
    641    00055C                      HEADER UGREATER,2,'U>',DOCOLON
    641.1  000000                      PUBLIC  UGREATER
    641.2  00055C ....                 DW      link
    641.3  00055E FF                   DB      0FFh       ; not immediate
    641.4  00055F              link    SET     $
    641.5  00055F 02                   DB      2
    641.6  000560 553E                 DB      'U>'
    641.7  000562                      EVEN
    641.8  000562                      IF      'DOCOLON'='DOCODE'
    641.9  000562              UGREATER: DW     $+2
    641.10 000562                      ELSE
    641.11 000562 ....         UGREATER: DW      DOCOLON
    641.12 000564                      ENDIF
    641.13 000564                      ENDM
    642    000564 ............         DW SWAP,ULESS,EXIT
    643    00056A                      
    644    00056A              ;C RLA    n1 -- n2 f   rotate left through
                                carry, true if carry set
    645    00056A                      HEADER  RLAA,3,'RLA',DOCODE
    645.1  000000                      PUBLIC  RLAA
    645.2  00056A ....                 DW      link
    645.3  00056C FF                   DB      0FFh       ; not immediate
    645.4  00056D              link    SET     $
    645.5  00056D 03                   DB      3
    645.6  00056E 524C41               DB      'RLA'
    645.7  000571 00                   EVEN
                                  - 4e-LP430 -                        Page   58

    645.8  000572                      IF      'DOCODE'='DOCODE'
    645.9  000572 ....         RLAA: DW     $+2
    645.10 000574                      ELSE
    645.11 000574              RLAA: DW      DOCODE
    645.12 000574                      ENDIF
    645.13 000574                      ENDM
    646    000574 0757                 RLA TOS         ; shift left 
    647    000576 0212                 PUSH SR
    648    000578 2483                 SUB #2,PSP      ; 1  push old TOS..
    649    00057A 84470000             MOV TOS,0(PSP)      ; 4  ..onto
                                                            stack
    650    00057E 3241                 POP SR
    651    000580 DB2F                 JC TOSTRUE
    652    000582 C93F                 JMP TOSFALSE
    653    000584              
    654    000584              
    655    000584              
    656    000584              ; ----------------------------------------------
                               ------------------------
    657    000584              ; LOOP AND BRANCH OPERATIONS 
    658    000584              ; These use relative branch addresses: a branch
                                is ADD @IP,IP
    659    000584              
    660    000584              ;Z branch   --                  branch
                                always
    661    000584                      HEADER  bran,6,'branch',DOCODE
    661.1  000000                      PUBLIC  bran
    661.2  000584 ....                 DW      link
    661.3  000586 FF                   DB      0FFh       ; not immediate
    661.4  000587              link    SET     $
    661.5  000587 06                   DB      6
    661.6  000588 6272616E6368         DB      'branch'
    661.7  00058E                      EVEN
    661.8  00058E                      IF      'DOCODE'='DOCODE'
    661.9  00058E ....         bran: DW     $+2
    661.10 000590                      ELSE
    661.11 000590              bran: DW      DOCODE
    661.12 000590                      ENDIF
    661.13 000590                      ENDM
    662    000590 2555         dobran:  ADD @IP,IP   ; 2
    663    000592                      NEXT            ; 4
    663.1  000592 3645                 MOV @IP+,W     // ; fetch word address
                                                            into W
    663.2  000594 3046                 MOV @W+,PC     // ; fetch code address
                                                            into PC, W=PFA
    663.3  000596                      ENDM
    664    000596              
    665    000596              ;Z ?branch   x --              branch if TOS
                                zero
    666    000596                      HEADER  qbran,7,'?branch',DOCODE
    666.1  000000                      PUBLIC  qbran
    666.2  000596 ....                 DW      link
    666.3  000598 FF                   DB      0FFh       ; not immediate
    666.4  000599              link    SET     $
    666.5  000599 07                   DB      7
    666.6  00059A 3F6272616E63*        DB      '?branch'
    666.7  0005A1 00                   EVEN
    666.8  0005A2                      IF      'DOCODE'='DOCODE'
    666.9  0005A2 ....         qbran: DW     $+2
    666.10 0005A4                      ELSE
    666.11 0005A4              qbran: DW      DOCODE
    666.12 0005A4                      ENDIF
    666.13 0005A4                      ENDM
    667    0005A4 0753                 ADD #0,TOS      ; 1  test TOS value
    668    0005A6 3744                 MOV @PSP+,TOS   ; 2  pop new TOS value
                                                        (doesn't change
                                                        flags)
    669    0005A8 F327                 JZ  dobran    ; 2  if TOS was zero, take
                                                      the branch
    670    0005AA 2553                 ADD #2,IP       ; 1  else skip the
                                                        branch destination
    671    0005AC                      NEXT            ; 4
    671.1  0005AC 3645                 MOV @IP+,W     // ; fetch word address
                                                            into W
    671.2  0005AE 3046                 MOV @W+,PC     // ; fetch code address
                                                            into PC, W=PFA
    671.3  0005B0                      ENDM
    672    0005B0              
                                  - 4e-LP430 -                        Page   59

    673    0005B0              ;Z (do)    n1|u1 n2|u2 -- R: -- sys1 sys2       
                                   run-time code for DO
    674    0005B0              ; '83 and ANSI standard loops terminate when the
                                boundary of 
    675    0005B0              ; limit-1 and limit is crossed, in either
                                direction.  This can 
    676    0005B0              ; be conveniently implemented by making the
                                limit 8000h, so that
    677    0005B0              ; arithmetic overflow logic can detect crossing.
                                 I learned this 
    678    0005B0              ; trick from Laxen & Perry F83.
    679    0005B0              ; fudge factor = 8000h-limit, to be added to the
                                start value.
    680    0005B0                      HEADER  xdo,4,'(do)',DOCODE
    680.1  000000                      PUBLIC  xdo
    680.2  0005B0 ....                 DW      link
    680.3  0005B2 FF                   DB      0FFh       ; not immediate
    680.4  0005B3              link    SET     $
    680.5  0005B3 04                   DB      4
    680.6  0005B4 28646F29             DB      '(do)'
    680.7  0005B8                      EVEN
    680.8  0005B8                      IF      'DOCODE'='DOCODE'
    680.9  0005B8 ....         xdo: DW     $+2
    680.10 0005BA                      ELSE
    680.11 0005BA              xdo: DW      DOCODE
    680.12 0005BA                      ENDIF
    680.13 0005BA                      ENDM
    681    0005BA 2182                 SUB     #4,RSP          ; push old loop
                                                                values on
                                                                return
                                                                stack
    682    0005BC 81490200             MOV     LIMIT,2(RSP)
    683    0005C0 81480000             MOV     INDEX,0(RSP)
    684    0005C4 39400080             MOV     #8000h,LIMIT    ; compute
                                                                8000h-limit
                                                                "fudge
                                                                factor"
    685    0005C8 3984                 SUB     @PSP+,LIMIT
    686    0005CA 0847                 MOV     TOS,INDEX       ; loop ctr =
                                                                index+fudge
    687    0005CC 0859                 ADD     LIMIT,INDEX
    688    0005CE 3744                 MOV     @PSP+,TOS       ; pop new
                                                                TOS
    689    0005D0                      NEXT
    689.1  0005D0 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    689.2  0005D2 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    689.3  0005D4                      ENDM
    690    0005D4              
    691    0005D4              ;Z (loop)   R: sys1 sys2 -- | sys1 sys2         
                                 run-time code for LOOP
    692    0005D4              ; Add 1 to the loop index.  If loop terminates,
                                clean up the 
    693    0005D4              ; return stack and skip the branch.  Else take
                                the inline branch.  
    694    0005D4              ; Note that LOOP terminates when index=8000h.
    695    0005D4                      HEADER  xloop,6,'(loop)',DOCODE
    695.1  000000                      PUBLIC  xloop
    695.2  0005D4 ....                 DW      link
    695.3  0005D6 FF                   DB      0FFh       ; not immediate
    695.4  0005D7              link    SET     $
    695.5  0005D7 06                   DB      6
    695.6  0005D8 286C6F6F7029         DB      '(loop)'
    695.7  0005DE                      EVEN
    695.8  0005DE                      IF      'DOCODE'='DOCODE'
    695.9  0005DE ....         xloop: DW     $+2
    695.10 0005E0                      ELSE
    695.11 0005E0              xloop: DW      DOCODE
    695.12 0005E0                      ENDIF
    695.13 0005E0                      ENDM
    696    0005E0 1853                 ADD     #1,INDEX
    697    0005E2 32B00001             BIT     #100h,SR    ; is overflow bit
                                                            set?
    698    0005E6 D427                 JZ      dobran    ; no overflow =
                                                          loop
    699    0005E8 2553                 ADD     #2,IP       ; overflow = loop
                                                            done, skip branch
                                  - 4e-LP430 -                        Page   60

                                                            ofs
    700    0005EA 3841                 MOV     @RSP+,INDEX ; restore old loop
                                                            values
    701    0005EC 3941                 MOV     @RSP+,LIMIT
    702    0005EE                      NEXT
    702.1  0005EE 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    702.2  0005F0 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    702.3  0005F2                      ENDM
    703    0005F2              
    704    0005F2              ;Z (+loop)   n -- R: sys1 sys2 -- | sys1 sys2   
                                    run-time code for +LOOP
    705    0005F2              ; Add n to the loop index.  If loop terminates,
                                clean up the 
    706    0005F2              ; return stack and skip the branch. Else take
                                the inline branch.
    707    0005F2                      HEADER  xplusloop,7,'(+loop)',DOCODE
    707.1  000000                      PUBLIC  xplusloop
    707.2  0005F2 ....                 DW      link
    707.3  0005F4 FF                   DB      0FFh       ; not immediate
    707.4  0005F5              link    SET     $
    707.5  0005F5 07                   DB      7
    707.6  0005F6 282B6C6F6F70*        DB      '(+loop)'
    707.7  0005FD 00                   EVEN
    707.8  0005FE                      IF      'DOCODE'='DOCODE'
    707.9  0005FE ....         xplusloop: DW     $+2
    707.10 000600                      ELSE
    707.11 000600              xplusloop: DW      DOCODE
    707.12 000600                      ENDIF
    707.13 000600                      ENDM
    708    000600 0857                 ADD     TOS,INDEX
    709    000602 3744                 MOV     @PSP+,TOS   ; get new TOS,
                                                            doesn't change
                                                            flags
    710    000604 32B00001             BIT     #100h,SR    ; is overflow bit
                                                            set?
    711    000608 C327                 JZ      dobran    ; no overflow =
                                                          loop
    712    00060A 2553                 ADD     #2,IP       ; overflow = loop
                                                            done, skip branch
                                                            ofs
    713    00060C 3841                 MOV     @RSP+,INDEX ; restore old loop
                                                            values
    714    00060E 3941                 MOV     @RSP+,LIMIT
    715    000610                      NEXT
    715.1  000610 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    715.2  000612 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    715.3  000614                      ENDM
    716    000614              
    717    000614              ;C I        -- n R: sys1 sys2 -- sys1 sys2      
                                 get the innermost loop index
    718    000614                      HEADER  II,1,'I',DOCODE
    718.1  000000                      PUBLIC  II
    718.2  000614 ....                 DW      link
    718.3  000616 FF                   DB      0FFh       ; not immediate
    718.4  000617              link    SET     $
    718.5  000617 01                   DB      1
    718.6  000618 49                   DB      'I'
    718.7  000619 00                   EVEN
    718.8  00061A                      IF      'DOCODE'='DOCODE'
    718.9  00061A ....         II: DW     $+2
    718.10 00061C                      ELSE
    718.11 00061C              II: DW      DOCODE
    718.12 00061C                      ENDIF
    718.13 00061C                      ENDM
    719    00061C 2483                 SUB     #2,PSP          ; make room in
                                                                TOS
    720    00061E 84470000             MOV     TOS,0(PSP)
    721    000622 0748                 MOV     INDEX,TOS       ; index =
                                                                loopctr -
                                                                fudge
    722    000624 0789                 SUB     LIMIT,TOS
    723    000626                      NEXT
    723.1  000626 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
                                  - 4e-LP430 -                        Page   61

    723.2  000628 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    723.3  00062A                      ENDM
    724    00062A              
    725    00062A              ;C J        -- n R: 4*sys -- 4*sys              
                                  get the second loop index
    726    00062A                      HEADER  JJ,1,'J',DOCODE
    726.1  000000                      PUBLIC  JJ
    726.2  00062A ....                 DW      link
    726.3  00062C FF                   DB      0FFh       ; not immediate
    726.4  00062D              link    SET     $
    726.5  00062D 01                   DB      1
    726.6  00062E 4A                   DB      'J'
    726.7  00062F 00                   EVEN
    726.8  000630                      IF      'DOCODE'='DOCODE'
    726.9  000630 ....         JJ: DW     $+2
    726.10 000632                      ELSE
    726.11 000632              JJ: DW      DOCODE
    726.12 000632                      ENDIF
    726.13 000632                      ENDM
    727    000632 2483                 SUB     #2,PSP          ; make room in
                                                                TOS
    728    000634 84470000             MOV     TOS,0(PSP)
    729    000638 2741                 MOV     @RSP,TOS        ; index =
                                                                loopctr -
                                                                fudge
    730    00063A 17810200             SUB     2(RSP),TOS
    731    00063E                      NEXT
    731.1  00063E 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    731.2  000640 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    731.3  000642                      ENDM
    732    000642              
    733    000642              ;C UNLOOP    -- R: sys1 sys2 --                 
                                  drop loop parms
    734    000642                      HEADER  UNLOOP,6,'UNLOOP',DOCODE
    734.1  000000                      PUBLIC  UNLOOP
    734.2  000642 ....                 DW      link
    734.3  000644 FF                   DB      0FFh       ; not immediate
    734.4  000645              link    SET     $
    734.5  000645 06                   DB      6
    734.6  000646 554E4C4F4F50         DB      'UNLOOP'
    734.7  00064C                      EVEN
    734.8  00064C                      IF      'DOCODE'='DOCODE'
    734.9  00064C ....         UNLOOP: DW     $+2
    734.10 00064E                      ELSE
    734.11 00064E              UNLOOP: DW      DOCODE
    734.12 00064E                      ENDIF
    734.13 00064E                      ENDM
    735    00064E 3841                 MOV     @RSP+,INDEX     ; restore old
                                                                loop values
    736    000650 3941                 MOV     @RSP+,LIMIT
    737    000652                      NEXT
    737.1  000652 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    737.2  000654 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    737.3  000656                      ENDM
    738    000656              
    739    000656              ; ----------------------------------------------
                               ------------------------
    740    000656              ; MULTIPLY AND DIVIDE
    741    000656              
    742    000656              ;C UM*     u1 u2 -- ud      unsigned 16x16->32
                                mult.
    743    000656                      HEADER  UMSTAR,3,'UM*',DOCODE
    743.1  000000                      PUBLIC  UMSTAR
    743.2  000656 ....                 DW      link
    743.3  000658 FF                   DB      0FFh       ; not immediate
    743.4  000659              link    SET     $
    743.5  000659 03                   DB      3
    743.6  00065A 554D2A               DB      'UM*'
    743.7  00065D 00                   EVEN
    743.8  00065E                      IF      'DOCODE'='DOCODE'
    743.9  00065E ....         UMSTAR: DW     $+2
    743.10 000660                      ELSE
    743.11 000660              UMSTAR: DW      DOCODE
                                  - 4e-LP430 -                        Page   62

    743.12 000660                      ENDIF
    743.13 000660                      ENDM
    744    000660                      ; IROP1 = TOS register
    745    000660 2A44                 MOV     @PSP,IROP2L     ; get u1, leave
                                                                room on
                                                                stack
    746    000662              ;
    747    000662              ; T.I. SIGNED MULTIPLY SUBROUTINE: IROP1 x
                                IROP2L -> IRACM|IRACL
    748    000662 0C43         MPYU:   CLR IRACL ; 0 -> LSBs RESULT
    749    000664 0D43                 CLR IRACM ; 0 -> MSBs RESULT
    750    000666              ; UNSIGNED MULTIPLY AND ACCUMULATE SUBROUTINE:
    751    000666              ; (IROP1 x IROP2L) + IRACM|IRACL -> IRACM|IRACL
    752    000666 0B43         MACU:   CLR IROP2M  ; MSBs MULTIPLIER
    753    000668 1643                 MOV #1,IRBT ; BIT TEST REGISTER
    754    00066A 07B6         L$002:  BIT IRBT,IROP1 ; TEST ACTUAL BIT
    755    00066C 0224                 JZ L$01     ; IF 0: DO NOTHING
    756    00066E 0C5A                 ADD IROP2L,IRACL ; IF 1: ADD MULTIPLIER
                                                         TO RESULT
    757    000670 0D6B                 ADDC IROP2M,IRACM
    758    000672 0A5A         L$01:   RLA IROP2L  ; MULTIPLIER x 2
    759    000674 0B6B                 RLC IROP2M
    760    000676              ;
    761    000676 0656                 RLA IRBT    ; NEXT BIT TO TEST
    762    000678 F82B                 JNC L$002   ; IF BIT IN CARRY:
                                                    FINISHED
    763    00067A              ; END T.I. ROUTINE  section 5.1.1 of MSP430
                                Family Application Reports
    764    00067A 844C0000             MOV     IRACL,0(PSP)    ; low result on
                                                                stack
    765    00067E 074D                 MOV     IRACM,TOS       ; high result in
                                                                TOS
    766    000680                      NEXT
    766.1  000680 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    766.2  000682 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    766.3  000684                      ENDM
    767    000684              
    768    000684              ;C UM/MOD   ud u1 -- u2 u3   unsigned 32/16->16
    769    000684                      HEADER  UMSLASHMOD,6,'UM/MOD',DOCODE
    769.1  000000                      PUBLIC  UMSLASHMOD
    769.2  000684 ....                 DW      link
    769.3  000686 FF                   DB      0FFh       ; not immediate
    769.4  000687              link    SET     $
    769.5  000687 06                   DB      6
    769.6  000688 554D2F4D4F44         DB      'UM/MOD'
    769.7  00068E                      EVEN
    769.8  00068E                      IF      'DOCODE'='DOCODE'
    769.9  00068E ....         UMSLASHMOD: DW     $+2
    769.10 000690                      ELSE
    769.11 000690              UMSLASHMOD: DW      DOCODE
    769.12 000690                      ENDIF
    769.13 000690                      ENDM
    770    000690                      ; IROP1 = TOS register
    771    000690 3B44                 MOV     @PSP+,IROP2M    ; get ud
                                                                hi
    772    000692 2A44                 MOV     @PSP,IROP2L     ; get ud lo,
                                                                leave room on
                                                                stack
    773    000694              ;
    774    000694              ; T.I. UNSIGNED DIVISION SUBROUTINE 32-BIT BY
                                16-BIT
    775    000694              ; IROP2M|IROP2L : IROP1 -> IRACL REMAINDER IN
                                IROP2M
    776    000694              ; RETURN: CARRY = 0: OK CARRY = 1: QUOTIENT > 16
                                BITS
    777    000694 0C43         DIVIDE: CLR IRACL   ; CLEAR RESULT
    778    000696 36401100             MOV #17,IRBT ; INITIALIZE LOOP
                                                     COUNTER
    779    00069A 0B97         DIV1:   CMP IROP1,IROP2M ;
    780    00069C 0128                 JLO DIV2
    781    00069E 0B87                 SUB IROP1,IROP2M
    782    0006A0 0C6C         DIV2:   RLC IRACL
    783    0006A2 092C                 JC DIV4     ; Error: result > 16
                                                    bits
    784    0006A4 1683                 DEC IRBT    ; Decrement loop counter
    785    0006A6 0624                 JZ DIV3     ; Is 0: terminate w/o
                                  - 4e-LP430 -                        Page   63

                                                    error
    786    0006A8 0A5A                 RLA IROP2L
    787    0006AA 0B6B                 RLC IROP2M
    788    0006AC F62B                 JNC DIV1
    789    0006AE 0B87                 SUB IROP1,IROP2M
    790    0006B0 12D3                 SETC
    791    0006B2 F63F                 JMP DIV2
    792    0006B4 12C3         DIV3:   CLRC        ; No error, C = 0
    793    0006B6              DIV4:   ; Error indication in C
    794    0006B6              ; END T.I. ROUTINE  Section 5.1.5 of MSP430
                                Family Application Reports
    795    0006B6 844B0000             MOV     IROP2M,0(PSP)   ; remainder on
                                                                stack
    796    0006BA 074C                 MOV     IRACL,TOS       ; quotient in
                                                                TOS
    797    0006BC                      NEXT
    797.1  0006BC 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    797.2  0006BE 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    797.3  0006C0                      ENDM
    798    0006C0              
    799    0006C0              ; ----------------------------------------------
                               ------------------------
    800    0006C0              ; BLOCK AND STRING OPERATIONS
    801    0006C0              
    802    0006C0              ;C FILL   c-addr u char --  fill memory with
                                char
    803    0006C0                      HEADER  FILL,4,'FILL',DOCODE
    803.1  000000                      PUBLIC  FILL
    803.2  0006C0 ....                 DW      link
    803.3  0006C2 FF                   DB      0FFh       ; not immediate
    803.4  0006C3              link    SET     $
    803.5  0006C3 04                   DB      4
    803.6  0006C4 46494C4C             DB      'FILL'
    803.7  0006C8                      EVEN
    803.8  0006C8                      IF      'DOCODE'='DOCODE'
    803.9  0006C8 ....         FILL: DW     $+2
    803.10 0006CA                      ELSE
    803.11 0006CA              FILL: DW      DOCODE
    803.12 0006CA                      ENDIF
    803.13 0006CA                      ENDM
    804    0006CA 3A44                 MOV     @PSP+,X     ; count
    805    0006CC 3644                 MOV     @PSP+,W     ; address
    806    0006CE 0A93                 CMP     #0,X
    807    0006D0 0524                 JZ      FILL_X
    808    0006D2 C6470000     FILL_1: MOV.B   TOS,0(W)    ; store char in
                                                            memory
    809    0006D6 1653                 ADD     #1,W
    810    0006D8 1A83                 SUB     #1,X
    811    0006DA FB23                 JNZ     FILL_1
    812    0006DC 3744         FILL_X: MOV     @PSP+,TOS   ; pop new TOS
    813    0006DE                      NEXT
    813.1  0006DE 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    813.2  0006E0 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    813.3  0006E2                      ENDM
    814    0006E2              
    815    0006E2              ;X CMOVE   c-addr1 c-addr2 u --  move from
                                bottom
    816    0006E2              ; as defined in the ANSI optional String word
                                set
    817    0006E2              ; On byte machines, CMOVE and CMOVE> are
                                logical
    818    0006E2              ; factors of MOVE.  They are easy to implement
                                on
    819    0006E2              ; CPUs which have a block-move instruction.
    820    0006E2                      HEADER  CMOVE,5,'CMOVE',DOCODE
    820.1  000000                      PUBLIC  CMOVE
    820.2  0006E2 ....                 DW      link
    820.3  0006E4 FF                   DB      0FFh       ; not immediate
    820.4  0006E5              link    SET     $
    820.5  0006E5 05                   DB      5
    820.6  0006E6 434D4F5645           DB      'CMOVE'
    820.7  0006EB 00                   EVEN
    820.8  0006EC                      IF      'DOCODE'='DOCODE'
    820.9  0006EC ....         CMOVE: DW     $+2
                                  - 4e-LP430 -                        Page   64

    820.10 0006EE                      ELSE
    820.11 0006EE              CMOVE: DW      DOCODE
    820.12 0006EE                      ENDIF
    820.13 0006EE                      ENDM
    821    0006EE 3644                 MOV     @PSP+,W     ; dest adrs
    822    0006F0 3A44                 MOV     @PSP+,X     ; src adrs
    823    0006F2 0793                 CMP     #0,TOS
    824    0006F4 0524                 JZ      CMOVE_X
    825    0006F6 F64A0000     CMOVE_1: MOV.B  @X+,0(W)    ; copy byte
    826    0006FA 1653                 ADD     #1,W
    827    0006FC 1783                 SUB     #1,TOS
    828    0006FE FB23                 JNZ     CMOVE_1
    829    000700 3744         CMOVE_X: MOV    @PSP+,TOS   ; pop new TOS
    830    000702                      NEXT
    830.1  000702 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    830.2  000704 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    830.3  000706                      ENDM
    831    000706              
    832    000706              ;X CMOVE>  c-addr1 c-addr2 u --  move from
                                top
    833    000706              ; as defined in the ANSI optional String word
                                set
    834    000706                      HEADER  CMOVEUP,6,'CMOVE>',DOCODE
    834.1  000000                      PUBLIC  CMOVEUP
    834.2  000706 ....                 DW      link
    834.3  000708 FF                   DB      0FFh       ; not immediate
    834.4  000709              link    SET     $
    834.5  000709 06                   DB      6
    834.6  00070A 434D4F56453E         DB      'CMOVE>'
    834.7  000710                      EVEN
    834.8  000710                      IF      'DOCODE'='DOCODE'
    834.9  000710 ....         CMOVEUP: DW     $+2
    834.10 000712                      ELSE
    834.11 000712              CMOVEUP: DW      DOCODE
    834.12 000712                      ENDIF
    834.13 000712                      ENDM
    835    000712 3644                 MOV     @PSP+,W     ; dest adrs
    836    000714 3A44                 MOV     @PSP+,X     ; src adrs
    837    000716 0793                 CMP     #0,TOS
    838    000718 0824                 JZ      CMOVU_X
    839    00071A 0657                 ADD     TOS,W       ; start at
                                                            end
    840    00071C 0A57                 ADD     TOS,X
    841    00071E 1A83         CMOVU_1: SUB    #1,X
    842    000720 1683                 SUB     #1,W
    843    000722 E64A0000             MOV.B   @X,0(W)     ; copy byte
    844    000726 1783                 SUB     #1,TOS
    845    000728 FA23                 JNZ     CMOVU_1
    846    00072A 3744         CMOVU_X: MOV    @PSP+,TOS   ; pop new TOS
    847    00072C                      NEXT
    847.1  00072C 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    847.2  00072E 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    847.3  000730                      ENDM
    848    000730              
    849    000730              ;Z I->D     c-addr1 c-addr2 u --      move
                                Code->Data
    850    000730              ; Block move from Code space to Data space.
    851    000730              ; On the MSP430, this is the same as CMOVE.
    852    000730                     HEADER  ITOD,4,'I->D',CMOVE+2
    852.1  000000                      PUBLIC  ITOD
    852.2  000730 ....                 DW      link
    852.3  000732 FF                   DB      0FFh       ; not immediate
    852.4  000733              link    SET     $
    852.5  000733 04                   DB      4
    852.6  000734 492D3E44             DB      'I->D'
    852.7  000738                      EVEN
    852.8  000738                      IF      'CMOVE+2'='DOCODE'
    852.9  000738              ITOD: DW     $+2
    852.10 000738                      ELSE
    852.11 000738 ....         ITOD: DW      CMOVE+2
    852.12 00073A                      ENDIF
    852.13 00073A                      ENDM
    853    00073A              
    854    00073A              ;Z SKIP   c-addr u c -- c-addr' u'              
                                  - 4e-LP430 -                        Page   65

                                      skip matching chars
    855    00073A              ; Although SKIP, SCAN, and S= are perhaps not
                                the ideal factors 
    856    00073A              ; of WORD and FIND, they closely follow the
                                string operations 
    857    00073A              ; available on many CPUs, and so are easy to
                                implement and fast.
    858    00073A                      HEADER  SKIP,4,'SKIP',DOCODE
    858.1  000000                      PUBLIC  SKIP
    858.2  00073A ....                 DW      link
    858.3  00073C FF                   DB      0FFh       ; not immediate
    858.4  00073D              link    SET     $
    858.5  00073D 04                   DB      4
    858.6  00073E 534B4950             DB      'SKIP'
    858.7  000742                      EVEN
    858.8  000742                      IF      'DOCODE'='DOCODE'
    858.9  000742 ....         SKIP: DW     $+2
    858.10 000744                      ELSE
    858.11 000744              SKIP: DW      DOCODE
    858.12 000744                      ENDIF
    858.13 000744                      ENDM
    859    000744 3A44                 MOV     @PSP+,X     ; get count
    860    000746 2644                 MOV     @PSP,W      ; get address, leave
                                                            space on stack
    861    000748 0A93                 CMP     #0,X
    862    00074A 0524                 JZ      SKIP_X
    863    00074C 6796         SKIP_1: CMP.B   @W,TOS      ; does character
                                                            match?
    864    00074E 0320                 JNZ     SKIP_X      ; no, we are
                                                            done
    865    000750 1653                 ADD     #1,W
    866    000752 1A83                 SUB     #1,X
    867    000754 FB23                 JNZ     SKIP_1
    868    000756 84460000     SKIP_X: MOV     W,0(PSP)    ; store updated
                                                            address on
                                                            stack
    869    00075A 074A                 MOV     X,TOS       ; updated count to
                                                            TOS
    870    00075C                      NEXT
    870.1  00075C 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    870.2  00075E 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    870.3  000760                      ENDM
    871    000760              
    872    000760              ;Z SCAN    c-addr u c -- c-addr' u'             
                                       find matching char
    873    000760                      HEADER  SCAN,4,'SCAN',DOCODE
    873.1  000000                      PUBLIC  SCAN
    873.2  000760 ....                 DW      link
    873.3  000762 FF                   DB      0FFh       ; not immediate
    873.4  000763              link    SET     $
    873.5  000763 04                   DB      4
    873.6  000764 5343414E             DB      'SCAN'
    873.7  000768                      EVEN
    873.8  000768                      IF      'DOCODE'='DOCODE'
    873.9  000768 ....         SCAN: DW     $+2
    873.10 00076A                      ELSE
    873.11 00076A              SCAN: DW      DOCODE
    873.12 00076A                      ENDIF
    873.13 00076A                      ENDM
    874    00076A 3A44                 MOV     @PSP+,X     ; get count
    875    00076C 2644                 MOV     @PSP,W      ; get address, leave
                                                            space on stack
    876    00076E 0A93                 CMP     #0,X
    877    000770 0524                 JZ      SCAN_X
    878    000772 6796         SCAN_1: CMP.B   @W,TOS      ; does character
                                                            match?
    879    000774 0324                 JZ      SCAN_X      ; yes, we are
                                                            done
    880    000776 1653                 ADD     #1,W
    881    000778 1A83                 SUB     #1,X
    882    00077A FB23                 JNZ     SCAN_1
    883    00077C 84460000     SCAN_X: MOV     W,0(PSP)    ; store updated
                                                            address on
                                                            stack
    884    000780 074A                 MOV     X,TOS       ; updated count to
                                                            TOS
                                  - 4e-LP430 -                        Page   66

    885    000782                      NEXT
    885.1  000782 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    885.2  000784 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    885.3  000786                      ENDM
    886    000786              
    887    000786              ;Z S=    c-addr1 c-addr2 u -- n   string
                                compare
    888    000786              ;Z S=    n<0: s1<s2, n=0: s1=s2, n>0: s1>s2
    889    000786                      HEADER  SEQUAL,2,'S=',DOCODE
    889.1  000000                      PUBLIC  SEQUAL
    889.2  000786 ....                 DW      link
    889.3  000788 FF                   DB      0FFh       ; not immediate
    889.4  000789              link    SET     $
    889.5  000789 02                   DB      2
    889.6  00078A 533D                 DB      'S='
    889.7  00078C                      EVEN
    889.8  00078C                      IF      'DOCODE'='DOCODE'
    889.9  00078C ....         SEQUAL: DW     $+2
    889.10 00078E                      ELSE
    889.11 00078E              SEQUAL: DW      DOCODE
    889.12 00078E                      ENDIF
    889.13 00078E                      ENDM
    890    00078E 3644                 MOV     @PSP+,W     ; adrs2
    891    000790 3A44                 MOV     @PSP+,X     ; adrs1
    892    000792 0793                 CMP     #0,TOS
    893    000794 0A24                 JZ      SEQU_X
    894    000796 FA960000     SEQU_1: CMP.B   @W+,0(X)    ; compare char1-char
                                                           2
    895    00079A 0420                 JNZ     SMISMATCH
    896    00079C 1A53                 ADD     #1,X
    897    00079E 1783                 SUB     #1,TOS
    898    0007A0 FA23                 JNZ     SEQU_1
    899    0007A2                      ; no mismatch found, strings are equal,
                                TOS=0
    900    0007A2 033C                 JMP     SEQU_X
    901    0007A4                      ; mismatch found, CY clear if borrow set
                                (s1<s2)
    902    0007A4 0777         SMISMATCH: SUBC TOS,TOS     ; TOS=-1 if borrow
                                                            was set
    903    0007A6 0757                 ADD     TOS,TOS     ; TOS=-2 or
                                                            0
    904    0007A8 1753                 ADD     #1,TOS      ; TOS=-1 or
                                                            +1
    905    0007AA              SEQU_X: NEXT                ; return result in
                                TOS
    905.1  0007AA 3645                 MOV @IP+,W     // ; fetch word address
  into W
    905.2  0007AC 3046                 MOV @W+,PC     // ; fetch code address
  into PC, W=PFA
    905.3  0007AE                      ENDM
    906    0007AE              
    907    0007AE              ;Z N=    c-addr1 c-addr2 u -- n   name
                                compare
    908    0007AE              ;Z N=    n<0: s1<s2, n=0: s1=s2, n>0: s1>s2
    909    0007AE              ; For Harvard model, c-addr1 is Data, c-addr2 is
                                Header.
    910    0007AE              ; On MSP430, both use the same fetch instruction
                               , so N= is the same as S=.
    911    0007AE                      HEADER  NEQUAL,2,'N=',SEQUAL+2
    911.1  000000                      PUBLIC  NEQUAL
    911.2  0007AE ....                 DW      link
    911.3  0007B0 FF                   DB      0FFh       ; not immediate
    911.4  0007B1              link    SET     $
    911.5  0007B1 02                   DB      2
    911.6  0007B2 4E3D                 DB      'N='
    911.7  0007B4                      EVEN
    911.8  0007B4                      IF      'SEQUAL+2'='DOCODE'
    911.9  0007B4              NEQUAL: DW     $+2
    911.10 0007B4                      ELSE
    911.11 0007B4 ....         NEQUAL: DW      SEQUAL+2
    911.12 0007B6                      ENDIF
    911.13 0007B6                      ENDM
    912    0007B6              
    913    0007B6              ; ----------------------------------------------
                               ------------------------
    914    0007B6              ; TERMINAL I/O
                                  - 4e-LP430 -                        Page   67

    915    0007B6              
    916    000000              PUBLIC DOKEY,DOEMIT
    917    0007B6              
    918    0007B6              /*
    919    0007B6              ;C EMIT     c --    output character to console;
                                core routine
    920    0007B6                      HEADER  EMIT,4,'EMIT',DOCODE
    921    0007B6              EMITLOOP:
    922    0007B6                      BIT.B   #UCA0TXIFG,&IFG2
    923    0007B6                      JZ      EMITLOOP
    924    0007B6                      MOV.B   TOS,&UCA0TXBUF 
    925    0007B6                      MOV @PSP+,TOS
    926    0007B6                      NEXT
    927    0007B6              
    928    0007B6              ;C KEY      -- c      get character from
                                keyboard; core routine
    929    0007B6                      HEADER  KEY,3,'KEY',DOCODE
    930    0007B6              KEYLOOP:
    931    0007B6                      BIT.B   #UCA0RXIFG,&IFG2
    932    0007B6                      JZ      KEYLOOP
    933    0007B6                      SUB     #2,PSP          ; 1  push old
                                TOS..
    934    0007B6                      MOV     TOS,0(PSP)      ; 4  ..onto
                                stack
    935    0007B6                      MOV.B   &UCA0RXBUF,TOS    ; read
                                character into TOS
    936    0007B6              donoop1:
    937    0007B6              donext1: NEXT
    938    0007B6              */
    939    0007B6              
    940    0007B6              ;C (EMIT)     c --    output character to
                                console; core routine
    941    0007B6                      HEADER  DOEMIT,6,'(EMIT)',DOCODE
    941.1  0007B6                      PUBLIC  DOEMIT
    941.2  0007B6 ....                 DW      link
    941.3  0007B8 FF                   DB      0FFh       ; not immediate
    941.4  0007B9              link    SET     $
    941.5  0007B9 06                   DB      6
    941.6  0007BA 28454D495429         DB      '(EMIT)'
    941.7  0007C0                      EVEN
    941.8  0007C0                      IF      'DOCODE'='DOCODE'
    941.9  0007C0 ....         DOEMIT: DW     $+2
    941.10 0007C2                      ELSE
    941.11 0007C2              DOEMIT: DW      DOCODE
    941.12 0007C2                      ENDIF
    941.13 0007C2                      ENDM
    942    0007C2              EMITLOOPx:
    943    0007C2 E2B30300             BIT.B   #UCA0TXIFG,&IFG2
    944    0007C6 FD27                 JZ      EMITLOOPx
    945    0007C8 C2476700             MOV.B   TOS,&UCA0TXBUF 
    946    0007CC 3744                 MOV @PSP+,TOS
    947    0007CE                      NEXT
    947.1  0007CE 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    947.2  0007D0 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    947.3  0007D2                      ENDM
    948    0007D2              
    949    0007D2              ;C (KEY)      -- c      get character from
                                keyboard; core routine
    950    0007D2                      HEADER  DOKEY,5,'(KEY)',DOCODE
    950.1  0007D2                      PUBLIC  DOKEY
    950.2  0007D2 ....                 DW      link
    950.3  0007D4 FF                   DB      0FFh       ; not immediate
    950.4  0007D5              link    SET     $
    950.5  0007D5 05                   DB      5
    950.6  0007D6 284B455929           DB      '(KEY)'
    950.7  0007DB 00                   EVEN
    950.8  0007DC                      IF      'DOCODE'='DOCODE'
    950.9  0007DC ....         DOKEY: DW     $+2
    950.10 0007DE                      ELSE
    950.11 0007DE              DOKEY: DW      DOCODE
    950.12 0007DE                      ENDIF
    950.13 0007DE                      ENDM
    951    0007DE              KEYLOOPx:
    952    0007DE D2B30300             BIT.B   #UCA0RXIFG,&IFG2
    953    0007E2 FD27                 JZ      KEYLOOPx
    954    0007E4 2483                 SUB     #2,PSP          ; 1  push old
                                  - 4e-LP430 -                        Page   68

                                                                TOS..
    955    0007E6 84470000             MOV     TOS,0(PSP)      ; 4  ..onto
                                                                stack
    956    0007EA 57426600             MOV.B   &UCA0RXBUF,TOS    ; read
                                                                  character
                                                                  into
                                                                  TOS
    957    0007EE              donoop:
    958    0007EE              donext: NEXT
    958.1  0007EE 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    958.2  0007F0 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    958.3  0007F2                      ENDM
    959    0007F2              
    960    0007F2              
    961    0007F2              ;C KEY      -- c      get character from
                                keyboard; vectored
    962    0007F2                      HEADER  KEY,3,'KEY',DOCOLON
    962.1  000000                      PUBLIC  KEY
    962.2  0007F2 ....                 DW      link
    962.3  0007F4 FF                   DB      0FFh       ; not immediate
    962.4  0007F5              link    SET     $
    962.5  0007F5 03                   DB      3
    962.6  0007F6 4B4559               DB      'KEY'
    962.7  0007F9 00                   EVEN
    962.8  0007FA                      IF      'DOCOLON'='DOCODE'
    962.9  0007FA              KEY: DW     $+2
    962.10 0007FA                      ELSE
    962.11 0007FA ....         KEY: DW      DOCOLON
    962.12 0007FC                      ENDIF
    962.13 0007FC                      ENDM
    963    0007FC ............*          DW USERKEY,FETCH,EXECUTE,EXIT
    964    000804              
    965    000804              ;C EMIT       c --    output character to
                                console; vectored
    966    000804                      HEADER  EMIT,4,'EMIT',DOCOLON
    966.1  000000                      PUBLIC  EMIT
    966.2  000804 ....                 DW      link
    966.3  000806 FF                   DB      0FFh       ; not immediate
    966.4  000807              link    SET     $
    966.5  000807 04                   DB      4
    966.6  000808 454D4954             DB      'EMIT'
    966.7  00080C                      EVEN
    966.8  00080C                      IF      'DOCOLON'='DOCODE'
    966.9  00080C              EMIT: DW     $+2
    966.10 00080C                      ELSE
    966.11 00080C ....         EMIT: DW      DOCOLON
    966.12 00080E                      ENDIF
    966.13 00080E                      ENDM
    967    00080E ............*          DW USEREMIT,FETCH,EXECUTE,EXIT
    968    000816              
    969    000816              
    970    000816              ;X KEY?     -- f    return true if char
                                waiting
    971    000816                      HEADER  KEYQ,4,'KEY?',DOCODE
    971.1  000000                      PUBLIC  KEYQ
    971.2  000816 ....                 DW      link
    971.3  000818 FF                   DB      0FFh       ; not immediate
    971.4  000819              link    SET     $
    971.5  000819 04                   DB      4
    971.6  00081A 4B45593F             DB      'KEY?'
    971.7  00081E                      EVEN
    971.8  00081E                      IF      'DOCODE'='DOCODE'
    971.9  00081E ....         KEYQ: DW     $+2
    971.10 000820                      ELSE
    971.11 000820              KEYQ: DW      DOCODE
    971.12 000820                      ENDIF
    971.13 000820                      ENDM
    972    000820 2483                 SUB     #2,PSP          ; 1  push old
                                                                TOS..
    973    000822 84470000             MOV     TOS,0(PSP)      ; 4  ..onto
                                                                stack
    974    000826 D2B30300             BIT.B   #UCA0RXIFG,&IFG2
    975    00082A 8622                 JNZ     TOSTRUE
    976    00082C 743E                 JMP     TOSFALSE
    977    00082E              
    978    00082E              ;X ZERO     -- 0      put zero on stack. Often
                                  - 4e-LP430 -                        Page   69

                                usesd word.
    979    00082E                      HEADER  ZERO,4,'ZERO',DOCON
    979.1  000000                      PUBLIC  ZERO
    979.2  00082E ....                 DW      link
    979.3  000830 FF                   DB      0FFh       ; not immediate
    979.4  000831              link    SET     $
    979.5  000831 04                   DB      4
    979.6  000832 5A45524F             DB      'ZERO'
    979.7  000836                      EVEN
    979.8  000836                      IF      'DOCON'='DOCODE'
    979.9  000836              ZERO: DW     $+2
    979.10 000836                      ELSE
    979.11 000836 ....         ZERO: DW      DOCON
    979.12 000838                      ENDIF
    979.13 000838                      ENDM
    980    000838 0000                   DW 0
    981    00083A                        
    982    00083A              /*
    983    00083A              ; ----------------------------------------------
                               ------------------------
    984    00083A              ; We #include the following source files, rather
                                than compiling them 
    985    00083A              ; separately, so that they can inherit the value
                                of 'link'.
    986    00083A              
    987    00083A              #include "4e-deps430G2553.s43"
    988    00083A              #include "4e-hilvl430G2553.s43"
    989    00083A              #include "4e-startup.s43" 
    990    00083A              #include "4e-vecarea.s43"
    991    00083A              #include "4e-LaunchPad.s43"
    992    00083A              #include "4e-onewire.s43"
    993    00083A              #include "4e-LPM.s43"
    994    00083A              ;   #include "4e-WAS430G2553.s43"
    995    00083A              
    996    00083A              
    997    00083A              /*
    998    00083A              ; DEBUG FORTH EXECUTION 
    999    00083A              ; debug serieal
   1000    00083A                PUBLIC DEBUGIP
   1001    00083A              DEBUGIP: 
   1002    00083A              ;  DW  DOTID
   1003    00083A              DEBUG1: 
   1004    00083A              ;   DW TASK
   1005    00083A                 DW  KEY  ; 1@A0 test 1=rot,@=grün,A=beide,0=a
                               us
   1006    00083A                 DW  DUP  ;,DOTS,CR
   1007    00083A                 DW  STORELEDS
   1008    00083A              ;   DW  COLD
   1009    00083A                 DW  EMIT 
   1010    00083A                 DW  lit,0,qbran
   1011    00083A                 DW  DEBUG1-$
   1012    00083A                 DW  bran,-2
   1013    00083A              
   1014    00083A              /*
   1015    00083A              ; debugging only
   1016    00083A                HEADLESS CREATE,DOCOLON
   1017    00083A                HEADLESS ALLOT,DOCOLON
   1018    00083A                HEADLESS BUILDS,DOCOLON
   1019    00083A                HEADLESS ICOMMA,DOCOLON
   1020    00083A                HEADLESS XDOES,DOCOLON
   1021    00083A                HEADLESS IHERE,DOCOLON
   1022    00083A                HEADLESS IALLOT,DOCOLON
   1023    00083A                HEADLESS CELL,DOCOLON
   1024    00083A                HEADLESS PJOUT,DOCOLON
   1025    00083A              
   1026    00083A              
   1027    00083A              
   1028    00083A              PUBLIC lastword
   1029    00083A              lastword equ link
   1030    00083A              
   1031    00083A              ; for debug map only:
   1032    00083A              CamelForthEnd:
   1033    00083A              
   1034    00083A                      END
   1035    00083A              */
     66    00083A              #include "4e-deps430G2553.s43"
      1    00083A              ; ----------------------------------------------
                               ------------------------
                                  - 4e-LP430 -                        Page   70

      2    00083A              ; 4e4th is a Forth based on CamelForth
                                
      3    00083A              ; for the Texas Instruments MSP430 
      4    00083A              ; 
      5    00083A              ; This program is free software; you can
                                redistribute it and/or modify
      6    00083A              ; it under the terms of the GNU General Public
                                License as published by
      7    00083A              ; the Free Software Foundation; either version 3
                                of the License, or
      8    00083A              ; (at your option) any later version.
      9    00083A              ; 
     10    00083A              ; This program is distributed in the hope that
                                it will be useful,
     11    00083A              ; but WITHOUT ANY WARRANTY; without even the
                                implied warranty of
     12    00083A              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
                                PURPOSE.  See the
     13    00083A              ; GNU General Public License for more details.
     14    00083A              ;
     15    00083A              ; You should have received a copy of the GNU
                                General Public License
     16    00083A              ; along with this program.  If not, see
                                <http://www.gnu.org/licenses/>.
     17    00083A              ; 
     18    00083A              ; See LICENSE TERMS in Brads file readme.txt as
                                well.
     19    00083A              
     20    00083A              ; ----------------------------------------------
                               ------------------------
     21    00083A              ; 4e-deps430.s43: CPU and Model Dependencies -
                                MSP430G2553
     22    00083A              ; ----------------------------------------------
                               ------------------------
     23    00083A              
     24    00083A              ;   Forth words are documented as follows:
     25    00083A              ;x   NAME     stack -- stack    description
     26    00083A              ;   where x=C for ANS Forth Core words, X for
                                ANS
     27    00083A              ;   Extensions, Z for internal or private
                                words.
     28    00083A              ;
     29    00083A              ; Indirect-Threaded Forth model for T.I.
                                MSP430
     30    00083A              ;   cell size is   16 bits (2 bytes)
     31    00083A              ;   char size is    8 bits (1 byte)
     32    00083A              ;   address unit is 8 bits (1 byte), i.e.,
                                addresses are byte-aligned.
     33    00083A              ; ----------------------------------------------
                               ------------------------
     34    00083A              
     35    00083A              ; ----------------------------------------------
                               ------------------------
     36    00083A              ; ALIGNMENT AND PORTABILITY OPERATORS 
     37    00083A              ; Many of these are synonyms for other
                                words,
     38    00083A              ; and so are defined as CODE words.
     39    00083A              
     40    00083A              ;C ALIGN    --                         align
                                HERE
     41    00083A              ;   IHERE 1 AND IALLOT ;
     42    00083A                      HEADER  ALIGNN,5,'ALIGN',DOCOLON
     42.1  000000                      PUBLIC  ALIGNN
     42.2  00083A ....                 DW      link
     42.3  00083C FF                   DB      0FFh       ; not immediate
     42.4  00083D              link    SET     $
     42.5  00083D 05                   DB      5
     42.6  00083E 414C49474E           DB      'ALIGN'
     42.7  000843 00                   EVEN
     42.8  000844                      IF      'DOCOLON'='DOCODE'
     42.9  000844              ALIGNN: DW     $+2
     42.10 000844                      ELSE
     42.11 000844 ....         ALIGNN: DW      DOCOLON
     42.12 000846                      ENDIF
     42.13 000846                      ENDM
     43    000846 ........0100*        DW  IHERE,lit,1,ANDD,IALLOT,EXIT
     44    000852              
     45    000852              ;C ALIGNED  addr -- a-addr       align given
                                  - 4e-LP430 -                        Page   71

                                addr
     46    000852              ;   DUP 1 AND + ;
     47    000852                      HEADER  ALIGNED,7,'ALIGNED',DOCOLON
     47.1  000000                      PUBLIC  ALIGNED
     47.2  000852 ....                 DW      link
     47.3  000854 FF                   DB      0FFh       ; not immediate
     47.4  000855              link    SET     $
     47.5  000855 07                   DB      7
     47.6  000856 414C49474E45*        DB      'ALIGNED'
     47.7  00085D 00                   EVEN
     47.8  00085E                      IF      'DOCOLON'='DOCODE'
     47.9  00085E              ALIGNED: DW     $+2
     47.10 00085E                      ELSE
     47.11 00085E ....         ALIGNED: DW      DOCOLON
     47.12 000860                      ENDIF
     47.13 000860                      ENDM
     48    000860 ........0100*        DW  DUP,lit,1,ANDD,PLUS,EXIT
     49    00086C              
     50    00086C              ;Z CELL     -- n                 size of one
                                cell
     51    00086C                      HEADER  CELL,4,'CELL',DOCON
     51.1  000000                      PUBLIC  CELL
     51.2  00086C ....                 DW      link
     51.3  00086E FF                   DB      0FFh       ; not immediate
     51.4  00086F              link    SET     $
     51.5  00086F 04                   DB      4
     51.6  000870 43454C4C             DB      'CELL'
     51.7  000874                      EVEN
     51.8  000874                      IF      'DOCON'='DOCODE'
     51.9  000874              CELL: DW     $+2
     51.10 000874                      ELSE
     51.11 000874 ....         CELL: DW      DOCON
     51.12 000876                      ENDIF
     51.13 000876                      ENDM
     52    000876 0200                 dw 2
     53    000878              
     54    000878              ;C CELL+    a-addr1 -- a-addr2      add cell
                                size
     55    000878              ;   2 + ;
     56    000878                      HEADER  CELLPLUS,5,'CELL+',DOCODE
     56.1  000000                      PUBLIC  CELLPLUS
     56.2  000878 ....                 DW      link
     56.3  00087A FF                   DB      0FFh       ; not immediate
     56.4  00087B              link    SET     $
     56.5  00087B 05                   DB      5
     56.6  00087C 43454C4C2B           DB      'CELL+'
     56.7  000881 00                   EVEN
     56.8  000882                      IF      'DOCODE'='DOCODE'
     56.9  000882 ....         CELLPLUS: DW     $+2
     56.10 000884                      ELSE
     56.11 000884              CELLPLUS: DW      DOCODE
     56.12 000884                      ENDIF
     56.13 000884                      ENDM
     57    000884 2753                 ADD     #2,TOS
     58    000886 B33F                 JMP     donext
     59    000888              
     60    000888              ;C CELLS    n1 -- n2            cells->adrs
                                units
     61    000888                      HEADER  CELLS,5,'CELLS',TWOSTAR+2
     61.1  000000                      PUBLIC  CELLS
     61.2  000888 ....                 DW      link
     61.3  00088A FF                   DB      0FFh       ; not immediate
     61.4  00088B              link    SET     $
     61.5  00088B 05                   DB      5
     61.6  00088C 43454C4C53           DB      'CELLS'
     61.7  000891 00                   EVEN
     61.8  000892                      IF      'TWOSTAR+2'='DOCODE'
     61.9  000892              CELLS: DW     $+2
     61.10 000892                      ELSE
     61.11 000892 ....         CELLS: DW      TWOSTAR+2
     61.12 000894                      ENDIF
     61.13 000894                      ENDM
     62    000894              
     63    000894              ;C CHAR+    c-addr1 -- c-addr2   add char
                                size
     64    000894                      HEADER  CHARPLUS,5,'CHAR+',ONEPLUS+2
     64.1  000000                      PUBLIC  CHARPLUS
     64.2  000894 ....                 DW      link
                                  - 4e-LP430 -                        Page   72

     64.3  000896 FF                   DB      0FFh       ; not immediate
     64.4  000897              link    SET     $
     64.5  000897 05                   DB      5
     64.6  000898 434841522B           DB      'CHAR+'
     64.7  00089D 00                   EVEN
     64.8  00089E                      IF      'ONEPLUS+2'='DOCODE'
     64.9  00089E              CHARPLUS: DW     $+2
     64.10 00089E                      ELSE
     64.11 00089E ....         CHARPLUS: DW      ONEPLUS+2
     64.12 0008A0                      ENDIF
     64.13 0008A0                      ENDM
     65    0008A0              
     66    0008A0              ;C CHARS    n1 -- n2            chars->adrs
                                units
     67    0008A0                      HEADER  CHARS,5,'CHARS',donoop
     67.1  000000                      PUBLIC  CHARS
     67.2  0008A0 ....                 DW      link
     67.3  0008A2 FF                   DB      0FFh       ; not immediate
     67.4  0008A3              link    SET     $
     67.5  0008A3 05                   DB      5
     67.6  0008A4 4348415253           DB      'CHARS'
     67.7  0008A9 00                   EVEN
     67.8  0008AA                      IF      'donoop'='DOCODE'
     67.9  0008AA              CHARS: DW     $+2
     67.10 0008AA                      ELSE
     67.11 0008AA ....         CHARS: DW      donoop
     67.12 0008AC                      ENDIF
     67.13 0008AC                      ENDM
     68    0008AC              
     69    0008AC              ;C >BODY    xt -- a-addr      adrs of CREATE
                                data
     70    0008AC              ;   2+ ;                   8086 (3 byte
                                CALL)
     71    0008AC                      HEADER  TOBODY,5,'>BODY',CELLPLUS+2
     71.1  000000                      PUBLIC  TOBODY
     71.2  0008AC ....                 DW      link
     71.3  0008AE FF                   DB      0FFh       ; not immediate
     71.4  0008AF              link    SET     $
     71.5  0008AF 05                   DB      5
     71.6  0008B0 3E424F4459           DB      '>BODY'
     71.7  0008B5 00                   EVEN
     71.8  0008B6                      IF      'CELLPLUS+2'='DOCODE'
     71.9  0008B6              TOBODY: DW     $+2
     71.10 0008B6                      ELSE
     71.11 0008B6 ....         TOBODY: DW      CELLPLUS+2
     71.12 0008B8                      ENDIF
     71.13 0008B8                      ENDM
     72    0008B8              
     73    0008B8              ;X COMPILE,  xt --         append execution
                                token
     74    0008B8              ; I called this word ,XT before I discovered
                                that it is defined in the 
     75    0008B8              ; ANSI standard as COMPILE,. On a DTC Forth this
                                simply appends xt 
     76    0008B8              ; (like , ) but on an STC Forth this must append
                                'CALL xt'.
     77    0008B8                      HEADER  COMMAXT,8,'COMPILE,',DOALIAS
     77.1  000000                      PUBLIC  COMMAXT
     77.2  0008B8 ....                 DW      link
     77.3  0008BA FF                   DB      0FFh       ; not immediate
     77.4  0008BB              link    SET     $
     77.5  0008BB 08                   DB      8
     77.6  0008BC 434F4D50494C*        DB      'COMPILE,'
     77.7  0008C4                      EVEN
     77.8  0008C4                      IF      'DOALIAS'='DOCODE'
     77.9  0008C4              COMMAXT: DW     $+2
     77.10 0008C4                      ELSE
     77.11 0008C4 ....         COMMAXT: DW      DOALIAS
     77.12 0008C6                      ENDIF
     77.13 0008C6                      ENDM
     78    0008C6 ....                 DW  ICOMMA
     79    0008C8              
     80    0008C8              ;Z !CF    adrs cfa --   set code action of a
                                word
     81    0008C8              ;   I! ;  
     82    0008C8              ; Indirect threaded model just stores adrs in
                                cfa field.
     83    0008C8                      HEADER  STORECF,3,'!CF',DOALIAS
                                  - 4e-LP430 -                        Page   73

     83.1  000000                      PUBLIC  STORECF
     83.2  0008C8 ....                 DW      link
     83.3  0008CA FF                   DB      0FFh       ; not immediate
     83.4  0008CB              link    SET     $
     83.5  0008CB 03                   DB      3
     83.6  0008CC 214346               DB      '!CF'
     83.7  0008CF 00                   EVEN
     83.8  0008D0                      IF      'DOALIAS'='DOCODE'
     83.9  0008D0              STORECF: DW     $+2
     83.10 0008D0                      ELSE
     83.11 0008D0 ....         STORECF: DW      DOALIAS
     83.12 0008D2                      ENDIF
     83.13 0008D2                      ENDM
     84    0008D2 ....                 DW  ISTORE
     85    0008D4              
     86    0008D4              ;Z ,CF    adrs --       append a code field
     87    0008D4              ;   IHERE !CF 2 IALLOT ;  MSP430 VERSION (2
                                bytes)
     88    0008D4                      HEADER  COMMACF,3,',CF',DOCOLON
     88.1  000000                      PUBLIC  COMMACF
     88.2  0008D4 ....                 DW      link
     88.3  0008D6 FF                   DB      0FFh       ; not immediate
     88.4  0008D7              link    SET     $
     88.5  0008D7 03                   DB      3
     88.6  0008D8 2C4346               DB      ',CF'
     88.7  0008DB 00                   EVEN
     88.8  0008DC                      IF      'DOCOLON'='DOCODE'
     88.9  0008DC              COMMACF: DW     $+2
     88.10 0008DC                      ELSE
     88.11 0008DC ....         COMMACF: DW      DOCOLON
     88.12 0008DE                      ENDIF
     88.13 0008DE                      ENDM
     89    0008DE ............*        DW IHERE,STORECF,lit,2,IALLOT,EXIT
     90    0008EA              
     91    0008EA              ;Z ,CALL  adrs --       append a subroutine
                                CALL
     92    0008EA              ; MSP430:  128x is call, Ad=11, Dreg=0000 (PC) 
                                thus append 12B0,adrs.
     93    0008EA                      HEADER  COMMACALL,5,',CALL',DOCOLON
     93.1  000000                      PUBLIC  COMMACALL
     93.2  0008EA ....                 DW      link
     93.3  0008EC FF                   DB      0FFh       ; not immediate
     93.4  0008ED              link    SET     $
     93.5  0008ED 05                   DB      5
     93.6  0008EE 2C43414C4C           DB      ',CALL'
     93.7  0008F3 00                   EVEN
     93.8  0008F4                      IF      'DOCOLON'='DOCODE'
     93.9  0008F4              COMMACALL: DW     $+2
     93.10 0008F4                      ELSE
     93.11 0008F4 ....         COMMACALL: DW      DOCOLON
     93.12 0008F6                      ENDIF
     93.13 0008F6                      ENDM
     94    0008F6 ....B012....*        DW lit,12B0h,ICOMMA,ICOMMA,EXIT
     95    000900              
     96    000900              ;Z ,JMP   adrs --       append an absolute
                                16-bit JMP  (MOV #xx,PC)
     97    000900              ; MSP430:  opcode 4, Sreg=0000, Ad=0, As=11
                                (immed), Dreg=0000 (PC)  
     98    000900              ; thus append 4030,adrs.
     99    000900                      HEADER  COMMAJMP,4,',JMP',DOCOLON
     99.1  000000                      PUBLIC  COMMAJMP
     99.2  000900 ....                 DW      link
     99.3  000902 FF                   DB      0FFh       ; not immediate
     99.4  000903              link    SET     $
     99.5  000903 04                   DB      4
     99.6  000904 2C4A4D50             DB      ',JMP'
     99.7  000908                      EVEN
     99.8  000908                      IF      'DOCOLON'='DOCODE'
     99.9  000908              COMMAJMP: DW     $+2
     99.10 000908                      ELSE
     99.11 000908 ....         COMMAJMP: DW      DOCOLON
     99.12 00090A                      ENDIF
     99.13 00090A                      ENDM
    100    00090A ....3040....*        DW lit,4030h,ICOMMA,ICOMMA,EXIT
    101    000914              
    102    000914              ;Z !COLON   --      change code field to
                                DOCOLON
    103    000914              ;   -2 IALLOT DOCOLON-adrs ,CF ;
                                  - 4e-LP430 -                        Page   74

    104    000914              ; This should be used immediately after
                                CREATE.
    105    000914              ; This is made a distinct word, because on an
                                STC
    106    000914              ; Forth, colon definitions have no code
                                field.
    107    000914                      HEADER  STORCOLON,6,'!COLON',DOCOLON
    107.1  000000                      PUBLIC  STORCOLON
    107.2  000914 ....                 DW      link
    107.3  000916 FF                   DB      0FFh       ; not immediate
    107.4  000917              link    SET     $
    107.5  000917 06                   DB      6
    107.6  000918 21434F4C4F4E         DB      '!COLON'
    107.7  00091E                      EVEN
    107.8  00091E                      IF      'DOCOLON'='DOCODE'
    107.9  00091E              STORCOLON: DW     $+2
    107.10 00091E                      ELSE
    107.11 00091E ....         STORCOLON: DW      DOCOLON
    107.12 000920                      ENDIF
    107.13 000920                      ENDM
    108    000920 ....FEFF....         DW lit,-2,IALLOT
    109    000926 ............*        DW lit,DOCOLON,COMMACF,EXIT
    110    00092E              
    111    00092E              ;Z ,EXIT    --      append hi-level EXIT
                                action
    112    00092E              ;   ['] EXIT ,XT ;
    113    00092E              ; This is made a distinct word, because on an
                                STC
    114    00092E              ; Forth, it appends a RET instruction, not an
                                xt.
    115    00092E                      HEADER  CEXIT,5,',EXIT',DOCOLON
    115.1  000000                      PUBLIC  CEXIT
    115.2  00092E ....                 DW      link
    115.3  000930 FF                   DB      0FFh       ; not immediate
    115.4  000931              link    SET     $
    115.5  000931 05                   DB      5
    115.6  000932 2C45584954           DB      ',EXIT'
    115.7  000937 00                   EVEN
    115.8  000938                      IF      'DOCOLON'='DOCODE'
    115.9  000938              CEXIT: DW     $+2
    115.10 000938                      ELSE
    115.11 000938 ....         CEXIT: DW      DOCOLON
    115.12 00093A                      ENDIF
    115.13 00093A                      ENDM
    116    00093A ............*        DW lit,EXIT,COMMAXT,EXIT
    117    000942              
    118    000942              ; ----------------------------------------------
                               ------------------------
    119    000942              ; CONTROL STRUCTURES 
    120    000942              ; These words allow Forth control structure
                                words
    121    000942              ; to be defined portably.
    122    000942              
    123    000942              ;Z ,BRANCH   xt --    append a branch instructio
                               n
    124    000942              ; xt is the branch operator to use, e.g. qbranch
                                or (loop).  
    125    000942              ; It does NOT append the destination address. 
                                
    126    000942              ; On the MSP430 this is equivalent to ,XT
                                (above).
    127    000942                      HEADER  COMMABRANCH,7,',BRANCH',DOALIAS
    127.1  000000                      PUBLIC  COMMABRANCH
    127.2  000942 ....                 DW      link
    127.3  000944 FF                   DB      0FFh       ; not immediate
    127.4  000945              link    SET     $
    127.5  000945 07                   DB      7
    127.6  000946 2C4252414E43*        DB      ',BRANCH'
    127.7  00094D 00                   EVEN
    127.8  00094E                      IF      'DOALIAS'='DOCODE'
    127.9  00094E              COMMABRANCH: DW     $+2
    127.10 00094E                      ELSE
    127.11 00094E ....         COMMABRANCH: DW      DOALIAS
    127.12 000950                      ENDIF
    127.13 000950                      ENDM
    128    000950 ....                 DW  ICOMMA
    129    000952              
    130    000952              ;Z ,DEST   dest --        append a branch
                                  - 4e-LP430 -                        Page   75

                                address
    131    000952              ;   IHERE - , ;
    132    000952              ; This appends the given destination address to
                                the branch instruction. 
    133    000952              ; The MSP430 uses relative addressing from the
                                location of the offset cell,
    134    000952              ; i.e., to branch to FOO the offset cell at $
                                contains FOO-$.
    135    000952                      HEADER  COMMADEST,5,',DEST',DOCOLON
    135.1  000000                      PUBLIC  COMMADEST
    135.2  000952 ....                 DW      link
    135.3  000954 FF                   DB      0FFh       ; not immediate
    135.4  000955              link    SET     $
    135.5  000955 05                   DB      5
    135.6  000956 2C44455354           DB      ',DEST'
    135.7  00095B 00                   EVEN
    135.8  00095C                      IF      'DOCOLON'='DOCODE'
    135.9  00095C              COMMADEST: DW     $+2
    135.10 00095C                      ELSE
    135.11 00095C ....         COMMADEST: DW      DOCOLON
    135.12 00095E                      ENDIF
    135.13 00095E                      ENDM
    136    00095E ............*        DW  IHERE,MINUS,ICOMMA,EXIT
    137    000966              
    138    000966              ;Z !DEST   dest adrs --    change a branch
                                dest'n
    139    000966              ;   TUCK - SWAP I! ;
    140    000966              ; Changes the destination address found at
                                'adrs' to the given 'dest'.  
    141    000966              ; The MSP430 uses relative addressing from the
                                location of the offset cell,
    142    000966              ; i.e., to branch to FOO the offset cell at $
                                contains FOO-$.
    143    000966                      HEADER  STOREDEST,5,'!DEST',DOCOLON
    143.1  000000                      PUBLIC  STOREDEST
    143.2  000966 ....                 DW      link
    143.3  000968 FF                   DB      0FFh       ; not immediate
    143.4  000969              link    SET     $
    143.5  000969 05                   DB      5
    143.6  00096A 2144455354           DB      '!DEST'
    143.7  00096F 00                   EVEN
    143.8  000970                      IF      'DOCOLON'='DOCODE'
    143.9  000970              STOREDEST: DW     $+2
    143.10 000970                      ELSE
    143.11 000970 ....         STOREDEST: DW      DOCOLON
    143.12 000972                      ENDIF
    143.13 000972                      ENDM
    144    000972 ............*        DW  TUCK,MINUS,SWAP,ISTORE,EXIT
    145    00097C              
    146    00097C              ;Z ,NONE   --              append a null
                                destination (Flashable)
    147    00097C              ;   CELL IALLOT ;
    148    00097C              ; When compiling in Flash ROM a branch to be
                                resolved later, we must
    149    00097C              ; skip the cell so that it can be programmed at
                                a later time.
    150    00097C              ; In general Flash memory can only be written
                                once!
    151    00097C              ; ,NONE should be used wherever !DEST will
                                resolve the branch.
    152    00097C                      HEADER  COMMANONE,5,',NONE',DOCOLON
    152.1  000000                      PUBLIC  COMMANONE
    152.2  00097C ....                 DW      link
    152.3  00097E FF                   DB      0FFh       ; not immediate
    152.4  00097F              link    SET     $
    152.5  00097F 05                   DB      5
    152.6  000980 2C4E4F4E45           DB      ',NONE'
    152.7  000985 00                   EVEN
    152.8  000986                      IF      'DOCOLON'='DOCODE'
    152.9  000986              COMMANONE: DW     $+2
    152.10 000986                      ELSE
    152.11 000986 ....         COMMANONE: DW      DOCOLON
    152.12 000988                      ENDIF
    152.13 000988                      ENDM
    153    000988 ............         DW  CELL,IALLOT,EXIT
    154    00098E              
    155    00098E              ; ----------------------------------------------
                               ------------------------
                                  - 4e-LP430 -                        Page   76

    156    00098E              ; HEADER STRUCTURE 
    157    00098E              ; The structure of the Forth dictionary headers
                                (name, link, immediate 
    158    00098E              ; flag, and "smudge" bit) does not necessarily
                                differ across CPUs.  This
    159    00098E              ; structure is not easily factored into distinct
                                "portable" words; 
    160    00098E              ; instead, it is implicit in the definitions of
                                FIND and CREATE, and 
    161    00098E              ; also in NFA>LFA, NFA>CFA, IMMED?, IMMEDIATE,
                                HIDE, and REVEAL.
    162    00098E              ; These words must be (substantially) rewritten
                                if either the header 
    163    00098E              ; structure or its inherent assumptions are
                                changed.
    164    00098E              ; ----------------------------------------------
                               ------------------------
    165    00098E              
     67    00098E              #include "4e-hilvl430G2553.s43"
      1    00098E              ; ----------------------------------------------
                               ------------------------
      2    00098E              ; 4e4th is a Forth based on CamelForth
                                
      3    00098E              ; for the Texas Instruments MSP430 
      4    00098E              ; 
      5    00098E              ; This program is free software; you can
                                redistribute it and/or modify
      6    00098E              ; it under the terms of the GNU General Public
                                License as published by
      7    00098E              ; the Free Software Foundation; either version 3
                                of the License, or
      8    00098E              ; (at your option) any later version.
      9    00098E              ; 
     10    00098E              ; This program is distributed in the hope that
                                it will be useful,
     11    00098E              ; but WITHOUT ANY WARRANTY; without even the
                                implied warranty of
     12    00098E              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
                                PURPOSE.  See the
     13    00098E              ; GNU General Public License for more details.
     14    00098E              ;
     15    00098E              ; You should have received a copy of the GNU
                                General Public License
     16    00098E              ; along with this program.  If not, see
                                <http://www.gnu.org/licenses/>.
     17    00098E              ; 
     18    00098E              ; See LICENSE TERMS in Brads file readme.txt as
                                well.
     19    00098E              
     20    00098E              ; ----------------------------------------------
                               ------------------------
     21    00098E              ; 4e-hilvl430G2553.s43 - High Level Words -
                                MSP430G2553 
     22    00098E              ; ----------------------------------------------
                               ------------------------
     23    00098E              
     24    00098E              ;   Forth words are documented as follows:
     25    00098E              ;x   NAME     stack -- stack    description
     26    00098E              ;   where x=C for ANS Forth Core words, X for
                                ANS
     27    00098E              ;   Extensions, Z for internal or private
                                words.
     28    00098E              ; ----------------------------------------------
                               ------------------------
     29    00098E              ; REVISION HISTORY
     30    00098E              
     31    00098E              ; 17 November 2013
     32    00098E              ;    Comments about making ISR in 4e4th
     33    00098E              ; 05 June 2013  
     34    00098E              ;    WORDS can stop and go now.
     35    00098E              ;    LABEL to build ISR code.
     36    00098E              ;    INTERRUPT to store ISR address in Interrupt
                                vector. 
     37    00098E              ;    VECSAVE VECRESTORE VECBACK added.
     38    00098E              ; 12 Jan 2013   Use CODE ... NEXT, END-CODE to
                                build code primitives. 
     39    00098E              ;    Usage:   CODE name  opcode1 i, opcode2 i,
                                opcode3 i, ... NEXT, END-CODE
                                  - 4e-LP430 -                        Page   77

     40    00098E              ;    Example: See "Basics for an extern cross
                                assembler" at end of file.
     41    00098E              ; 11 Jan 2013 made comments, new features and
                                words:
     42    00098E              ;    Indicate BASE in ok promt.
     43    00098E              ;    0U.R ( u n -- ) print u with n leading
                                zeros.
     44    00098E              ;    (VECWIPE) ( -- ) erase ISR flash.
     45    00098E              ;    VECWIPE   ( -- ) do (VECWIPE) and set
                                default reset vector.
     46    00098E              ; cleaned up/added memory information words:
     47    00098E              ;    RESETADR  ( -- adr)      reset vector
                                address
     48    00098E              ;    MEMBOT    ( -- adr)      bottom of
                                USERflash         
     49    00098E              ;    MEMTOP    ( -- adr)      top of USERflash  
                                      
     50    00098E              ;    MEM       ( -- u)        unused bytes in
                                flash
     51    00098E              ;    UNUSED    ( -- u)        unused bytes in
                                RAM
     52    00098E              ;    VARBOT    ( -- adr)      bottom of variable
                                area
     53    00098E              ;    TOPSEG    ( -- adr)      bottom of top most
                                flash segment
     54    00098E              ;    VECBOT    ( -- adr)      bottom of
                                interrupt vectors
     55    00098E              ;    ?         ( adr -- u )   display content of
                                variable          
     56    00098E              ; 08 Dez 2012 merged brads PARSE etc form
                                camelforth/340 V4.1
     57    00098E              ;    which fixes the empty string bug.
     58    00098E              ; Dez 2012   Added some features:
     59    00098E              ;   Save variables to info-c and restore from
                                there on COLD.
     60    00098E              ;   Made upper most flash segment writable; you
                                may write vectors now.
     61    00098E              ;    VEC! (x adr  -- )     store x to adr in top
                                most segment
     62    00098E              ;    VEC! will write _any_ flash location.  !!
                                dangerous!!
     63    00098E              ;   VECWIPE will erase flash but not kernel,
                                sets reset vector to boot 4e4th.
     64    00098E              ;   Kernal is bigger now, user flash smaler;
                                
     65    00098E              ;     see: XLINK configuration file for
                                MSP430G2553 4e-lnk430G2553.xcl
     66    00098E              ; 30 Mar 2012 mk fixed FM/MOD
     67    00098E              ; 26 Feb 2012 mk - adopted to MSP430G2553
     68    00098E              ;   MEM ( -- n ) n = bytes left in flash
     69    00098E              ;   FLASHEND constant MEMTOP
     70    00098E              ;   FLASHSTART constant MEMBOT
     71    00098E              ;   kernel at $E000, IDP = FLASHSTART =
                                C000
     72    00098E              ;   fixed backspace.
     73    00098E              ;   ok promt at end of line.
     74    00098E              ;   .S prints depth.
     75    00098E              ; 
     76    00098E              ; 17 jan 09 bjr - changed label _DP to DDP for
                                compatibility with token
     77    00098E              ;   naming convention.  Now uses DEST macro to
                                compute branch offsets.
     78    00098E              ; 11 jan 09 bjr - modified QUIT for Xon/Xoff
                                flow control
     79    00098E              ; 4 jan 09 bjr - created from Camel86h.asm.
     80    00098E              
     81    00098E              ; SYSTEM VARIABLES & CONSTANTS =================
                               =
     82    00098E              
     83    00098E              ;Z u0      -- a-addr       current user area
                                adrs
     84    00098E              ;  0 USER U0
     85    00098E                  HEADER  U0,2,'U0',DOUSER
     85.1  000000                      PUBLIC  U0
     85.2  00098E ....                 DW      link
     85.3  000990 FF                   DB      0FFh       ; not immediate
     85.4  000991              link    SET     $
     85.5  000991 02                   DB      2
                                  - 4e-LP430 -                        Page   78

     85.6  000992 5530                 DB      'U0'
     85.7  000994                      EVEN
     85.8  000994                      IF      'DOUSER'='DOCODE'
     85.9  000994              U0: DW     $+2
     85.10 000994                      ELSE
     85.11 000994 ....         U0: DW      DOUSER
     85.12 000996                      ENDIF
     85.13 000996                      ENDM
     86    000996 0000                 DW 0
     87    000998              
     88    000998              ;C >IN     -- a-addr        holds offset into
                                TIB
     89    000998              ;  2 USER >IN
     90    000998                  HEADER  TOIN,3,'>IN',DOUSER
     90.1  000000                      PUBLIC  TOIN
     90.2  000998 ....                 DW      link
     90.3  00099A FF                   DB      0FFh       ; not immediate
     90.4  00099B              link    SET     $
     90.5  00099B 03                   DB      3
     90.6  00099C 3E494E               DB      '>IN'
     90.7  00099F 00                   EVEN
     90.8  0009A0                      IF      'DOUSER'='DOCODE'
     90.9  0009A0              TOIN: DW     $+2
     90.10 0009A0                      ELSE
     90.11 0009A0 ....         TOIN: DW      DOUSER
     90.12 0009A2                      ENDIF
     90.13 0009A2                      ENDM
     91    0009A2 0200                 DW 2
     92    0009A4              
     93    0009A4              ;C BASE    -- a-addr       holds conversion
                                radix
     94    0009A4              ;  4 USER BASE
     95    0009A4                  HEADER  BASE,4,'BASE',DOUSER
     95.1  000000                      PUBLIC  BASE
     95.2  0009A4 ....                 DW      link
     95.3  0009A6 FF                   DB      0FFh       ; not immediate
     95.4  0009A7              link    SET     $
     95.5  0009A7 04                   DB      4
     95.6  0009A8 42415345             DB      'BASE'
     95.7  0009AC                      EVEN
     95.8  0009AC                      IF      'DOUSER'='DOCODE'
     95.9  0009AC              BASE: DW     $+2
     95.10 0009AC                      ELSE
     95.11 0009AC ....         BASE: DW      DOUSER
     95.12 0009AE                      ENDIF
     95.13 0009AE                      ENDM
     96    0009AE 0400                 DW 4
     97    0009B0              
     98    0009B0              ;C STATE   -- a-addr       holds compiler
                                state
     99    0009B0              ;  6 USER STATE
    100    0009B0                  HEADER  STATE,5,'STATE',DOUSER
    100.1  000000                      PUBLIC  STATE
    100.2  0009B0 ....                 DW      link
    100.3  0009B2 FF                   DB      0FFh       ; not immediate
    100.4  0009B3              link    SET     $
    100.5  0009B3 05                   DB      5
    100.6  0009B4 5354415445           DB      'STATE'
    100.7  0009B9 00                   EVEN
    100.8  0009BA                      IF      'DOUSER'='DOCODE'
    100.9  0009BA              STATE: DW     $+2
    100.10 0009BA                      ELSE
    100.11 0009BA ....         STATE: DW      DOUSER
    100.12 0009BC                      ENDIF
    100.13 0009BC                      ENDM
    101    0009BC 0600                 DW 6
    102    0009BE              
    103    0009BE              ;Z dp      -- a-addr       holds dictionary
                                ptr
    104    0009BE              ;  8 USER DP
    105    0009BE                  HEADER  DDP,2,'DP',DOUSER
    105.1  000000                      PUBLIC  DDP
    105.2  0009BE ....                 DW      link
    105.3  0009C0 FF                   DB      0FFh       ; not immediate
    105.4  0009C1              link    SET     $
    105.5  0009C1 02                   DB      2
    105.6  0009C2 4450                 DB      'DP'
    105.7  0009C4                      EVEN
                                  - 4e-LP430 -                        Page   79

    105.8  0009C4                      IF      'DOUSER'='DOCODE'
    105.9  0009C4              DDP: DW     $+2
    105.10 0009C4                      ELSE
    105.11 0009C4 ....         DDP: DW      DOUSER
    105.12 0009C6                      ENDIF
    105.13 0009C6                      ENDM
    106    0009C6 0800                 DW 8
    107    0009C8              
    108    0009C8              ;Z 'source  -- a-addr      two cells: len,
                                adrs
    109    0009C8              ; 10 USER 'SOURCE
    110    0009C8                  HEADER  TICKSOURCE,7,'\'SOURCE',DOUSER
    110.1  000000                      PUBLIC  TICKSOURCE
    110.2  0009C8 ....                 DW      link
    110.3  0009CA FF                   DB      0FFh       ; not immediate
    110.4  0009CB              link    SET     $
    110.5  0009CB 07                   DB      7
    110.6  0009CC 27534F555243*        DB      '\'SOURCE'
    110.7  0009D3 00                   EVEN
    110.8  0009D4                      IF      'DOUSER'='DOCODE'
    110.9  0009D4              TICKSOURCE: DW     $+2
    110.10 0009D4                      ELSE
    110.11 0009D4 ....         TICKSOURCE: DW      DOUSER
    110.12 0009D6                      ENDIF
    110.13 0009D6                      ENDM
    111    0009D6 0A00                 DW 10
    112    0009D8              
    113    0009D8              ;Z latest    -- a-addr     last word in
                                dict.
    114    0009D8              ;   14 USER LATEST
    115    0009D8                  HEADER  LATEST,6,'LATEST',DOUSER
    115.1  000000                      PUBLIC  LATEST
    115.2  0009D8 ....                 DW      link
    115.3  0009DA FF                   DB      0FFh       ; not immediate
    115.4  0009DB              link    SET     $
    115.5  0009DB 06                   DB      6
    115.6  0009DC 4C4154455354         DB      'LATEST'
    115.7  0009E2                      EVEN
    115.8  0009E2                      IF      'DOUSER'='DOCODE'
    115.9  0009E2              LATEST: DW     $+2
    115.10 0009E2                      ELSE
    115.11 0009E2 ....         LATEST: DW      DOUSER
    115.12 0009E4                      ENDIF
    115.13 0009E4                      ENDM
    116    0009E4 0E00                 DW 14
    117    0009E6              
    118    0009E6              ;Z hp       -- a-addr     HOLD pointer
    119    0009E6              ;   16 USER HP
    120    0009E6                  HEADER  HP,2,'HP',DOUSER
    120.1  000000                      PUBLIC  HP
    120.2  0009E6 ....                 DW      link
    120.3  0009E8 FF                   DB      0FFh       ; not immediate
    120.4  0009E9              link    SET     $
    120.5  0009E9 02                   DB      2
    120.6  0009EA 4850                 DB      'HP'
    120.7  0009EC                      EVEN
    120.8  0009EC                      IF      'DOUSER'='DOCODE'
    120.9  0009EC              HP: DW     $+2
    120.10 0009EC                      ELSE
    120.11 0009EC ....         HP: DW      DOUSER
    120.12 0009EE                      ENDIF
    120.13 0009EE                      ENDM
    121    0009EE 1000                 DW 16
    122    0009F0              
    123    0009F0              ;Z LP       -- a-addr     Leave-stack pointer
    124    0009F0              ;   18 USER LP
    125    0009F0                  HEADER  LP,2,'LP',DOUSER
    125.1  000000                      PUBLIC  LP
    125.2  0009F0 ....                 DW      link
    125.3  0009F2 FF                   DB      0FFh       ; not immediate
    125.4  0009F3              link    SET     $
    125.5  0009F3 02                   DB      2
    125.6  0009F4 4C50                 DB      'LP'
    125.7  0009F6                      EVEN
    125.8  0009F6                      IF      'DOUSER'='DOCODE'
    125.9  0009F6              LP: DW     $+2
    125.10 0009F6                      ELSE
    125.11 0009F6 ....         LP: DW      DOUSER
                                  - 4e-LP430 -                        Page   80

    125.12 0009F8                      ENDIF
    125.13 0009F8                      ENDM
    126    0009F8 1200                 DW 18
    127    0009FA              
    128    0009FA              ;Z IDP    -- a-addr        ROM dictionary
                                pointer
    129    0009FA              ;   20 USER IDP
    130    0009FA                  HEADER  IDP,3,'IDP',DOUSER
    130.1  000000                      PUBLIC  IDP
    130.2  0009FA ....                 DW      link
    130.3  0009FC FF                   DB      0FFh       ; not immediate
    130.4  0009FD              link    SET     $
    130.5  0009FD 03                   DB      3
    130.6  0009FE 494450               DB      'IDP'
    130.7  000A01 00                   EVEN
    130.8  000A02                      IF      'DOUSER'='DOCODE'
    130.9  000A02              IDP: DW     $+2
    130.10 000A02                      ELSE
    130.11 000A02 ....         IDP: DW      DOUSER
    130.12 000A04                      ENDIF
    130.13 000A04                      ENDM
    131    000A04 1400                 DW 20
    132    000A06              
    133    000A06              ;Z NEWEST   -- a-addr       temporary LATEST
                                storage
    134    000A06              ;   22 USER NEWEST
    135    000A06                  HEADER  NEWEST,6,'NEWEST',DOUSER
    135.1  000000                      PUBLIC  NEWEST
    135.2  000A06 ....                 DW      link
    135.3  000A08 FF                   DB      0FFh       ; not immediate
    135.4  000A09              link    SET     $
    135.5  000A09 06                   DB      6
    135.6  000A0A 4E4557455354         DB      'NEWEST'
    135.7  000A10                      EVEN
    135.8  000A10                      IF      'DOUSER'='DOCODE'
    135.9  000A10              NEWEST: DW     $+2
    135.10 000A10                      ELSE
    135.11 000A10 ....         NEWEST: DW      DOUSER
    135.12 000A12                      ENDIF
    135.13 000A12                      ENDM
    136    000A12 1600                 DW 22
    137    000A14              
    138    000A14              ;Z APP      -- a-addr        app pointer ( was
                                TURNKEY)
    139    000A14              ;    24 USER APP
    140    000A14                  HEADER  APP,3,'APP',DOUSER
    140.1  000000                      PUBLIC  APP
    140.2  000A14 ....                 DW      link
    140.3  000A16 FF                   DB      0FFh       ; not immediate
    140.4  000A17              link    SET     $
    140.5  000A17 03                   DB      3
    140.6  000A18 415050               DB      'APP'
    140.7  000A1B 00                   EVEN
    140.8  000A1C                      IF      'DOUSER'='DOCODE'
    140.9  000A1C              APP: DW     $+2
    140.10 000A1C                      ELSE
    140.11 000A1C ....         APP: DW      DOUSER
    140.12 000A1E                      ENDIF
    140.13 000A1E                      ENDM
    141    000A1E 1800                 DW 24
    142    000A20              
    143    000A20              ;Z CAPS     -- a-addr        capitalize words
                                pointer
    144    000A20              ;    26 USER CAPS
    145    000A20                  HEADER  CAPS,4,'CAPS',DOUSER
    145.1  000000                      PUBLIC  CAPS
    145.2  000A20 ....                 DW      link
    145.3  000A22 FF                   DB      0FFh       ; not immediate
    145.4  000A23              link    SET     $
    145.5  000A23 04                   DB      4
    145.6  000A24 43415053             DB      'CAPS'
    145.7  000A28                      EVEN
    145.8  000A28                      IF      'DOUSER'='DOCODE'
    145.9  000A28              CAPS: DW     $+2
    145.10 000A28                      ELSE
    145.11 000A28 ....         CAPS: DW      DOUSER
    145.12 000A2A                      ENDIF
    145.13 000A2A                      ENDM
                                  - 4e-LP430 -                        Page   81

    146    000A2A 1A00                 DW 26
    147    000A2C                      
    148    000A2C              ;Z USERKEY      -- a-addr        KEY pointer
    149    000A2C              ;    28 USER KEY
    150    000A2C                  HEADER  USERKEY,7,'USERKEY',DOUSER
    150.1  000000                      PUBLIC  USERKEY
    150.2  000A2C ....                 DW      link
    150.3  000A2E FF                   DB      0FFh       ; not immediate
    150.4  000A2F              link    SET     $
    150.5  000A2F 07                   DB      7
    150.6  000A30 555345524B45*        DB      'USERKEY'
    150.7  000A37 00                   EVEN
    150.8  000A38                      IF      'DOUSER'='DOCODE'
    150.9  000A38              USERKEY: DW     $+2
    150.10 000A38                      ELSE
    150.11 000A38 ....         USERKEY: DW      DOUSER
    150.12 000A3A                      ENDIF
    150.13 000A3A                      ENDM
    151    000A3A 1C00                 DW 28
    152    000A3C              
    153    000A3C              ;Z USEREMIT      -- a-addr        EMIT
                                pointer
    154    000A3C              ;    30 USER EMIT
    155    000A3C                  HEADER  USEREMIT,8,'USEREMIT',DOUSER
    155.1  000000                      PUBLIC  USEREMIT
    155.2  000A3C ....                 DW      link
    155.3  000A3E FF                   DB      0FFh       ; not immediate
    155.4  000A3F              link    SET     $
    155.5  000A3F 08                   DB      8
    155.6  000A40 55534552454D*        DB      'USEREMIT'
    155.7  000A48                      EVEN
    155.8  000A48                      IF      'DOUSER'='DOCODE'
    155.9  000A48              USEREMIT: DW     $+2
    155.10 000A48                      ELSE
    155.11 000A48 ....         USEREMIT: DW      DOUSER
    155.12 000A4A                      ENDIF
    155.13 000A4A                      ENDM
    156    000A4A 1E00                 DW 30
    157    000A4C              
    158    000A4C              ;Z NEWLINE      -- a-addr        CR pointer
    159    000A4C              ;    32 USER 
    160    000A4C                  HEADER  NEWLINE,7,'NEWLINE',DOUSER
    160.1  000000                      PUBLIC  NEWLINE
    160.2  000A4C ....                 DW      link
    160.3  000A4E FF                   DB      0FFh       ; not immediate
    160.4  000A4F              link    SET     $
    160.5  000A4F 07                   DB      7
    160.6  000A50 4E45574C494E*        DB      'NEWLINE'
    160.7  000A57 00                   EVEN
    160.8  000A58                      IF      'DOUSER'='DOCODE'
    160.9  000A58              NEWLINE: DW     $+2
    160.10 000A58                      ELSE
    160.11 000A58 ....         NEWLINE: DW      DOUSER
    160.12 000A5A                      ENDIF
    160.13 000A5A                      ENDM
    161    000A5A 2000                 DW 32    
    162    000A5C              
    163    000A5C              ; 2 more for savety 34, 36
    164    000A5C              
    165    000A5C              
    166    000A5C              
    167    000A5C              ;X PAD       -- a-addr    user PAD buffer
    168    000A5C              ;                         = end of hold
                                area!
    169    000A5C                  HEADER  PAD,3,'PAD',DOUSER
    169.1  000000                      PUBLIC  PAD
    169.2  000A5C ....                 DW      link
    169.3  000A5E FF                   DB      0FFh       ; not immediate
    169.4  000A5F              link    SET     $
    169.5  000A5F 03                   DB      3
    169.6  000A60 504144               DB      'PAD'
    169.7  000A63 00                   EVEN
    169.8  000A64                      IF      'DOUSER'='DOCODE'
    169.9  000A64              PAD: DW     $+2
    169.10 000A64                      ELSE
    169.11 000A64 ....         PAD: DW      DOUSER
    169.12 000A66                      ENDIF
    169.13 000A66                      ENDM
                                  - 4e-LP430 -                        Page   82

    170    000A66 ....                 DW PADAREA-UAREA
    171    000A68              
    172    000A68              ;Z l0       -- a-addr     bottom of Leave
                                stack
    173    000A68                  HEADER  L0,2,'L0',DOUSER
    173.1  000000                      PUBLIC  L0
    173.2  000A68 ....                 DW      link
    173.3  000A6A FF                   DB      0FFh       ; not immediate
    173.4  000A6B              link    SET     $
    173.5  000A6B 02                   DB      2
    173.6  000A6C 4C30                 DB      'L0'
    173.7  000A6E                      EVEN
    173.8  000A6E                      IF      'DOUSER'='DOCODE'
    173.9  000A6E              L0: DW     $+2
    173.10 000A6E                      ELSE
    173.11 000A6E ....         L0: DW      DOUSER
    173.12 000A70                      ENDIF
    173.13 000A70                      ENDM
    174    000A70 ....                 DW LSTACK-UAREA
    175    000A72              
    176    000A72              ;Z r0       -- a-addr     end of return
                                stack
    177    000A72                  HEADER  RZERO,2,'R0',DOUSER
    177.1  000000                      PUBLIC  RZERO
    177.2  000A72 ....                 DW      link
    177.3  000A74 FF                   DB      0FFh       ; not immediate
    177.4  000A75              link    SET     $
    177.5  000A75 02                   DB      2
    177.6  000A76 5230                 DB      'R0'
    177.7  000A78                      EVEN
    177.8  000A78                      IF      'DOUSER'='DOCODE'
    177.9  000A78              RZERO: DW     $+2
    177.10 000A78                      ELSE
    177.11 000A78 ....         RZERO: DW      DOUSER
    177.12 000A7A                      ENDIF
    177.13 000A7A                      ENDM
    178    000A7A ....                 DW RSTACK-UAREA
    179    000A7C              
    180    000A7C              ;Z s0       -- a-addr     end of parameter
                                stack
    181    000A7C                  HEADER  S0,2,'S0',DOUSER
    181.1  000000                      PUBLIC  S0
    181.2  000A7C ....                 DW      link
    181.3  000A7E FF                   DB      0FFh       ; not immediate
    181.4  000A7F              link    SET     $
    181.5  000A7F 02                   DB      2
    181.6  000A80 5330                 DB      'S0'
    181.7  000A82                      EVEN
    181.8  000A82                      IF      'DOUSER'='DOCODE'
    181.9  000A82              S0: DW     $+2
    181.10 000A82                      ELSE
    181.11 000A82 ....         S0: DW      DOUSER
    181.12 000A84                      ENDIF
    181.13 000A84                      ENDM
    182    000A84 ....                 DW PSTACK-UAREA
    183    000A86              
    184    000A86              ;X tib     -- a-addr     Terminal Input
                                Buffer
    185    000A86              ;  HEX 80 USER TIB       8086: above user
                                area
    186    000A86                  HEADER  TIB,3,'TIB',DOUSER
    186.1  000000                      PUBLIC  TIB
    186.2  000A86 ....                 DW      link
    186.3  000A88 FF                   DB      0FFh       ; not immediate
    186.4  000A89              link    SET     $
    186.5  000A89 03                   DB      3
    186.6  000A8A 544942               DB      'TIB'
    186.7  000A8D 00                   EVEN
    186.8  000A8E                      IF      'DOUSER'='DOCODE'
    186.9  000A8E              TIB: DW     $+2
    186.10 000A8E                      ELSE
    186.11 000A8E ....         TIB: DW      DOUSER
    186.12 000A90                      ENDIF
    186.13 000A90                      ENDM
    187    000A90 ....                 DW TIBAREA-UAREA
    188    000A92              
    189    000A92              ;Z tibsize  -- n         size of TIB
    190    000A92                  HEADER  TIBSIZE,7,'TIBSIZE',DOCON
                                  - 4e-LP430 -                        Page   83

    190.1  000000                      PUBLIC  TIBSIZE
    190.2  000A92 ....                 DW      link
    190.3  000A94 FF                   DB      0FFh       ; not immediate
    190.4  000A95              link    SET     $
    190.5  000A95 07                   DB      7
    190.6  000A96 54494253495A*        DB      'TIBSIZE'
    190.7  000A9D 00                   EVEN
    190.8  000A9E                      IF      'DOCON'='DOCODE'
    190.9  000A9E              TIBSIZE: DW     $+2
    190.10 000A9E                      ELSE
    190.11 000A9E ....         TIBSIZE: DW      DOCON
    190.12 000AA0                      ENDIF
    190.13 000AA0                      ENDM
    191    000AA0 ....                 DW TIB_SIZE-2    ; 2 chars safety zone
                                                         
    192    000AA2              
    193    000AA2              ;C BL      -- char            an ASCII
                                space
    194    000AA2                  HEADER  BLANK,2,'BL',DOCON
    194.1  000000                      PUBLIC  BLANK
    194.2  000AA2 ....                 DW      link
    194.3  000AA4 FF                   DB      0FFh       ; not immediate
    194.4  000AA5              link    SET     $
    194.5  000AA5 02                   DB      2
    194.6  000AA6 424C                 DB      'BL'
    194.7  000AA8                      EVEN
    194.8  000AA8                      IF      'DOCON'='DOCODE'
    194.9  000AA8              BLANK: DW     $+2
    194.10 000AA8                      ELSE
    194.11 000AA8 ....         BLANK: DW      DOCON
    194.12 000AAA                      ENDIF
    194.13 000AAA                      ENDM
    195    000AAA 2000                 DW 20h
    196    000AAC              
    197    000AAC              ;Z uinit    -- addr       initial values for
                                user area
    198    000AAC                  HEADER  UINIT,5,'UINIT',DOROM
    198.1  000000                      PUBLIC  UINIT
    198.2  000AAC ....                 DW      link
    198.3  000AAE FF                   DB      0FFh       ; not immediate
    198.4  000AAF              link    SET     $
    198.5  000AAF 05                   DB      5
    198.6  000AB0 55494E4954           DB      'UINIT'
    198.7  000AB5 00                   EVEN
    198.8  000AB6                      IF      'DOROM'='DOCODE'
    198.9  000AB6              UINIT: DW     $+2
    198.10 000AB6                      ELSE
    198.11 000AB6 ....         UINIT: DW      DOROM
    198.12 000AB8                      ENDIF
    198.13 000AB8                      ENDM
    199    000AB8              uinitstart:
    200    000AB8 000000000A00*        DW 0,0,10,0     ; reserved,>IN,BASE,STAT
                                                       E  ; start in HEX 
                                                        mk
    201    000AC0 ....                 DW RAMDICT      ; DP
    202    000AC2 00000000             DW 0,0          ; SOURCE init'd
                                                        elsewhere
    203    000AC6 ....                 DW lastword     ; LATEST
    204    000AC8 00000000             DW 0,0          ; HP,LP init'd
                                                        elsewhere
    205    000ACC 00C0                 DW USERFLASHSTART   ; IDP
    206    000ACE 0000                 DW 0            ; NEWEST not init'd
    207    000AD0 ....                 DW DOTCOLD      ; APP vector; default is
                                                        .COLD
    208    000AD2 FFFF                 DW -1           ; CAPS flag; default is
                                                        TRUE
    209    000AD4 ....                 DW DOKEY        ; KEY vector
    210    000AD6 ....                 DW DOEMIT       ; EMIT vector
    211    000AD8 ....                 DW DOCR         ; CR vector 
    212    000ADA              uinitend:
    213    000022              uareasize = uinitend-uinitstart
    214    000ADA              
    215    000ADA              /* not there     mk
    216    000ADA              ; RAM interrupt vectors, 15 vectors of 2 cells
                                each
    217    000ADA                      MOV #nullirq,PC
    218    000ADA                      MOV #nullirq,PC
    219    000ADA                      MOV #nullirq,PC
                                  - 4e-LP430 -                        Page   84

    220    000ADA                      MOV #nullirq,PC
    221    000ADA                      MOV #nullirq,PC
    222    000ADA                      MOV #nullirq,PC
    223    000ADA                      MOV #nullirq,PC
    224    000ADA                      MOV #nullirq,PC
    225    000ADA                      MOV #nullirq,PC
    226    000ADA                      MOV #nullirq,PC
    227    000ADA                      MOV #nullirq,PC
    228    000ADA                      MOV #nullirq,PC
    229    000ADA                      MOV #nullirq,PC
    230    000ADA                      MOV #nullirq,PC
    231    000ADA                      MOV #nullirq,PC
    232    000ADA              */
    233    000ADA              
    234    000ADA              ;Z #init    -- n    #bytes of user area init
                                data
    235    000ADA                  HEADER  NINIT,5,'#INIT',DOCON
    235.1  000000                      PUBLIC  NINIT
    235.2  000ADA ....                 DW      link
    235.3  000ADC FF                   DB      0FFh       ; not immediate
    235.4  000ADD              link    SET     $
    235.5  000ADD 05                   DB      5
    235.6  000ADE 23494E4954           DB      '#INIT'
    235.7  000AE3 00                   EVEN
    235.8  000AE4                      IF      'DOCON'='DOCODE'
    235.9  000AE4              NINIT: DW     $+2
    235.10 000AE4                      ELSE
    235.11 000AE4 ....         NINIT: DW      DOCON
    235.12 000AE6                      ENDIF
    235.13 000AE6                      ENDM
    236    000AE6 2200                 DW uareasize
    237    000AE8                      
    238    000AE8              
    239    000000              EXTERN cor,infoB,AppU0,infoC,infoD
    240    000AE8              ;Z COR      -- adr       cause of reset
    241    000AE8                  HEADER  COR,3,'COR',DOCON
    241.1  000000                      PUBLIC  COR
    241.2  000AE8 ....                 DW      link
    241.3  000AEA FF                   DB      0FFh       ; not immediate
    241.4  000AEB              link    SET     $
    241.5  000AEB 03                   DB      3
    241.6  000AEC 434F52               DB      'COR'
    241.7  000AEF 00                   EVEN
    241.8  000AF0                      IF      'DOCON'='DOCODE'
    241.9  000AF0              COR: DW     $+2
    241.10 000AF0                      ELSE
    241.11 000AF0 ....         COR: DW      DOCON
    241.12 000AF2                      ENDIF
    241.13 000AF2                      ENDM
    242    000AF2 ....                 DW cor
    243    000AF4              
    244    000AF4              ;Z INFOB    -- adr       start of info B
                                segment
    245    000AF4                  HEADER  INFOB,5,'INFOB',DOCON
    245.1  000000                      PUBLIC  INFOB
    245.2  000AF4 ....                 DW      link
    245.3  000AF6 FF                   DB      0FFh       ; not immediate
    245.4  000AF7              link    SET     $
    245.5  000AF7 05                   DB      5
    245.6  000AF8 494E464F42           DB      'INFOB'
    245.7  000AFD 00                   EVEN
    245.8  000AFE                      IF      'DOCON'='DOCODE'
    245.9  000AFE              INFOB: DW     $+2
    245.10 000AFE                      ELSE
    245.11 000AFE ....         INFOB: DW      DOCON
    245.12 000B00                      ENDIF
    245.13 000B00                      ENDM
    246    000B00 ....                 DW infoB
    247    000B02              
    248    000B02              ;Z INFOC    -- adr       start of info C
                                segment
    249    000B02                  HEADER  INFOC,5,'INFOC',DOCON
    249.1  000000                      PUBLIC  INFOC
    249.2  000B02 ....                 DW      link
    249.3  000B04 FF                   DB      0FFh       ; not immediate
    249.4  000B05              link    SET     $
    249.5  000B05 05                   DB      5
    249.6  000B06 494E464F43           DB      'INFOC'
                                  - 4e-LP430 -                        Page   85

    249.7  000B0B 00                   EVEN
    249.8  000B0C                      IF      'DOCON'='DOCODE'
    249.9  000B0C              INFOC: DW     $+2
    249.10 000B0C                      ELSE
    249.11 000B0C ....         INFOC: DW      DOCON
    249.12 000B0E                      ENDIF
    249.13 000B0E                      ENDM
    250    000B0E ....                 DW infoC
    251    000B10              
    252    000B10              ;Z INFOD    -- adr       start of info C
                                segment
    253    000B10                  HEADER  INFOD,5,'INFOD',DOCON
    253.1  000000                      PUBLIC  INFOD
    253.2  000B10 ....                 DW      link
    253.3  000B12 FF                   DB      0FFh       ; not immediate
    253.4  000B13              link    SET     $
    253.5  000B13 05                   DB      5
    253.6  000B14 494E464F44           DB      'INFOD'
    253.7  000B19 00                   EVEN
    253.8  000B1A                      IF      'DOCON'='DOCODE'
    253.9  000B1A              INFOD: DW     $+2
    253.10 000B1A                      ELSE
    253.11 000B1A ....         INFOD: DW      DOCON
    253.12 000B1C                      ENDIF
    253.13 000B1C                      ENDM
    254    000B1C ....                 DW infoD
    255    000B1E              
    256    000B1E              ;Z APPU0    -- adr       start of Application
                                user area
    257    000B1E                  HEADER  APPU0,5,'APPU0',DOCON
    257.1  000000                      PUBLIC  APPU0
    257.2  000B1E ....                 DW      link
    257.3  000B20 FF                   DB      0FFh       ; not immediate
    257.4  000B21              link    SET     $
    257.5  000B21 05                   DB      5
    257.6  000B22 4150505530           DB      'APPU0'
    257.7  000B27 00                   EVEN
    257.8  000B28                      IF      'DOCON'='DOCODE'
    257.9  000B28              APPU0: DW     $+2
    257.10 000B28                      ELSE
    257.11 000B28 ....         APPU0: DW      DOCON
    257.12 000B2A                      ENDIF
    257.13 000B2A                      ENDM
    258    000B2A ....                 DW AppU0
    259    000B2C                      
    260    000B2C              
    261    000B2C              ; ARITHMETIC OPERATORS =========================
                               =
    262    000B2C              
    263    000B2C              ;C S>D    n -- d          single -> double
                                prec.
    264    000B2C              ;   DUP 0< ;
    265    000B2C                  HEADER  STOD,3,'S>D',DOCOLON
    265.1  000000                      PUBLIC  STOD
    265.2  000B2C ....                 DW      link
    265.3  000B2E FF                   DB      0FFh       ; not immediate
    265.4  000B2F              link    SET     $
    265.5  000B2F 03                   DB      3
    265.6  000B30 533E44               DB      'S>D'
    265.7  000B33 00                   EVEN
    265.8  000B34                      IF      'DOCOLON'='DOCODE'
    265.9  000B34              STOD: DW     $+2
    265.10 000B34                      ELSE
    265.11 000B34 ....         STOD: DW      DOCOLON
    265.12 000B36                      ENDIF
    265.13 000B36                      ENDM
    266    000B36 ............         DW DUP,ZEROLESS,EXIT
    267    000B3C              
    268    000B3C              ;Z ?NEGATE  n1 n2 -- n3  negate n1 if n2
                                negative
    269    000B3C              ;   0< IF NEGATE THEN ;        ...a common
                                factor
    270    000B3C                  HEADER  QNEGATE,7,'?NEGATE',DOCOLON
    270.1  000000                      PUBLIC  QNEGATE
    270.2  000B3C ....                 DW      link
    270.3  000B3E FF                   DB      0FFh       ; not immediate
    270.4  000B3F              link    SET     $
    270.5  000B3F 07                   DB      7
                                  - 4e-LP430 -                        Page   86

    270.6  000B40 3F4E45474154*        DB      '?NEGATE'
    270.7  000B47 00                   EVEN
    270.8  000B48                      IF      'DOCOLON'='DOCODE'
    270.9  000B48              QNEGATE: DW     $+2
    270.10 000B48                      ELSE
    270.11 000B48 ....         QNEGATE: DW      DOCOLON
    270.12 000B4A                      ENDIF
    270.13 000B4A                      ENDM
    271    000B4A ........             DW ZEROLESS,qbran
    272    000B4E                      DEST  QNEG1
    272.1  000B4E 0400                 DW      QNEG1-$
    272.2  000B50                      ENDM
    273    000B50 ....                 DW NEGATE
    274    000B52 ....         QNEG1:  DW EXIT
    275    000B54              
    276    000B54              ;C ABS     n1 -- +n2     absolute value
    277    000B54              ;   DUP ?NEGATE ;
    278    000B54                  HEADER  ABBS,3,'ABS',DOCOLON
    278.1  000000                      PUBLIC  ABBS
    278.2  000B54 ....                 DW      link
    278.3  000B56 FF                   DB      0FFh       ; not immediate
    278.4  000B57              link    SET     $
    278.5  000B57 03                   DB      3
    278.6  000B58 414253               DB      'ABS'
    278.7  000B5B 00                   EVEN
    278.8  000B5C                      IF      'DOCOLON'='DOCODE'
    278.9  000B5C              ABBS: DW     $+2
    278.10 000B5C                      ELSE
    278.11 000B5C ....         ABBS: DW      DOCOLON
    278.12 000B5E                      ENDIF
    278.13 000B5E                      ENDM
    279    000B5E ............         DW DUP,QNEGATE,EXIT
    280    000B64              
    281    000B64              ;X DNEGATE   d1 -- d2     negate double
                                precision
    282    000B64              ;   SWAP INVERT SWAP INVERT 1 M+ ;
    283    000B64                  HEADER  DNEGATE,7,'DNEGATE',DOCOLON
    283.1  000000                      PUBLIC  DNEGATE
    283.2  000B64 ....                 DW      link
    283.3  000B66 FF                   DB      0FFh       ; not immediate
    283.4  000B67              link    SET     $
    283.5  000B67 07                   DB      7
    283.6  000B68 444E45474154*        DB      'DNEGATE'
    283.7  000B6F 00                   EVEN
    283.8  000B70                      IF      'DOCOLON'='DOCODE'
    283.9  000B70              DNEGATE: DW     $+2
    283.10 000B70                      ELSE
    283.11 000B70 ....         DNEGATE: DW      DOCOLON
    283.12 000B72                      ENDIF
    283.13 000B72                      ENDM
    284    000B72 ............*        DW SWAP,INVERT,SWAP,INVERT,lit,1,MPLUS
    285    000B80 ....                 DW EXIT
    286    000B82              
    287    000B82              ;Z ?DNEGATE  d1 n -- d2   negate d1 if n
                                negative
    288    000B82              ;   0< IF DNEGATE THEN ;       ...a common
                                factor
    289    000B82                  HEADER  QDNEGATE,8,'?DNEGATE',DOCOLON
    289.1  000000                      PUBLIC  QDNEGATE
    289.2  000B82 ....                 DW      link
    289.3  000B84 FF                   DB      0FFh       ; not immediate
    289.4  000B85              link    SET     $
    289.5  000B85 08                   DB      8
    289.6  000B86 3F444E454741*        DB      '?DNEGATE'
    289.7  000B8E                      EVEN
    289.8  000B8E                      IF      'DOCOLON'='DOCODE'
    289.9  000B8E              QDNEGATE: DW     $+2
    289.10 000B8E                      ELSE
    289.11 000B8E ....         QDNEGATE: DW      DOCOLON
    289.12 000B90                      ENDIF
    289.13 000B90                      ENDM
    290    000B90 ........             DW ZEROLESS,qbran
    291    000B94                      DEST  DNEG1
    291.1  000B94 0400                 DW      DNEG1-$
    291.2  000B96                      ENDM
    292    000B96 ....                 DW DNEGATE
    293    000B98 ....         DNEG1:  DW EXIT
    294    000B9A              
                                  - 4e-LP430 -                        Page   87

    295    000B9A              ;X DABS     d1 -- +d2    absolute value
                                dbl.prec.
    296    000B9A              ;   DUP ?DNEGATE ;
    297    000B9A                  HEADER  DABS,4,'DABS',DOCOLON
    297.1  000000                      PUBLIC  DABS
    297.2  000B9A ....                 DW      link
    297.3  000B9C FF                   DB      0FFh       ; not immediate
    297.4  000B9D              link    SET     $
    297.5  000B9D 04                   DB      4
    297.6  000B9E 44414253             DB      'DABS'
    297.7  000BA2                      EVEN
    297.8  000BA2                      IF      'DOCOLON'='DOCODE'
    297.9  000BA2              DABS: DW     $+2
    297.10 000BA2                      ELSE
    297.11 000BA2 ....         DABS: DW      DOCOLON
    297.12 000BA4                      ENDIF
    297.13 000BA4                      ENDM
    298    000BA4 ............         DW DUP,QDNEGATE,EXIT
    299    000BAA              
    300    000BAA              ;C M*     n1 n2 -- d    signed 16*16->32
                                multiply
    301    000BAA              ;   2DUP XOR >R        carries sign of the
                                result
    302    000BAA              ;   SWAP ABS SWAP ABS UM*
    303    000BAA              ;   R> ?DNEGATE ;
    304    000BAA                  HEADER  MSTAR,2,'M*',DOCOLON
    304.1  000000                      PUBLIC  MSTAR
    304.2  000BAA ....                 DW      link
    304.3  000BAC FF                   DB      0FFh       ; not immediate
    304.4  000BAD              link    SET     $
    304.5  000BAD 02                   DB      2
    304.6  000BAE 4D2A                 DB      'M*'
    304.7  000BB0                      EVEN
    304.8  000BB0                      IF      'DOCOLON'='DOCODE'
    304.9  000BB0              MSTAR: DW     $+2
    304.10 000BB0                      ELSE
    304.11 000BB0 ....         MSTAR: DW      DOCOLON
    304.12 000BB2                      ENDIF
    304.13 000BB2                      ENDM
    305    000BB2 ............         DW TWODUP,XORR,TOR
    306    000BB8 ............*        DW SWAP,ABBS,SWAP,ABBS,UMSTAR
    307    000BC2 ............         DW RFROM,QDNEGATE,EXIT
    308    000BC8              
    309    000BC8              ;C SM/REM   d1 n1 -- n2 n3   symmetric signed
                                div
    310    000BC8              ;   2DUP XOR >R              sign of quotient
    311    000BC8              ;   OVER >R                  sign of remainder
    312    000BC8              ;   ABS >R DABS R> UM/MOD
    313    000BC8              ;   SWAP R> ?NEGATE
    314    000BC8              ;   SWAP R> ?NEGATE ;
    315    000BC8              ; Ref. dpANS-6 section 3.2.2.1.
    316    000BC8                  HEADER  SMSLASHREM,6,'SM/REM',DOCOLON
    316.1  000000                      PUBLIC  SMSLASHREM
    316.2  000BC8 ....                 DW      link
    316.3  000BCA FF                   DB      0FFh       ; not immediate
    316.4  000BCB              link    SET     $
    316.5  000BCB 06                   DB      6
    316.6  000BCC 534D2F52454D         DB      'SM/REM'
    316.7  000BD2                      EVEN
    316.8  000BD2                      IF      'DOCOLON'='DOCODE'
    316.9  000BD2              SMSLASHREM: DW     $+2
    316.10 000BD2                      ELSE
    316.11 000BD2 ....         SMSLASHREM: DW      DOCOLON
    316.12 000BD4                      ENDIF
    316.13 000BD4                      ENDM
    317    000BD4 ............*        DW TWODUP,XORR,TOR,OVER,TOR
    318    000BDE ............*        DW ABBS,TOR,DABS,RFROM,UMSLASHMOD
    319    000BE8 ............*        DW SWAP,RFROM,QNEGATE,SWAP,RFROM,QNEGATE
    320    000BF4 ....                 DW EXIT
    321    000BF6              
    322    000BF6              ;C    d1 n1 -- n2 n3   floored signed div'n
    323    000BF6              ;                            courtesy of Ed
                                Smeda
    324    000BF6              ;   DUP >R  SM/REM  2DUP  1 <  AND  IF
    325    000BF6              ;     SWAP R@ +  SWAP 1-  THEN
    326    000BF6              ;   R> DROP ;
    327    000BF6              ; Ref. dpANS-6 section 3.2.2.1.
    328    000BF6              ;    HEADER  FMSLASHMOD,6,'FM/MOD',DOCOLON
                                  - 4e-LP430 -                        Page   88

    329    000BF6              ;       DW DUP,TOR,SMSLASHREM
    330    000BF6              ;        DW TWODUP,lit,1,LESS,ANDD,qbran
    331    000BF6              ;        DEST  FMMOD1
    332    000BF6              ;        DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS
    333    000BF6              ;FMMOD1: DW RFROM,DROP,EXIT
    334    000BF6              
    335    000BF6              ; Fixed FM/MOD, added 12 nov 2012
    336    000BF6              ;C FM/MOD   d1 n1 -- n2 n3   floored signed
                                div'n
    337    000BF6              ;                            Ching-Tang Tseng 
                                Mar 24 2012
    338    000BF6              ;   DUP >R OVER OVER XOR >R 
    339    000BF6              ;   SM/REM 
    340    000BF6              ;   OVER R> 0< AND 
    341    000BF6              ;   IF SWAP R@ + SWAP 1 - 
    342    000BF6              ;   THEN R> DROP ; 
    343    000BF6              ; 1 0 2 FM/MOD(OK) . . 0 1  ok 
    344    000BF6              ; 7 0 9 FM/MOD(OK) . . 0 7  ok 
    345    000BF6              ; Ref. dpANS-6 section 3.2.2.1.
    346    000BF6                  HEADER  FMSLASHMOD,6,'FM/MOD',DOCOLON
    346.1  000000                      PUBLIC  FMSLASHMOD
    346.2  000BF6 ....                 DW      link
    346.3  000BF8 FF                   DB      0FFh       ; not immediate
    346.4  000BF9              link    SET     $
    346.5  000BF9 06                   DB      6
    346.6  000BFA 464D2F4D4F44         DB      'FM/MOD'
    346.7  000C00                      EVEN
    346.8  000C00                      IF      'DOCOLON'='DOCODE'
    346.9  000C00              FMSLASHMOD: DW     $+2
    346.10 000C00                      ELSE
    346.11 000C00 ....         FMSLASHMOD: DW      DOCOLON
    346.12 000C02                      ENDIF
    346.13 000C02                      ENDM
    347    000C02 ............*        DW DUP,TOR,OVER,OVER,XORR,TOR
    348    000C0E ....                 DW SMSLASHREM
    349    000C10 ............*        DW OVER,RFROM,ZEROLESS,ANDD,qbran
    350    000C1A                      DEST  FMMOD1
    350.1  000C1A 0C00                 DW      FMMOD1-$
    350.2  000C1C                      ENDM
    351    000C1C ............*        DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS
    352    000C26 ............ FMMOD1: DW RFROM,DROP,EXIT
    353    000C2C              
    354    000C2C              ;C *      n1 n2 -- n3       signed multiply
    355    000C2C              ;   M* DROP ;
    356    000C2C                  HEADER  STAR,1,'*',DOCOLON
    356.1  000000                      PUBLIC  STAR
    356.2  000C2C ....                 DW      link
    356.3  000C2E FF                   DB      0FFh       ; not immediate
    356.4  000C2F              link    SET     $
    356.5  000C2F 01                   DB      1
    356.6  000C30 2A                   DB      '*'
    356.7  000C31 00                   EVEN
    356.8  000C32                      IF      'DOCOLON'='DOCODE'
    356.9  000C32              STAR: DW     $+2
    356.10 000C32                      ELSE
    356.11 000C32 ....         STAR: DW      DOCOLON
    356.12 000C34                      ENDIF
    356.13 000C34                      ENDM
    357    000C34 ............         DW MSTAR,DROP,EXIT
    358    000C3A              
    359    000C3A              ;C /MOD   n1 n2 -- n3 n4    signed divide/rem'dr
    360    000C3A              ;   >R S>D R> FM/MOD ;
    361    000C3A                  HEADER  SLASHMOD,4,'/MOD',DOCOLON
    361.1  000000                      PUBLIC  SLASHMOD
    361.2  000C3A ....                 DW      link
    361.3  000C3C FF                   DB      0FFh       ; not immediate
    361.4  000C3D              link    SET     $
    361.5  000C3D 04                   DB      4
    361.6  000C3E 2F4D4F44             DB      '/MOD'
    361.7  000C42                      EVEN
    361.8  000C42                      IF      'DOCOLON'='DOCODE'
    361.9  000C42              SLASHMOD: DW     $+2
    361.10 000C42                      ELSE
    361.11 000C42 ....         SLASHMOD: DW      DOCOLON
    361.12 000C44                      ENDIF
    361.13 000C44                      ENDM
    362    000C44 ............*        DW TOR,STOD,RFROM,FMSLASHMOD,EXIT
    363    000C4E              
                                  - 4e-LP430 -                        Page   89

    364    000C4E              ;C /      n1 n2 -- n3       signed divide
    365    000C4E              ;   /MOD nip ;
    366    000C4E                  HEADER  SLASH,1,'/',DOCOLON
    366.1  000000                      PUBLIC  SLASH
    366.2  000C4E ....                 DW      link
    366.3  000C50 FF                   DB      0FFh       ; not immediate
    366.4  000C51              link    SET     $
    366.5  000C51 01                   DB      1
    366.6  000C52 2F                   DB      '/'
    366.7  000C53 00                   EVEN
    366.8  000C54                      IF      'DOCOLON'='DOCODE'
    366.9  000C54              SLASH: DW     $+2
    366.10 000C54                      ELSE
    366.11 000C54 ....         SLASH: DW      DOCOLON
    366.12 000C56                      ENDIF
    366.13 000C56                      ENDM
    367    000C56 ............         DW SLASHMOD,NIP,EXIT
    368    000C5C              
    369    000C5C              ;C MOD    n1 n2 -- n3       signed remainder
    370    000C5C              ;   /MOD DROP ;
    371    000C5C                  HEADER  MODD,3,'MOD',DOCOLON
    371.1  000000                      PUBLIC  MODD
    371.2  000C5C ....                 DW      link
    371.3  000C5E FF                   DB      0FFh       ; not immediate
    371.4  000C5F              link    SET     $
    371.5  000C5F 03                   DB      3
    371.6  000C60 4D4F44               DB      'MOD'
    371.7  000C63 00                   EVEN
    371.8  000C64                      IF      'DOCOLON'='DOCODE'
    371.9  000C64              MODD: DW     $+2
    371.10 000C64                      ELSE
    371.11 000C64 ....         MODD: DW      DOCOLON
    371.12 000C66                      ENDIF
    371.13 000C66                      ENDM
    372    000C66 ............         DW SLASHMOD,DROP,EXIT
    373    000C6C              
    374    000C6C              ;C */MOD  n1 n2 n3 -- n4 n5    n1*n2/n3,
                                rem&quot
    375    000C6C              ;   >R M* R> FM/MOD ;
    376    000C6C                  HEADER  SSMOD,5,'*/MOD',DOCOLON
    376.1  000000                      PUBLIC  SSMOD
    376.2  000C6C ....                 DW      link
    376.3  000C6E FF                   DB      0FFh       ; not immediate
    376.4  000C6F              link    SET     $
    376.5  000C6F 05                   DB      5
    376.6  000C70 2A2F4D4F44           DB      '*/MOD'
    376.7  000C75 00                   EVEN
    376.8  000C76                      IF      'DOCOLON'='DOCODE'
    376.9  000C76              SSMOD: DW     $+2
    376.10 000C76                      ELSE
    376.11 000C76 ....         SSMOD: DW      DOCOLON
    376.12 000C78                      ENDIF
    376.13 000C78                      ENDM
    377    000C78 ............*        DW TOR,MSTAR,RFROM,FMSLASHMOD,EXIT
    378    000C82              
    379    000C82              ;C */     n1 n2 n3 -- n4        n1*n2/n3
    380    000C82              ;   */MOD nip ;
    381    000C82                  HEADER  STARSLASH,2,'*/',DOCOLON
    381.1  000000                      PUBLIC  STARSLASH
    381.2  000C82 ....                 DW      link
    381.3  000C84 FF                   DB      0FFh       ; not immediate
    381.4  000C85              link    SET     $
    381.5  000C85 02                   DB      2
    381.6  000C86 2A2F                 DB      '*/'
    381.7  000C88                      EVEN
    381.8  000C88                      IF      'DOCOLON'='DOCODE'
    381.9  000C88              STARSLASH: DW     $+2
    381.10 000C88                      ELSE
    381.11 000C88 ....         STARSLASH: DW      DOCOLON
    381.12 000C8A                      ENDIF
    381.13 000C8A                      ENDM
    382    000C8A ............         DW SSMOD,NIP,EXIT
    383    000C90              
    384    000C90              ;C MAX    n1 n2 -- n3       signed maximum
    385    000C90              ;   2DUP < IF SWAP THEN DROP ;
    386    000C90                  HEADER  MAX,3,'MAX',DOCOLON
    386.1  000000                      PUBLIC  MAX
    386.2  000C90 ....                 DW      link
                                  - 4e-LP430 -                        Page   90

    386.3  000C92 FF                   DB      0FFh       ; not immediate
    386.4  000C93              link    SET     $
    386.5  000C93 03                   DB      3
    386.6  000C94 4D4158               DB      'MAX'
    386.7  000C97 00                   EVEN
    386.8  000C98                      IF      'DOCOLON'='DOCODE'
    386.9  000C98              MAX: DW     $+2
    386.10 000C98                      ELSE
    386.11 000C98 ....         MAX: DW      DOCOLON
    386.12 000C9A                      ENDIF
    386.13 000C9A                      ENDM
    387    000C9A ............         DW TWODUP,LESS,qbran
    388    000CA0                      DEST  MAX1
    388.1  000CA0 0400                 DW      MAX1-$
    388.2  000CA2                      ENDM
    389    000CA2 ....                 DW  SWAP
    390    000CA4 ........     MAX1:   DW DROP,EXIT
    391    000CA8              
    392    000CA8              ;C MIN    n1 n2 -- n3       signed minimum
    393    000CA8              ;   2DUP > IF SWAP THEN DROP ;
    394    000CA8                  HEADER  MIN,3,'MIN',DOCOLON
    394.1  000000                      PUBLIC  MIN
    394.2  000CA8 ....                 DW      link
    394.3  000CAA FF                   DB      0FFh       ; not immediate
    394.4  000CAB              link    SET     $
    394.5  000CAB 03                   DB      3
    394.6  000CAC 4D494E               DB      'MIN'
    394.7  000CAF 00                   EVEN
    394.8  000CB0                      IF      'DOCOLON'='DOCODE'
    394.9  000CB0              MIN: DW     $+2
    394.10 000CB0                      ELSE
    394.11 000CB0 ....         MIN: DW      DOCOLON
    394.12 000CB2                      ENDIF
    394.13 000CB2                      ENDM
    395    000CB2 ............         DW TWODUP,GREATER,qbran
    396    000CB8                      DEST  MIN1
    396.1  000CB8 0400                 DW      MIN1-$
    396.2  000CBA                      ENDM
    397    000CBA ....                 DW SWAP
    398    000CBC ........     MIN1:   DW DROP,EXIT
    399    000CC0              
    400    000CC0              ; DOUBLE OPERATORS =============================
                               =
    401    000CC0              
    402    000CC0              ;C 2@    a-addr -- x1 x2    fetch 2 cells
    403    000CC0              ;   DUP CELL+ @ SWAP @ ;
    404    000CC0              ;   the lower address will appear on top of
                                stack
    405    000CC0                  HEADER  TWOFETCH,2,'2@',DOCOLON
    405.1  000000                      PUBLIC  TWOFETCH
    405.2  000CC0 ....                 DW      link
    405.3  000CC2 FF                   DB      0FFh       ; not immediate
    405.4  000CC3              link    SET     $
    405.5  000CC3 02                   DB      2
    405.6  000CC4 3240                 DB      '2@'
    405.7  000CC6                      EVEN
    405.8  000CC6                      IF      'DOCOLON'='DOCODE'
    405.9  000CC6              TWOFETCH: DW     $+2
    405.10 000CC6                      ELSE
    405.11 000CC6 ....         TWOFETCH: DW      DOCOLON
    405.12 000CC8                      ENDIF
    405.13 000CC8                      ENDM
    406    000CC8 ............*        DW DUP,CELLPLUS,FETCH,SWAP,FETCH,EXIT
    407    000CD4              
    408    000CD4              ;C 2!    x1 x2 a-addr --    store 2 cells
    409    000CD4              ;   SWAP OVER ! CELL+ ! ;
    410    000CD4              ;   the top of stack is stored at the lower
                                adrs
    411    000CD4                  HEADER  TWOSTORE,2,'2!',DOCOLON
    411.1  000000                      PUBLIC  TWOSTORE
    411.2  000CD4 ....                 DW      link
    411.3  000CD6 FF                   DB      0FFh       ; not immediate
    411.4  000CD7              link    SET     $
    411.5  000CD7 02                   DB      2
    411.6  000CD8 3221                 DB      '2!'
    411.7  000CDA                      EVEN
    411.8  000CDA                      IF      'DOCOLON'='DOCODE'
    411.9  000CDA              TWOSTORE: DW     $+2
                                  - 4e-LP430 -                        Page   91

    411.10 000CDA                      ELSE
    411.11 000CDA ....         TWOSTORE: DW      DOCOLON
    411.12 000CDC                      ENDIF
    411.13 000CDC                      ENDM
    412    000CDC ............*        DW SWAP,OVER,STORE,CELLPLUS,STORE,EXIT
    413    000CE8              
    414    000CE8              ;C 2DROP  x1 x2 --          drop 2 cells
    415    000CE8              ;   DROP DROP ;
    416    000CE8                  HEADER  TWODROP,5,'2DROP',DOCOLON
    416.1  000000                      PUBLIC  TWODROP
    416.2  000CE8 ....                 DW      link
    416.3  000CEA FF                   DB      0FFh       ; not immediate
    416.4  000CEB              link    SET     $
    416.5  000CEB 05                   DB      5
    416.6  000CEC 3244524F50           DB      '2DROP'
    416.7  000CF1 00                   EVEN
    416.8  000CF2                      IF      'DOCOLON'='DOCODE'
    416.9  000CF2              TWODROP: DW     $+2
    416.10 000CF2                      ELSE
    416.11 000CF2 ....         TWODROP: DW      DOCOLON
    416.12 000CF4                      ENDIF
    416.13 000CF4                      ENDM
    417    000CF4 ............         DW DROP,DROP,EXIT
    418    000CFA              
    419    000CFA              ;C 2DUP   x1 x2 -- x1 x2 x1 x2   dup top 2
                                cells
    420    000CFA              ;   OVER OVER ;
    421    000CFA                  HEADER  TWODUP,4,'2DUP',DOCOLON
    421.1  000000                      PUBLIC  TWODUP
    421.2  000CFA ....                 DW      link
    421.3  000CFC FF                   DB      0FFh       ; not immediate
    421.4  000CFD              link    SET     $
    421.5  000CFD 04                   DB      4
    421.6  000CFE 32445550             DB      '2DUP'
    421.7  000D02                      EVEN
    421.8  000D02                      IF      'DOCOLON'='DOCODE'
    421.9  000D02              TWODUP: DW     $+2
    421.10 000D02                      ELSE
    421.11 000D02 ....         TWODUP: DW      DOCOLON
    421.12 000D04                      ENDIF
    421.13 000D04                      ENDM
    422    000D04 ............         DW OVER,OVER,EXIT
    423    000D0A              
    424    000D0A              ;C 2SWAP  x1 x2 x3 x4 -- x3 x4 x1 x2  per
                                diagram
    425    000D0A              ;   ROT >R ROT R> ;
    426    000D0A                  HEADER  TWOSWAP,5,'2SWAP',DOCOLON
    426.1  000000                      PUBLIC  TWOSWAP
    426.2  000D0A ....                 DW      link
    426.3  000D0C FF                   DB      0FFh       ; not immediate
    426.4  000D0D              link    SET     $
    426.5  000D0D 05                   DB      5
    426.6  000D0E 3253574150           DB      '2SWAP'
    426.7  000D13 00                   EVEN
    426.8  000D14                      IF      'DOCOLON'='DOCODE'
    426.9  000D14              TWOSWAP: DW     $+2
    426.10 000D14                      ELSE
    426.11 000D14 ....         TWOSWAP: DW      DOCOLON
    426.12 000D16                      ENDIF
    426.13 000D16                      ENDM
    427    000D16 ............*        DW ROT,TOR,ROT,RFROM,EXIT
    428    000D20              
    429    000D20              ;C 2OVER  x1 x2 x3 x4 -- x1 x2 x3 x4 x1
                                x2
    430    000D20              ;   >R >R 2DUP R> R> 2SWAP ;
    431    000D20                  HEADER  TWOOVER,5,'2OVER',DOCOLON
    431.1  000000                      PUBLIC  TWOOVER
    431.2  000D20 ....                 DW      link
    431.3  000D22 FF                   DB      0FFh       ; not immediate
    431.4  000D23              link    SET     $
    431.5  000D23 05                   DB      5
    431.6  000D24 324F564552           DB      '2OVER'
    431.7  000D29 00                   EVEN
    431.8  000D2A                      IF      'DOCOLON'='DOCODE'
    431.9  000D2A              TWOOVER: DW     $+2
    431.10 000D2A                      ELSE
    431.11 000D2A ....         TWOOVER: DW      DOCOLON
    431.12 000D2C                      ENDIF
                                  - 4e-LP430 -                        Page   92

    431.13 000D2C                      ENDM
    432    000D2C ............*        DW TOR,TOR,TWODUP,RFROM,RFROM
    433    000D36 ........             DW TWOSWAP,EXIT
    434    000D3A              
    435    000D3A              ; INPUT/OUTPUT =================================
                               =
    436    000D3A              
    437    000000              PUBLIC DOCR
    438    000D3A              
    439    000D3A              ;C COUNT   c-addr1 -- c-addr2 u  counted->adr/le
                               n
    440    000D3A              ;   DUP CHAR+ SWAP C@ ;
    441    000D3A                  HEADER  COUNT,5,'COUNT',DOCOLON
    441.1  000000                      PUBLIC  COUNT
    441.2  000D3A ....                 DW      link
    441.3  000D3C FF                   DB      0FFh       ; not immediate
    441.4  000D3D              link    SET     $
    441.5  000D3D 05                   DB      5
    441.6  000D3E 434F554E54           DB      'COUNT'
    441.7  000D43 00                   EVEN
    441.8  000D44                      IF      'DOCOLON'='DOCODE'
    441.9  000D44              COUNT: DW     $+2
    441.10 000D44                      ELSE
    441.11 000D44 ....         COUNT: DW      DOCOLON
    441.12 000D46                      ENDIF
    441.13 000D46                      ENDM
    442    000D46 ............*        DW DUP,CHARPLUS,SWAP,CFETCH,EXIT
    443    000D50              
    444    000D50              ;C DOCR      --               output newline
                                
    445    000D50              ;   0D EMIT 0A EMIT ;
    446    000D50                  HEADER  DOCR,4,'DOCR',DOCOLON
    446.1  000D50                      PUBLIC  DOCR
    446.2  000D50 ....                 DW      link
    446.3  000D52 FF                   DB      0FFh       ; not immediate
    446.4  000D53              link    SET     $
    446.5  000D53 04                   DB      4
    446.6  000D54 444F4352             DB      'DOCR'
    446.7  000D58                      EVEN
    446.8  000D58                      IF      'DOCOLON'='DOCODE'
    446.9  000D58              DOCR: DW     $+2
    446.10 000D58                      ELSE
    446.11 000D58 ....         DOCR: DW      DOCOLON
    446.12 000D5A                      ENDIF
    446.13 000D5A                      ENDM
    447    000D5A ....0D00....*        DW lit,0dh,EMIT,lit,0ah,EMIT,EXIT
    448    000D68              
    449    000D68              ;C CR      --               output newline
    450    000D68              ; userkey @ execute ;
    451    000D68                  HEADER  CR,2,'CR',DOCOLON
    451.1  000000                      PUBLIC  CR
    451.2  000D68 ....                 DW      link
    451.3  000D6A FF                   DB      0FFh       ; not immediate
    451.4  000D6B              link    SET     $
    451.5  000D6B 02                   DB      2
    451.6  000D6C 4352                 DB      'CR'
    451.7  000D6E                      EVEN
    451.8  000D6E                      IF      'DOCOLON'='DOCODE'
    451.9  000D6E              CR: DW     $+2
    451.10 000D6E                      ELSE
    451.11 000D6E ....         CR: DW      DOCOLON
    451.12 000D70                      ENDIF
    451.13 000D70                      ENDM
    452    000D70 ............*        DW NEWLINE,FETCH,EXECUTE,EXIT
    453    000D78              
    454    000D78              ;C SPACE   --               output a space
    455    000D78              ;   BL EMIT ;
    456    000D78                  HEADER  SPACE,5,'SPACE',DOCOLON
    456.1  000000                      PUBLIC  SPACE
    456.2  000D78 ....                 DW      link
    456.3  000D7A FF                   DB      0FFh       ; not immediate
    456.4  000D7B              link    SET     $
    456.5  000D7B 05                   DB      5
    456.6  000D7C 5350414345           DB      'SPACE'
    456.7  000D81 00                   EVEN
    456.8  000D82                      IF      'DOCOLON'='DOCODE'
    456.9  000D82              SPACE: DW     $+2
    456.10 000D82                      ELSE
                                  - 4e-LP430 -                        Page   93

    456.11 000D82 ....         SPACE: DW      DOCOLON
    456.12 000D84                      ENDIF
    456.13 000D84                      ENDM
    457    000D84 ............         DW BLANK,EMIT,EXIT
    458    000D8A              
    459    000D8A              ;C SPACES   n --            output n spaces
    460    000D8A              ;   BEGIN DUP WHILE SPACE 1- REPEAT DROP
                                ;
    461    000D8A                  HEADER  SPACES,6,'SPACES',DOCOLON
    461.1  000000                      PUBLIC  SPACES
    461.2  000D8A ....                 DW      link
    461.3  000D8C FF                   DB      0FFh       ; not immediate
    461.4  000D8D              link    SET     $
    461.5  000D8D 06                   DB      6
    461.6  000D8E 535041434553         DB      'SPACES'
    461.7  000D94                      EVEN
    461.8  000D94                      IF      'DOCOLON'='DOCODE'
    461.9  000D94              SPACES: DW     $+2
    461.10 000D94                      ELSE
    461.11 000D94 ....         SPACES: DW      DOCOLON
    461.12 000D96                      ENDIF
    461.13 000D96                      ENDM
    462    000D96 ........     SPCS1:  DW DUP,qbran
    463    000D9A                      DEST  SPCS2
    463.1  000D9A 0A00                 DW      SPCS2-$
    463.2  000D9C                      ENDM
    464    000D9C ............         DW SPACE,ONEMINUS,bran
    465    000DA2                      DEST  SPCS1
    465.1  000DA2 F4FF                 DW      SPCS1-$
    465.2  000DA4                      ENDM
    466    000DA4 ........     SPCS2:  DW DROP,EXIT
    467    000DA8              
    468    000DA8              ;Z umin     u1 u2 -- u      unsigned minimum
    469    000DA8              ;   2DUP U> IF SWAP THEN DROP ;
    470    000DA8                  HEADER  UMIN,4,'UMIN',DOCOLON
    470.1  000000                      PUBLIC  UMIN
    470.2  000DA8 ....                 DW      link
    470.3  000DAA FF                   DB      0FFh       ; not immediate
    470.4  000DAB              link    SET     $
    470.5  000DAB 04                   DB      4
    470.6  000DAC 554D494E             DB      'UMIN'
    470.7  000DB0                      EVEN
    470.8  000DB0                      IF      'DOCOLON'='DOCODE'
    470.9  000DB0              UMIN: DW     $+2
    470.10 000DB0                      ELSE
    470.11 000DB0 ....         UMIN: DW      DOCOLON
    470.12 000DB2                      ENDIF
    470.13 000DB2                      ENDM
    471    000DB2 ............         DW TWODUP,UGREATER,qbran
    472    000DB8                      DEST  UMIN1
    472.1  000DB8 0400                 DW      UMIN1-$
    472.2  000DBA                      ENDM
    473    000DBA ....                 DW SWAP
    474    000DBC ........     UMIN1:  DW DROP,EXIT
    475    000DC0              
    476    000DC0              ;Z umax    u1 u2 -- u       unsigned maximum
    477    000DC0              ;   2DUP U< IF SWAP THEN DROP ;
    478    000DC0                  HEADER  UMAX,4,'UMAX',DOCOLON
    478.1  000000                      PUBLIC  UMAX
    478.2  000DC0 ....                 DW      link
    478.3  000DC2 FF                   DB      0FFh       ; not immediate
    478.4  000DC3              link    SET     $
    478.5  000DC3 04                   DB      4
    478.6  000DC4 554D4158             DB      'UMAX'
    478.7  000DC8                      EVEN
    478.8  000DC8                      IF      'DOCOLON'='DOCODE'
    478.9  000DC8              UMAX: DW     $+2
    478.10 000DC8                      ELSE
    478.11 000DC8 ....         UMAX: DW      DOCOLON
    478.12 000DCA                      ENDIF
    478.13 000DCA                      ENDM
    479    000DCA ............         DW TWODUP,ULESS,qbran
    480    000DD0                      DEST  UMAX1
    480.1  000DD0 0400                 DW      UMAX1-$
    480.2  000DD2                      ENDM
    481    000DD2 ....                 DW SWAP
    482    000DD4 ........     UMAX1:  DW DROP,EXIT
    483    000DD8              
                                  - 4e-LP430 -                        Page   94

    484    000DD8              ; C .ERR#  n --            print error
                                number
    485    000DD8                  HEADER DOTERRN,5,'.ERR#',DOCOLON
    485.1  000000                      PUBLIC  DOTERRN
    485.2  000DD8 ....                 DW      link
    485.3  000DDA FF                   DB      0FFh       ; not immediate
    485.4  000DDB              link    SET     $
    485.5  000DDB 05                   DB      5
    485.6  000DDC 2E45525223           DB      '.ERR#'
    485.7  000DE1 00                   EVEN
    485.8  000DE2                      IF      'DOCOLON'='DOCODE'
    485.9  000DE2              DOTERRN: DW     $+2
    485.10 000DE2                      ELSE
    485.11 000DE2 ....         DOTERRN: DW      DOCOLON
    485.12 000DE4                      ENDIF
    485.13 000DE4                      ENDM
    486    000DE4 ....1500....         DW lit,15H,EMIT  ; emit a NAK ($15)
    487    000DEA ....3F00....         DW lit,3FH,EMIT
    488    000DF0 ............*        DW BASE,FETCH,TOR,DECIMAL
    489    000DF8 ....                 DW DOT
    490    000DFA ............         DW RFROM,BASE,STORE
    491    000E00 ....                 DW EXIT
    492    000E02              
    493    000E02              ; C ?TIB  adr1 adr2 --            error if line
                                too long
    494    000E02                  HEADERLESS QTIB,4,'?TIB',DOCOLON
    494.1  000000                      PUBLIC  QTIB
    494.2  000E02                      IF      'DOCOLON'='DOCODE'
    494.3  000E02              QTIB: DW     $+2
    494.4  000E02                      ELSE
    494.5  000E02 ....         QTIB: DW      DOCOLON
    494.6  000E04                      ENDIF
    494.7  000E04                      ENDM
    495    000E04 ........             DW GREATER,qbran
    496    000E08                      DEST QTIB1
    496.1  000E08 0C00                 DW      QTIB1-$
    496.2  000E0A                      ENDM
    497    000E0A ....9601....         DW lit,406,DOTERRN
    498    000E10 ........             DW CR,ABORT
    499    000E14 ....         QTIB1:  DW EXIT
    500    000E16              
    501    000E16              ;C ACCEPT  c-addr +n -- +n'  get line from
                                term'l
    502    000E16              ;   OVER + 1- OVER      -- sa ea a
    503    000E16              ;   BEGIN KEY           -- sa ea a c
    504    000E16              ;   DUP 0D <> WHILE
    505    000E16              ;       DUP EMIT        -- sa ea a c
    506    000E16              ;       DUP 8 = IF  DROP 1-    >R OVER R>
                                UMAX
    507    000E16              ;             ELSE  OVER C! 1+ OVER UMIN
    508    000E16              ;       THEN            -- sa ea a
    509    000E16              ;   REPEAT              -- sa ea a c
    510    000E16              ;   DROP NIP SWAP - ;
    511    000E16                  HEADER  ACCEPT,6,'ACCEPT',DOCOLON
    511.1  000000                      PUBLIC  ACCEPT
    511.2  000E16 ....                 DW      link
    511.3  000E18 FF                   DB      0FFh       ; not immediate
    511.4  000E19              link    SET     $
    511.5  000E19 06                   DB      6
    511.6  000E1A 414343455054         DB      'ACCEPT'
    511.7  000E20                      EVEN
    511.8  000E20                      IF      'DOCOLON'='DOCODE'
    511.9  000E20              ACCEPT: DW     $+2
    511.10 000E20                      ELSE
    511.11 000E20 ....         ACCEPT: DW      DOCOLON
    511.12 000E22                      ENDIF
    511.13 000E22                      ENDM
    512    000E22 ............*        DW OVER,PLUS,ONEMINUS,OVER
    513    000E2A              ACC1: ;  DW KEY,DUP,lit,0DH,NOTEQUAL,qbran
    514    000E2A ....                 DW KEY
    515    000E2C ........0D00*        DW DUP,lit,0DH,NOTEQUAL ; ( -- c f )
                                                                CR
    516    000E34              ;        DW OVER,lit,0AH,NOTEQUAL ; ( -- c f f )
                                LF
    517    000E34              ;        DW ANDD
    518    000E34 ....                 DW qbran
    519    000E36                      DEST  ACC5
    519.1  000E36 3A00                 DW      ACC5-$
                                  - 4e-LP430 -                        Page   95

    519.2  000E38                      ENDM
    520    000E38 ........             DW DUP,EMIT
    521    000E3C              ;        DW DUP,STORELEDS ; testing
    522    000E3C ........0800*        DW DUP,lit,8,EQUAL,qbran  ;mk BS
                                                                  received?
    523    000E46                      DEST  ACC3
    523.1  000E46 1A00                 DW      ACC3-$
    523.2  000E48                      ENDM
    524    000E48 ............*        DW DROP,ONEMINUS,TOR,OVER,RFROM,UMAX ;mk
                                            backspace handling
    525    000E54 ........0800*        DW SPACE,lit,8,EMIT ;mk $08 == BS (for
                                                            tera term and
                                                            hyterterminal)
    526    000E5C ....                 DW bran
    527    000E5E                      DEST  ACC4
    527.1  000E5E 0E00                 DW      ACC4-$
    527.2  000E60                      ENDM
    528    000E60              ;       ( -- sa ea a c )
    529    000E60 ............ ACC3:   DW OVER,CSTORE,ONEPLUS
    530    000E66              ;       ( -- sa ea a+1 )
    531    000E66              ;        DW OVER,UMIN  ; einfacher zähler
                                stillstand
    532    000E66 ............         DW TWODUP,SWAP,QTIB ; line too
                                                            long?
    533    000E6C ....         ACC4:   DW bran
    534    000E6E                      DEST  ACC1
    534.1  000E6E BCFF                 DW      ACC1-$
    534.2  000E70                      ENDM
    535    000E70 ............*ACC5:   DW DROP,NIP,SWAP,MINUS,EXIT
    536    000E7A              
    537    000E7A              ;C TYPE    c-addr +n --     type line to
                                term'l
    538    000E7A              ;   ?DUP IF
    539    000E7A              ;     OVER + SWAP DO I C@ EMIT LOOP
    540    000E7A              ;   ELSE DROP THEN ;
    541    000E7A                  HEADER  TYP,4,'TYPE',DOCOLON
    541.1  000000                      PUBLIC  TYP
    541.2  000E7A ....                 DW      link
    541.3  000E7C FF                   DB      0FFh       ; not immediate
    541.4  000E7D              link    SET     $
    541.5  000E7D 04                   DB      4
    541.6  000E7E 54595045             DB      'TYPE'
    541.7  000E82                      EVEN
    541.8  000E82                      IF      'DOCOLON'='DOCODE'
    541.9  000E82              TYP: DW     $+2
    541.10 000E82                      ELSE
    541.11 000E82 ....         TYP: DW      DOCOLON
    541.12 000E84                      ENDIF
    541.13 000E84                      ENDM
    542    000E84 ........             DW QDUP,qbran
    543    000E88                      DEST  TYP4
    543.1  000E88 1800                 DW      TYP4-$
    543.2  000E8A                      ENDM
    544    000E8A ............*        DW OVER,PLUS,SWAP,xdo
    545    000E92 ............*TYP3:   DW II,CFETCH,EMIT,xloop
    546    000E9A                      DEST  TYP3
    546.1  000E9A F8FF                 DW      TYP3-$
    546.2  000E9C                      ENDM
    547    000E9C ....                 DW bran
    548    000E9E                      DEST  TYP5
    548.1  000E9E 0400                 DW      TYP5-$
    548.2  000EA0                      ENDM
    549    000EA0 ....         TYP4:   DW DROP
    550    000EA2 ....         TYP5:   DW EXIT
    551    000EA4              
    552    000EA4              #define ITYPE TYP
    553    000EA4              #define ICOUNT COUNT
    554    000EA4              
    555    000EA4              ; HARVARD MODEL EXTENSIONS (split Code &
                                Data)
    556    000EA4              
    557    000EA4              /*
    558    000EA4              ;Z ICOUNT  c-addr1 -- c-addr2 u  counted->adr/le
                               n
    559    000EA4              ;   DUP CHAR+ SWAP IC@ ;          from Code
                                space
    560    000EA4                  HEADER  ICOUNT,6,'ICOUNT',DOCOLON
    561    000EA4                      DW DUP,CHARPLUS,SWAP,ICFETCH,EXIT
                                  - 4e-LP430 -                        Page   96

    562    000EA4              
    563    000EA4              ;Z ITYPE   c-addr +n --       type line to
                                term'l
    564    000EA4              ;   ?DUP IF                       from Code
                                space
    565    000EA4              ;     OVER + SWAP DO I IC@ EMIT LOOP
    566    000EA4              ;   ELSE DROP THEN ;
    567    000EA4                  HEADER  ITYPE,5,'ITYPE',DOCOLON
    568    000EA4                      DW QDUP,qbran
    569    000EA4                      DEST  ITYP4
    570    000EA4                      DW OVER,PLUS,SWAP,xdo
    571    000EA4              ITYP3:  DW II,ICFETCH,EMIT,xloop
    572    000EA4                      DEST  ITYP3
    573    000EA4                      DW bran
    574    000EA4                      DEST  ITYP5
    575    000EA4              ITYP4:  DW DROP
    576    000EA4              ITYP5:  DW EXIT
    577    000EA4              */
    578    000EA4              
    579    000EA4              
    580    000EA4              ;Z (IS")     -- c-addr u   run-time code for
                                S"
    581    000EA4              ;   R> ICOUNT 2DUP + ALIGNED >R  ;
    582    000EA4              ; Harvard model, for string stored in Code
                                space
    583    000EA4              ; e.g. as used by ."
    584    000EA4                  HEADER  XISQUOTE,5,'(IS")',DOCOLON
    584.1  000000                      PUBLIC  XISQUOTE
    584.2  000EA4 ....                 DW      link
    584.3  000EA6 FF                   DB      0FFh       ; not immediate
    584.4  000EA7              link    SET     $
    584.5  000EA7 05                   DB      5
    584.6  000EA8 2849532229           DB      '(IS")'
    584.7  000EAD 00                   EVEN
    584.8  000EAE                      IF      'DOCOLON'='DOCODE'
    584.9  000EAE              XISQUOTE: DW     $+2
    584.10 000EAE                      ELSE
    584.11 000EAE ....         XISQUOTE: DW      DOCOLON
    584.12 000EB0                      ENDIF
    584.13 000EB0                      ENDM
    585    000EB0 ............*        DW RFROM,ICOUNT,TWODUP,PLUS,ALIGNED,TOR
    586    000EBC ....                 DW EXIT
    587    000EBE              
    588    000EBE              ;Z (S")     -- c-addr u   run-time code for
                                S"
    589    000EBE              ;   R@ I@                     get Data
                                address
    590    000EBE              ;   R> CELL+ DUP IC@ CHAR+    -- Dadr Radr+2
                                n+1
    591    000EBE              ;   2DUP + ALIGNED >R         -- Dadr Iadr
                                n+1
    592    000EBE              ;   >R OVER R> I->D           -- Dadr
    593    000EBE              ;   COUNT ;
    594    000EBE              ; Harvard model, for string stored in Code
                                space
    595    000EBE              ; which is copied to Data space.
    596    000EBE                  HEADER  XSQUOTE,4,'(S")',DOCOLON
    596.1  000000                      PUBLIC  XSQUOTE
    596.2  000EBE ....                 DW      link
    596.3  000EC0 FF                   DB      0FFh       ; not immediate
    596.4  000EC1              link    SET     $
    596.5  000EC1 04                   DB      4
    596.6  000EC2 28532229             DB      '(S")'
    596.7  000EC6                      EVEN
    596.8  000EC6                      IF      'DOCOLON'='DOCODE'
    596.9  000EC6              XSQUOTE: DW     $+2
    596.10 000EC6                      ELSE
    596.11 000EC6 ....         XSQUOTE: DW      DOCOLON
    596.12 000EC8                      ENDIF
    596.13 000EC8                      ENDM
    597    000EC8 ........             DW RFETCH,IFETCH
    598    000ECC ............*        DW RFROM,CELLPLUS,DUP,ICFETCH,CHARPLUS
    599    000ED6 ............*        DW TWODUP,PLUS,ALIGNED,TOR
    600    000EDE ............*        DW TOR,OVER,RFROM,ITOD,COUNT,EXIT
    601    000EEA              
    602    000EEA              ;Z IS"      --            compile in-line
                                string
    603    000EEA              ;   COMPILE (IS")  [ HEX ]
                                  - 4e-LP430 -                        Page   97

    604    000EEA              ;   22 PARSE     ( -- c-addr n ) 
    605    000EEA              ;   DUP >R IC,  IHERE R@ D->I
    606    000EEA              ;   R> IALLOT ALIGN ; IMMEDIATE
    607    000EEA              ; Harvard model: string is stored in Code
                                space
    608    000EEA                  IMMED  ISQUOTE,3,'IS"',DOCOLON
    608.1  000000                      PUBLIC  ISQUOTE
    608.2  000EEA ....                 DW      link
    608.3  000EEC FE                   DB      0FEh      // ; immediate
                                                                   (LSB=0)
    608.4  000EED              link    SET     $
    608.5  000EED 03                   DB      3
    608.6  000EEE 495322               DB      'IS"'
    608.7  000EF1 00                   EVEN
    608.8  000EF2                      IF      'DOCOLON'='DOCODE'
    608.9  000EF2              ISQUOTE: DW     $+2
    608.10 000EF2                      ELSE
    608.11 000EF2 ....         ISQUOTE: DW      DOCOLON
    608.12 000EF4                      ENDIF
    608.13 000EF4                      ENDM
    609    000EF4 ............         DW lit,XISQUOTE,COMMAXT
    610    000EFA ....2200....         DW lit,22H,PARSE
    611    000F00 ............*        DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI
    612    000F0C ............*        DW RFROM,IALLOT,ALIGNN,EXIT
    613    000F14              
    614    000F14              ;Z IS"      --            compile in-line string
                                 OLD DEF'N
    615    000F14              ;   COMPILE (IS")  [ HEX ]
    616    000F14              ;   22 IWORD
    617    000F14              ;   IC@ 1+ ALIGNED IALLOT ; IMMEDIATE
    618    000F14              ; Harvard model: string is stored in Code
                                space
    619    000F14              ;   IMMED  ISQUOTE,3,'IS"',DOCOLON
    620    000F14              ;       DW lit,XISQUOTE,COMMAXT
    621    000F14              ;       DW lit,22H,IWORD
    622    000F14              ;       DW ICFETCH,ONEPLUS,ALIGNED,IALLOT,EXIT
    623    000F14              
    624    000F14              ;C S"       --             compile in-line
                                string
    625    000F14              ;   COMPILE (S")  [ HEX ]
    626    000F14              ;   HERE I,                     data address
    627    000F14              ;   22 PARSE     ( -- c-addr n ) 
    628    000F14              ;   DUP >R IC,  IHERE R@ D->I
    629    000F14              ;   R@ 1+ ALLOT                 reserve RAM
                                space
    630    000F14              ;   R> IALLOT ALIGN ; IMMEDIATE
    631    000F14              ; Harvard model: string is stored in Code
                                space
    632    000F14                  IMMED  SQUOTE,2,'S"',DOCOLON
    632.1  000000                      PUBLIC  SQUOTE
    632.2  000F14 ....                 DW      link
    632.3  000F16 FE                   DB      0FEh      // ; immediate
                                                                 (LSB=0)
    632.4  000F17              link    SET     $
    632.5  000F17 02                   DB      2
    632.6  000F18 5322                 DB      'S"'
    632.7  000F1A                      EVEN
    632.8  000F1A                      IF      'DOCOLON'='DOCODE'
    632.9  000F1A              SQUOTE: DW     $+2
    632.10 000F1A                      ELSE
    632.11 000F1A ....         SQUOTE: DW      DOCOLON
    632.12 000F1C                      ENDIF
    632.13 000F1C                      ENDM
    633    000F1C ............         DW lit,XSQUOTE,COMMAXT
    634    000F22 ............*        DW HERE,ICOMMA,lit,22H,PARSE
    635    000F2C ............*        DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI
    636    000F38 ............         DW RFETCH,ONEPLUS,ALLOT
    637    000F3E ............*        DW RFROM,IALLOT,ALIGNN,EXIT
    638    000F46              
    639    000F46              ;C S"       --             compile in-line
                                string  OLD DEF'N
    640    000F46              ;   COMPILE (S")  [ HEX ]
    641    000F46              ;   HERE I,                     data address
    642    000F46              ;   22 IWORD
    643    000F46              ;   IC@ 1+ ALIGNED
    644    000F46              ;   DUP ALLOT IALLOT ; IMMEDIATE
    645    000F46              ; Harvard model: string is stored in Code
                                space
                                  - 4e-LP430 -                        Page   98

    646    000F46              ;    IMMED  SQUOTE,2,'S"',DOCOLON
    647    000F46              ;        DW lit,XSQUOTE,COMMAXT
    648    000F46              ;        DW HERE,ICOMMA,lit,22H,IWORD
    649    000F46              ;        DW ICFETCH,ONEPLUS,ALIGNED
    650    000F46              ;        DW DUP,ALLOT,IALLOT,EXIT
    651    000F46              
    652    000F46              ;C ."       --         compile string to
                                print
    653    000F46              ;   POSTPONE IS"  POSTPONE ITYPE ; IMMEDIATE
    654    000F46                  IMMED  DOTQUOTE,2,'."',DOCOLON
    654.1  000000                      PUBLIC  DOTQUOTE
    654.2  000F46 ....                 DW      link
    654.3  000F48 FE                   DB      0FEh      // ; immediate
                                                                   (LSB=0)
    654.4  000F49              link    SET     $
    654.5  000F49 02                   DB      2
    654.6  000F4A 2E22                 DB      '."'
    654.7  000F4C                      EVEN
    654.8  000F4C                      IF      'DOCOLON'='DOCODE'
    654.9  000F4C              DOTQUOTE: DW     $+2
    654.10 000F4C                      ELSE
    654.11 000F4C ....         DOTQUOTE: DW      DOCOLON
    654.12 000F4E                      ENDIF
    654.13 000F4E                      ENDM
    655    000F4E ....                 DW ISQUOTE
    656    000F50 ............         DW lit,ITYPE,COMMAXT
    657    000F56 ....                 DW EXIT
    658    000F58              
    659    000F58              ;Z IWORD     c -- c-addr       WORD to Code
                                space
    660    000F58              ;   WORD
    661    000F58              ;   IHERE TUCK OVER C@ CHAR+ D->I ;
    662    000F58                  HEADER  IWORD,5,'IWORD',DOCOLON
    662.1  000000                      PUBLIC  IWORD
    662.2  000F58 ....                 DW      link
    662.3  000F5A FF                   DB      0FFh       ; not immediate
    662.4  000F5B              link    SET     $
    662.5  000F5B 05                   DB      5
    662.6  000F5C 49574F5244           DB      'IWORD'
    662.7  000F61 00                   EVEN
    662.8  000F62                      IF      'DOCOLON'='DOCODE'
    662.9  000F62              IWORD: DW     $+2
    662.10 000F62                      ELSE
    662.11 000F62 ....         IWORD: DW      DOCOLON
    662.12 000F64                      ENDIF
    662.13 000F64                      ENDM
    663    000F64 ....                 DW WORDD
    664    000F66 ............*IWORD1: DW IHERE,TUCK,OVER,CFETCH
    665    000F6E ............         DW CHARPLUS,DTOI,EXIT
    666    000F74              
    667    000F74              ;Z IWORDC     c -- c-addr       maybe capitalize
                                WORD to Code space
    668    000F74              ;   WORD CAPITALIZE
    669    000F74              ;   IHERE TUCK OVER C@ CHAR+ D->I ;
    670    000F74              ;    HEADER  IWORDC,6,'IWORDC',DOCOLON
    671    000F74                   HEADLESS IWORDC, DOCOLON
    671.1  000000                      PUBLIC  IWORDC
    671.2  000F74                      IF      'DOCOLON'='DOCODE'
    671.3  000F74              IWORDC: DW     $+2
    671.4  000F74                      ELSE
    671.5  000F74 ....         IWORDC: DW      DOCOLON
    671.6  000F76                      ENDIF
    671.7  000F76                      ENDM
    672    000F76 ........             DW WORDD, CAPITALIZE
    673    000F7A ....                 DW bran
    674    000F7C                      DEST IWORD1
    674.1  000F7C EAFF                 DW      IWORD1-$
    674.2  000F7E                      ENDM
    675    000F7E              
    676    000F7E              ; SEPARATE HEADER EXTENSIONS ARE NOT USED
    677    000F7E              #define HCOUNT ICOUNT
    678    000F7E              #define HTYPE  ITYPE
    679    000F7E              #define HWORD  IWORDC
    680    000F7E              
    681    000F7E              ; NUMERIC OUTPUT ===============================
                               =
    682    000F7E              ; Numeric conversion is done l.s.digit first,
                                so
                                  - 4e-LP430 -                        Page   99

    683    000F7E              ; the output buffer is built backwards in
                                memory.
    684    000F7E              
    685    000F7E              ; Some double-precision arithmetic operators
                                are
    686    000F7E              ; needed to implement ANSI numeric conversion.
    687    000F7E              
    688    000F7E              ;Z UD/MOD   ud1 u2 -- u3 ud4   32/16->32
                                divide
    689    000F7E              ;   >R 0 R@ UM/MOD  ROT ROT R> UM/MOD ROT
                                ;
    690    000F7E                  HEADER  UDSLASHMOD,6,'UD/MOD',DOCOLON
    690.1  000000                      PUBLIC  UDSLASHMOD
    690.2  000F7E ....                 DW      link
    690.3  000F80 FF                   DB      0FFh       ; not immediate
    690.4  000F81              link    SET     $
    690.5  000F81 06                   DB      6
    690.6  000F82 55442F4D4F44         DB      'UD/MOD'
    690.7  000F88                      EVEN
    690.8  000F88                      IF      'DOCOLON'='DOCODE'
    690.9  000F88              UDSLASHMOD: DW     $+2
    690.10 000F88                      ELSE
    690.11 000F88 ....         UDSLASHMOD: DW      DOCOLON
    690.12 000F8A                      ENDIF
    690.13 000F8A                      ENDM
    691    000F8A ............*        DW TOR,ZERO,RFETCH,UMSLASHMOD,ROT,ROT
    692    000F96 ............*        DW RFROM,UMSLASHMOD,ROT,EXIT
    693    000F9E              
    694    000F9E              ;Z UD*      ud1 d2 -- ud3      32*16->32
                                multiply
    695    000F9E              ;   DUP >R UM* DROP  SWAP R> UM* ROT +
                                ;
    696    000F9E                  HEADER  UDSTAR,3,'UD*',DOCOLON
    696.1  000000                      PUBLIC  UDSTAR
    696.2  000F9E ....                 DW      link
    696.3  000FA0 FF                   DB      0FFh       ; not immediate
    696.4  000FA1              link    SET     $
    696.5  000FA1 03                   DB      3
    696.6  000FA2 55442A               DB      'UD*'
    696.7  000FA5 00                   EVEN
    696.8  000FA6                      IF      'DOCOLON'='DOCODE'
    696.9  000FA6              UDSTAR: DW     $+2
    696.10 000FA6                      ELSE
    696.11 000FA6 ....         UDSTAR: DW      DOCOLON
    696.12 000FA8                      ENDIF
    696.13 000FA8                      ENDM
    697    000FA8 ............*        DW DUP,TOR,UMSTAR,DROP
    698    000FB0 ............*        DW SWAP,RFROM,UMSTAR,ROT,PLUS,EXIT
    699    000FBC              
    700    000FBC              ;C HOLD  char --        add char to output
                                string
    701    000FBC              ;   -1 HP +!  HP @ C! ;
    702    000FBC                  HEADER  HOLD,4,'HOLD',DOCOLON
    702.1  000000                      PUBLIC  HOLD
    702.2  000FBC ....                 DW      link
    702.3  000FBE FF                   DB      0FFh       ; not immediate
    702.4  000FBF              link    SET     $
    702.5  000FBF 04                   DB      4
    702.6  000FC0 484F4C44             DB      'HOLD'
    702.7  000FC4                      EVEN
    702.8  000FC4                      IF      'DOCOLON'='DOCODE'
    702.9  000FC4              HOLD: DW     $+2
    702.10 000FC4                      ELSE
    702.11 000FC4 ....         HOLD: DW      DOCOLON
    702.12 000FC6                      ENDIF
    702.13 000FC6                      ENDM
    703    000FC6 ....FFFF....*        DW lit,-1,HP,PLUSSTORE
    704    000FCE ............*        DW HP,FETCH,CSTORE,EXIT
    705    000FD6              
    706    000FD6              ;C <#    --             begin numeric conversion
    707    000FD6              ;   PAD HP ! ;          (initialize Hold
                                Pointer)
    708    000FD6                  HEADER  LESSNUM,2,'<#',DOCOLON
    708.1  000000                      PUBLIC  LESSNUM
    708.2  000FD6 ....                 DW      link
    708.3  000FD8 FF                   DB      0FFh       ; not immediate
    708.4  000FD9              link    SET     $
    708.5  000FD9 02                   DB      2
                                  - 4e-LP430 -                        Page  100

    708.6  000FDA 3C23                 DB      '<#'
    708.7  000FDC                      EVEN
    708.8  000FDC                      IF      'DOCOLON'='DOCODE'
    708.9  000FDC              LESSNUM: DW     $+2
    708.10 000FDC                      ELSE
    708.11 000FDC ....         LESSNUM: DW      DOCOLON
    708.12 000FDE                      ENDIF
    708.13 000FDE                      ENDM
    709    000FDE ............*        DW PAD,HP,STORE,EXIT
    710    000FE6              
    711    000FE6              ;Z >digit   n -- c      convert to 0..9A..Z
    712    000FE6              ;   [ HEX ] DUP 9 > 7 AND + 30 + ;
    713    000FE6                  HEADER  TODIGIT,6,'>DIGIT',DOCOLON
    713.1  000000                      PUBLIC  TODIGIT
    713.2  000FE6 ....                 DW      link
    713.3  000FE8 FF                   DB      0FFh       ; not immediate
    713.4  000FE9              link    SET     $
    713.5  000FE9 06                   DB      6
    713.6  000FEA 3E4449474954         DB      '>DIGIT'
    713.7  000FF0                      EVEN
    713.8  000FF0                      IF      'DOCOLON'='DOCODE'
    713.9  000FF0              TODIGIT: DW     $+2
    713.10 000FF0                      ELSE
    713.11 000FF0 ....         TODIGIT: DW      DOCOLON
    713.12 000FF2                      ENDIF
    713.13 000FF2                      ENDM
    714    000FF2 ........0900*        DW DUP,lit,9,GREATER,lit,7,ANDD,PLUS
    715    001002 ....3000....*        DW lit,30H,PLUS,EXIT
    716    00100A              
    717    00100A              ;C #     ud1 -- ud2     convert 1 digit of
                                output
    718    00100A              ;   BASE @ UD/MOD ROT >digit HOLD ;
    719    00100A                  HEADER  NUM,1,'#',DOCOLON
    719.1  000000                      PUBLIC  NUM
    719.2  00100A ....                 DW      link
    719.3  00100C FF                   DB      0FFh       ; not immediate
    719.4  00100D              link    SET     $
    719.5  00100D 01                   DB      1
    719.6  00100E 23                   DB      '#'
    719.7  00100F 00                   EVEN
    719.8  001010                      IF      'DOCOLON'='DOCODE'
    719.9  001010              NUM: DW     $+2
    719.10 001010                      ELSE
    719.11 001010 ....         NUM: DW      DOCOLON
    719.12 001012                      ENDIF
    719.13 001012                      ENDM
    720    001012 ............*        DW BASE,FETCH,UDSLASHMOD,ROT,TODIGIT
    721    00101C ........             DW HOLD,EXIT
    722    001020              
    723    001020              ;C #S    ud1 -- ud2     convert remaining
                                digits
    724    001020              ;   BEGIN # 2DUP OR 0= UNTIL ;
    725    001020                  HEADER  NUMS,2,'#S',DOCOLON
    725.1  000000                      PUBLIC  NUMS
    725.2  001020 ....                 DW      link
    725.3  001022 FF                   DB      0FFh       ; not immediate
    725.4  001023              link    SET     $
    725.5  001023 02                   DB      2
    725.6  001024 2353                 DB      '#S'
    725.7  001026                      EVEN
    725.8  001026                      IF      'DOCOLON'='DOCODE'
    725.9  001026              NUMS: DW     $+2
    725.10 001026                      ELSE
    725.11 001026 ....         NUMS: DW      DOCOLON
    725.12 001028                      ENDIF
    725.13 001028                      ENDM
    726    001028 ............*NUMS1:  DW NUM,TWODUP,ORR,ZEROEQUAL,qbran
    727    001032                      DEST  NUMS1
    727.1  001032 F6FF                 DW      NUMS1-$
    727.2  001034                      ENDM
    728    001034 ....                 DW EXIT
    729    001036              
    730    001036              ;C #>    ud1 -- c-addr u    end conv., get
                                string
    731    001036              ;   2DROP HP @ PAD OVER - ;
    732    001036                  HEADER  NUMGREATER,2,'#>',DOCOLON
    732.1  000000                      PUBLIC  NUMGREATER
    732.2  001036 ....                 DW      link
                                  - 4e-LP430 -                        Page  101

    732.3  001038 FF                   DB      0FFh       ; not immediate
    732.4  001039              link    SET     $
    732.5  001039 02                   DB      2
    732.6  00103A 233E                 DB      '#>'
    732.7  00103C                      EVEN
    732.8  00103C                      IF      'DOCOLON'='DOCODE'
    732.9  00103C              NUMGREATER: DW     $+2
    732.10 00103C                      ELSE
    732.11 00103C ....         NUMGREATER: DW      DOCOLON
    732.12 00103E                      ENDIF
    732.13 00103E                      ENDM
    733    00103E ............*        DW TWODROP,HP,FETCH,PAD,OVER,MINUS,EXIT
    734    00104C              
    735    00104C              ;C SIGN  n --           add minus sign if
                                n<0
    736    00104C              ;   0< IF 2D HOLD THEN ;
    737    00104C                  HEADER  SIGN,4,'SIGN',DOCOLON
    737.1  000000                      PUBLIC  SIGN
    737.2  00104C ....                 DW      link
    737.3  00104E FF                   DB      0FFh       ; not immediate
    737.4  00104F              link    SET     $
    737.5  00104F 04                   DB      4
    737.6  001050 5349474E             DB      'SIGN'
    737.7  001054                      EVEN
    737.8  001054                      IF      'DOCOLON'='DOCODE'
    737.9  001054              SIGN: DW     $+2
    737.10 001054                      ELSE
    737.11 001054 ....         SIGN: DW      DOCOLON
    737.12 001056                      ENDIF
    737.13 001056                      ENDM
    738    001056 ........             DW ZEROLESS,qbran
    739    00105A                      DEST  SIGN1
    739.1  00105A 0800                 DW      SIGN1-$
    739.2  00105C                      ENDM
    740    00105C ....2D00....         DW lit,2DH,HOLD
    741    001062 ....         SIGN1:  DW EXIT
    742    001064              
    743    001064              ;C U.    u --           display u unsigned
    744    001064              ;   <# 0 #S #> TYPE SPACE ;
    745    001064                  HEADER  UDOT,2,'U.',DOCOLON
    745.1  000000                      PUBLIC  UDOT
    745.2  001064 ....                 DW      link
    745.3  001066 FF                   DB      0FFh       ; not immediate
    745.4  001067              link    SET     $
    745.5  001067 02                   DB      2
    745.6  001068 552E                 DB      'U.'
    745.7  00106A                      EVEN
    745.8  00106A                      IF      'DOCOLON'='DOCODE'
    745.9  00106A              UDOT: DW     $+2
    745.10 00106A                      ELSE
    745.11 00106A ....         UDOT: DW      DOCOLON
    745.12 00106C                      ENDIF
    745.13 00106C                      ENDM
    746    00106C ............*        DW LESSNUM,ZERO,NUMS,NUMGREATER,TYP
    747    001076 ........             DW SPACE,EXIT
    748    00107A              
    749    00107A              ;C .     n --           display n signed
    750    00107A              ;   <# DUP ABS 0 #S ROT SIGN #> TYPE SPACE
                                ;
    751    00107A                  HEADER  DOT,1,'.',DOCOLON
    751.1  000000                      PUBLIC  DOT
    751.2  00107A ....                 DW      link
    751.3  00107C FF                   DB      0FFh       ; not immediate
    751.4  00107D              link    SET     $
    751.5  00107D 01                   DB      1
    751.6  00107E 2E                   DB      '.'
    751.7  00107F 00                   EVEN
    751.8  001080                      IF      'DOCOLON'='DOCODE'
    751.9  001080              DOT: DW     $+2
    751.10 001080                      ELSE
    751.11 001080 ....         DOT: DW      DOCOLON
    751.12 001082                      ENDIF
    751.13 001082                      ENDM
    752    001082 ............*        DW LESSNUM,DUP,ABBS,ZERO,NUMS
    753    00108C ............*        DW ROT,SIGN,NUMGREATER,TYP,SPACE,EXIT
    754    001098              
    755    001098              ;C DECIMAL  --      set number base to
                                decimal
                                  - 4e-LP430 -                        Page  102

    756    001098              ;   10 BASE ! ;
    757    001098                  HEADER  DECIMAL,7,'DECIMAL',DOCOLON
    757.1  000000                      PUBLIC  DECIMAL
    757.2  001098 ....                 DW      link
    757.3  00109A FF                   DB      0FFh       ; not immediate
    757.4  00109B              link    SET     $
    757.5  00109B 07                   DB      7
    757.6  00109C 444543494D41*        DB      'DECIMAL'
    757.7  0010A3 00                   EVEN
    757.8  0010A4                      IF      'DOCOLON'='DOCODE'
    757.9  0010A4              DECIMAL: DW     $+2
    757.10 0010A4                      ELSE
    757.11 0010A4 ....         DECIMAL: DW      DOCOLON
    757.12 0010A6                      ENDIF
    757.13 0010A6                      ENDM
    758    0010A6 ....0A00....*        DW lit,10,BASE,STORE,EXIT
    759    0010B0              
    760    0010B0              ;X HEX     --       set number base to
                                hex
    761    0010B0              ;   16 BASE ! ;
    762    0010B0                  HEADER  HEX,3,'HEX',DOCOLON
    762.1  000000                      PUBLIC  HEX
    762.2  0010B0 ....                 DW      link
    762.3  0010B2 FF                   DB      0FFh       ; not immediate
    762.4  0010B3              link    SET     $
    762.5  0010B3 03                   DB      3
    762.6  0010B4 484558               DB      'HEX'
    762.7  0010B7 00                   EVEN
    762.8  0010B8                      IF      'DOCOLON'='DOCODE'
    762.9  0010B8              HEX: DW     $+2
    762.10 0010B8                      ELSE
    762.11 0010B8 ....         HEX: DW      DOCOLON
    762.12 0010BA                      ENDIF
    762.13 0010BA                      ENDM
    763    0010BA ....1000....*        DW lit,16,BASE,STORE,EXIT
    764    0010C4              
    765    0010C4              ; DICTIONARY MANAGEMENT ========================
                               =
    766    0010C4              
    767    0010C4              ;C HERE    -- addr      returns dictionary
                                ptr
    768    0010C4              ;   DP @ ;
    769    0010C4                  HEADER  HERE,4,'HERE',DOCOLON
    769.1  000000                      PUBLIC  HERE
    769.2  0010C4 ....                 DW      link
    769.3  0010C6 FF                   DB      0FFh       ; not immediate
    769.4  0010C7              link    SET     $
    769.5  0010C7 04                   DB      4
    769.6  0010C8 48455245             DB      'HERE'
    769.7  0010CC                      EVEN
    769.8  0010CC                      IF      'DOCOLON'='DOCODE'
    769.9  0010CC              HERE: DW     $+2
    769.10 0010CC                      ELSE
    769.11 0010CC ....         HERE: DW      DOCOLON
    769.12 0010CE                      ENDIF
    769.13 0010CE                      ENDM
    770    0010CE ............         DW DDP,FETCH,EXIT
    771    0010D4              
    772    0010D4              ;C ALLOT   n --         allocate n bytes in
                                dict
    773    0010D4              ;   DP +! ;
    774    0010D4                  HEADER  ALLOT,5,'ALLOT',DOCOLON
    774.1  000000                      PUBLIC  ALLOT
    774.2  0010D4 ....                 DW      link
    774.3  0010D6 FF                   DB      0FFh       ; not immediate
    774.4  0010D7              link    SET     $
    774.5  0010D7 05                   DB      5
    774.6  0010D8 414C4C4F54           DB      'ALLOT'
    774.7  0010DD 00                   EVEN
    774.8  0010DE                      IF      'DOCOLON'='DOCODE'
    774.9  0010DE              ALLOT: DW     $+2
    774.10 0010DE                      ELSE
    774.11 0010DE ....         ALLOT: DW      DOCOLON
    774.12 0010E0                      ENDIF
    774.13 0010E0                      ENDM
    775    0010E0 ............         DW DDP,PLUSSTORE,EXIT
    776    0010E6              
    777    0010E6              ;C ,    x --           append cell to dict
                                  - 4e-LP430 -                        Page  103

    778    0010E6              ;   HERE ! 1 CELLS ALLOT ;
    779    0010E6                  HEADER  COMMA,1,',',DOCOLON
    779.1  000000                      PUBLIC  COMMA
    779.2  0010E6 ....                 DW      link
    779.3  0010E8 FF                   DB      0FFh       ; not immediate
    779.4  0010E9              link    SET     $
    779.5  0010E9 01                   DB      1
    779.6  0010EA 2C                   DB      ','
    779.7  0010EB 00                   EVEN
    779.8  0010EC                      IF      'DOCOLON'='DOCODE'
    779.9  0010EC              COMMA: DW     $+2
    779.10 0010EC                      ELSE
    779.11 0010EC ....         COMMA: DW      DOCOLON
    779.12 0010EE                      ENDIF
    779.13 0010EE                      ENDM
    780    0010EE ............*        DW HERE,STORE,lit,1,CELLS,ALLOT,EXIT
    781    0010FC              
    782    0010FC              ;C C,   char --        append char to dict
    783    0010FC              ;   HERE C! 1 CHARS ALLOT ;
    784    0010FC                  HEADER  CCOMMA,2,'C,',DOCOLON
    784.1  000000                      PUBLIC  CCOMMA
    784.2  0010FC ....                 DW      link
    784.3  0010FE FF                   DB      0FFh       ; not immediate
    784.4  0010FF              link    SET     $
    784.5  0010FF 02                   DB      2
    784.6  001100 432C                 DB      'C,'
    784.7  001102                      EVEN
    784.8  001102                      IF      'DOCOLON'='DOCODE'
    784.9  001102              CCOMMA: DW     $+2
    784.10 001102                      ELSE
    784.11 001102 ....         CCOMMA: DW      DOCOLON
    784.12 001104                      ENDIF
    784.13 001104                      ENDM
    785    001104 ............*        DW HERE,CSTORE,lit,1,CHARS,ALLOT,EXIT
    786    001112              
    787    001112              ; The following additional words support
                                the
    788    001112              ; "Harvard" model, with separate address
                                spaces
    789    001112              ; for Instructions (Code) and Data.  ANSI
    790    001112              ; requires DP to manage the Data space, so
                                a
    791    001112              ; separate Instruction Dictionary Pointer,
                                IDP,
    792    001112              ; is added to manage the Code space.  Also
                                added:
    793    001112              ;   I@ IC@ I! IC! I->D D->I   (in the primitives
                               )
    794    001112              ;   ITYPE ICOUNT IWORD        (above)
    795    001112              ;   IHERE IALLOT I, IC,       (below)
    796    001112              ; It should be possible to convert the
                                Harvard
    797    001112              ; implementation to a combined-code-and-data
    798    001112              ; system, by equating these words to their
    799    001112              ; Data-space counterparts.
    800    001112              
    801    001112              ; on MSP430 we have Neumann, but
    802    001112              ;    I! IC! D->I   (in the primitives) work on
                                flash
    803    001112              ;    I@ IC@ alias @ C@
    804    001112              ;    I->D alias CMOVE
    805    001112              ;    IWORD works on flash
    806    001112              ;    IHERE IALLOT I, IC,  work on flash
    807    001112              
    808    001112              ;C IHERE    -- addr   returns Code dictionary
                                ptr
    809    001112              ;   IDP @ ;
    810    001112                  HEADER  IHERE,5,'IHERE',DOCOLON
    810.1  000000                      PUBLIC  IHERE
    810.2  001112 ....                 DW      link
    810.3  001114 FF                   DB      0FFh       ; not immediate
    810.4  001115              link    SET     $
    810.5  001115 05                   DB      5
    810.6  001116 4948455245           DB      'IHERE'
    810.7  00111B 00                   EVEN
    810.8  00111C                      IF      'DOCOLON'='DOCODE'
    810.9  00111C              IHERE: DW     $+2
    810.10 00111C                      ELSE
                                  - 4e-LP430 -                        Page  104

    810.11 00111C ....         IHERE: DW      DOCOLON
    810.12 00111E                      ENDIF
    810.13 00111E                      ENDM
    811    00111E ............         DW IDP,FETCH,EXIT
    812    001124              
    813    001124              ;C IALLOT   n --    allocate n bytes in Code
                                dict
    814    001124              ;   IDP +! ;
    815    001124                  HEADER  IALLOT,6,'IALLOT',DOCOLON
    815.1  000000                      PUBLIC  IALLOT
    815.2  001124 ....                 DW      link
    815.3  001126 FF                   DB      0FFh       ; not immediate
    815.4  001127              link    SET     $
    815.5  001127 06                   DB      6
    815.6  001128 49414C4C4F54         DB      'IALLOT'
    815.7  00112E                      EVEN
    815.8  00112E                      IF      'DOCOLON'='DOCODE'
    815.9  00112E              IALLOT: DW     $+2
    815.10 00112E                      ELSE
    815.11 00112E ....         IALLOT: DW      DOCOLON
    815.12 001130                      ENDIF
    815.13 001130                      ENDM
    816    001130 ............         DW IDP,PLUSSTORE,EXIT
    817    001136              
    818    001136              ;C I,    x --           append cell to Code
                                dict
    819    001136              ;   IHERE I! 1 CELLS IALLOT ;
    820    001136                  HEADER  ICOMMA,2,'I,',DOCOLON
    820.1  000000                      PUBLIC  ICOMMA
    820.2  001136 ....                 DW      link
    820.3  001138 FF                   DB      0FFh       ; not immediate
    820.4  001139              link    SET     $
    820.5  001139 02                   DB      2
    820.6  00113A 492C                 DB      'I,'
    820.7  00113C                      EVEN
    820.8  00113C                      IF      'DOCOLON'='DOCODE'
    820.9  00113C              ICOMMA: DW     $+2
    820.10 00113C                      ELSE
    820.11 00113C ....         ICOMMA: DW      DOCOLON
    820.12 00113E                      ENDIF
    820.13 00113E                      ENDM
    821    00113E ............*        DW IHERE,ISTORE,lit,1,CELLS,IALLOT,EXIT
    822    00114C              
    823    00114C              ;C IC,   char --        append char to Code
                                dict
    824    00114C              ;   IHERE IC! 1 CHARS IALLOT ;
    825    00114C                  HEADER  ICCOMMA,3,'IC,',DOCOLON
    825.1  000000                      PUBLIC  ICCOMMA
    825.2  00114C ....                 DW      link
    825.3  00114E FF                   DB      0FFh       ; not immediate
    825.4  00114F              link    SET     $
    825.5  00114F 03                   DB      3
    825.6  001150 49432C               DB      'IC,'
    825.7  001153 00                   EVEN
    825.8  001154                      IF      'DOCOLON'='DOCODE'
    825.9  001154              ICCOMMA: DW     $+2
    825.10 001154                      ELSE
    825.11 001154 ....         ICCOMMA: DW      DOCOLON
    825.12 001156                      ENDIF
    825.13 001156                      ENDM
    826    001156 ............*        DW IHERE,ICSTORE,lit,1,CHARS,IALLOT,EXIT
    827    001164              
    828    001164              ; SEPARATE HEADER EXTENSIONS ARE NOT USED
    829    001164              #define HHERE IHERE
    830    001164              #define HALLOT IALLOT
    831    001164              #define HCOMMA ICOMMA
    832    001164              #define HCCOMMA ICCOMMA
    833    001164              #define HCFETCH ICFETCH
    834    001164              #define HFETCH IFETCH
    835    001164              #define HCSTORE ICSTORE
    836    001164              #define HSTORE ISTORE
    837    001164              
    838    001164              ; INTERPRETER ==================================
                               =
    839    001164              ; Note that NFA>LFA, NFA>CFA, IMMED?, and
                                FIND
    840    001164              ; are dependent on the structure of the
                                Forth
                                  - 4e-LP430 -                        Page  105

    841    001164              ; header.  This may be common across many
                                CPUs,
    842    001164              ; or it may be different.
    843    001164              
    844    001164              ; ?STACK   -- 
    845    001164              ; depth 0< abort" SUF" ;  stack underflow
    846    001164                 HEADER  QSTACK,6,'?STACK',DOCOLON
    846.1  000000                      PUBLIC  QSTACK
    846.2  001164 ....                 DW      link
    846.3  001166 FF                   DB      0FFh       ; not immediate
    846.4  001167              link    SET     $
    846.5  001167 06                   DB      6
    846.6  001168 3F535441434B         DB      '?STACK'
    846.7  00116E                      EVEN
    846.8  00116E                      IF      'DOCOLON'='DOCODE'
    846.9  00116E              QSTACK: DW     $+2
    846.10 00116E                      ELSE
    846.11 00116E ....         QSTACK: DW      DOCOLON
    846.12 001170                      ENDIF
    846.13 001170                      ENDM
    847    001170 ............         DW DEPTH,ZEROLESS,XISQUOTE
    848    001176 03535546             DB 3,'SUF'
    849    00117A ........             DW QABORT,EXIT
    850    00117E              
    851    00117E              ;C SOURCE   -- adr n    current input buffer
    852    00117E              ;   'SOURCE 2@ ;        length is at lower
                                adrs
    853    00117E                  HEADER  SOURCE,6,'SOURCE',DOCOLON
    853.1  000000                      PUBLIC  SOURCE
    853.2  00117E ....                 DW      link
    853.3  001180 FF                   DB      0FFh       ; not immediate
    853.4  001181              link    SET     $
    853.5  001181 06                   DB      6
    853.6  001182 534F55524345         DB      'SOURCE'
    853.7  001188                      EVEN
    853.8  001188                      IF      'DOCOLON'='DOCODE'
    853.9  001188              SOURCE: DW     $+2
    853.10 001188                      ELSE
    853.11 001188 ....         SOURCE: DW      DOCOLON
    853.12 00118A                      ENDIF
    853.13 00118A                      ENDM
    854    00118A ............         DW TICKSOURCE,TWOFETCH,EXIT
    855    001190              
    856    001190              ;X /STRING  a u n -- a+n u-n   trim string
    857    001190              ;   ROT OVER + ROT ROT - ;
    858    001190                  HEADER  SLASHSTRING,7,'/STRING',DOCOLON
    858.1  000000                      PUBLIC  SLASHSTRING
    858.2  001190 ....                 DW      link
    858.3  001192 FF                   DB      0FFh       ; not immediate
    858.4  001193              link    SET     $
    858.5  001193 07                   DB      7
    858.6  001194 2F535452494E*        DB      '/STRING'
    858.7  00119B 00                   EVEN
    858.8  00119C                      IF      'DOCOLON'='DOCODE'
    858.9  00119C              SLASHSTRING: DW     $+2
    858.10 00119C                      ELSE
    858.11 00119C ....         SLASHSTRING: DW      DOCOLON
    858.12 00119E                      ENDIF
    858.13 00119E                      ENDM
    859    00119E ............*        DW ROT,OVER,PLUS,ROT,ROT,MINUS,EXIT
    860    0011AC              
    861    0011AC              ;Z >counted  src n dst --     copy to counted
                                str
    862    0011AC              ;   2DUP C! CHAR+ SWAP CMOVE ;
    863    0011AC                  HEADER  TOCOUNTED,8,'>COUNTED',DOCOLON
    863.1  000000                      PUBLIC  TOCOUNTED
    863.2  0011AC ....                 DW      link
    863.3  0011AE FF                   DB      0FFh       ; not immediate
    863.4  0011AF              link    SET     $
    863.5  0011AF 08                   DB      8
    863.6  0011B0 3E434F554E54*        DB      '>COUNTED'
    863.7  0011B8                      EVEN
    863.8  0011B8                      IF      'DOCOLON'='DOCODE'
    863.9  0011B8              TOCOUNTED: DW     $+2
    863.10 0011B8                      ELSE
    863.11 0011B8 ....         TOCOUNTED: DW      DOCOLON
    863.12 0011BA                      ENDIF
    863.13 0011BA                      ENDM
                                  - 4e-LP430 -                        Page  106

    864    0011BA ............*        DW TWODUP,CSTORE,CHARPLUS,SWAP,CMOVE,EXI
                                           T
    865    0011C6              
    866    0011C6              ;Z ADR>IN   c-addr' --    set >IN to offset to
                                given adr
    867    0011C6              ;   SOURCE         -- adr' adr n
    868    0011C6              ;   ROT ROT -      -- n adr'-adr
    869    0011C6              ;   MIN  0 MAX     -- n'
    870    0011C6              ;   >IN ! ;
    871    0011C6                  HEADER  ADRTOIN,6,'ADR>IN',DOCOLON
    871.1  000000                      PUBLIC  ADRTOIN
    871.2  0011C6 ....                 DW      link
    871.3  0011C8 FF                   DB      0FFh       ; not immediate
    871.4  0011C9              link    SET     $
    871.5  0011C9 06                   DB      6
    871.6  0011CA 4144523E494E         DB      'ADR>IN'
    871.7  0011D0                      EVEN
    871.8  0011D0                      IF      'DOCOLON'='DOCODE'
    871.9  0011D0              ADRTOIN: DW     $+2
    871.10 0011D0                      ELSE
    871.11 0011D0 ....         ADRTOIN: DW      DOCOLON
    871.12 0011D2                      ENDIF
    871.13 0011D2                      ENDM
    872    0011D2 ............*        DW SOURCE,ROT,ROT,MINUS,MIN,lit,0,MAX
    873    0011E2 ............         DW TOIN,STORE,EXIT
    874    0011E8              
    875    0011E8              ;X PARSE   char -- c-addr n    word delim'd by
                                char
    876    0011E8              ;   SOURCE >IN @ /STRING        -- c adr
                                n
    877    0011E8              ;   OVER >R                     save adr of
                                string start
    878    0011E8              ;   ROT SCAN                    -- adr"
                                n"
    879    0011E8              ;   OVER SWAP IF CHAR+ THEN    skip trailing
                                delim. if any
    880    0011E8              ;   ADR>IN                     advance >IN   --
                                adr"
    881    0011E8              ;   R> TUCK - ;                 -- adr
                                n'
    882    0011E8                  HEADER PARSE,5,'PARSE',DOCOLON
    882.1  000000                      PUBLIC  PARSE
    882.2  0011E8 ....                 DW      link
    882.3  0011EA FF                   DB      0FFh       ; not immediate
    882.4  0011EB              link    SET     $
    882.5  0011EB 05                   DB      5
    882.6  0011EC 5041525345           DB      'PARSE'
    882.7  0011F1 00                   EVEN
    882.8  0011F2                      IF      'DOCOLON'='DOCODE'
    882.9  0011F2              PARSE: DW     $+2
    882.10 0011F2                      ELSE
    882.11 0011F2 ....         PARSE: DW      DOCOLON
    882.12 0011F4                      ENDIF
    882.13 0011F4                      ENDM
    883    0011F4 ............*        DW SOURCE,TOIN,FETCH,SLASHSTRING
    884    0011FC ............*        DW OVER,TOR,ROT,SCAN
    885    001204 ............         DW OVER,SWAP,qbran
    886    00120A                      DEST PARSE1
    886.1  00120A 0400                 DW      PARSE1-$
    886.2  00120C                      ENDM
    887    00120C ....                 DW ONEPLUS  ; char+
    888    00120E ....         PARSE1: DW ADRTOIN
    889    001210 ............*        DW RFROM,TUCK,MINUS,EXIT
    890    001218              
    891    001218              ;C WORD   char -- c-addr    word delim'd by
                                char
    892    001218              ;   DUP  SOURCE >IN @ /STRING   -- c c adr
                                n
    893    001218              ;   ROT SKIP                    -- c adr'
                                n'
    894    001218              ;   DROP ADR>IN PARSE           -- adr"
                                n"
    895    001218              ;   HERE >counted               --
    896    001218              ;   HERE                        -- a
    897    001218              ;   BL OVER COUNT + C! ;    append trailing
                                blank
    898    001218                  HEADER  WORDD,4,'WORD',DOCOLON
    898.1  000000                      PUBLIC  WORDD
                                  - 4e-LP430 -                        Page  107

    898.2  001218 ....                 DW      link
    898.3  00121A FF                   DB      0FFh       ; not immediate
    898.4  00121B              link    SET     $
    898.5  00121B 04                   DB      4
    898.6  00121C 574F5244             DB      'WORD'
    898.7  001220                      EVEN
    898.8  001220                      IF      'DOCOLON'='DOCODE'
    898.9  001220              WORDD: DW     $+2
    898.10 001220                      ELSE
    898.11 001220 ....         WORDD: DW      DOCOLON
    898.12 001222                      ENDIF
    898.13 001222                      ENDM
    899    001222 ............*        DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING
    900    00122C ........             DW ROT,SKIP
    901    001230 ............         DW DROP,ADRTOIN,PARSE
    902    001236 ............         DW HERE,TOCOUNTED,HERE
    903    00123C ............*        DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT
    904    001248                  
    905    001248              ;C WORD   char -- c-addr    word delim'd by char
                                 OLD DEF'N
    906    001248              ;   DUP  SOURCE >IN @ /STRING   -- c c adr
                                n
    907    001248              ;   DUP >R   ROT SKIP           -- c adr'
                                n'
    908    001248              ;   OVER >R  ROT SCAN           -- adr"
                                n"
    909    001248              ;   DUP IF CHAR- THEN        skip trailing
                                delim.
    910    001248              ;   R> R> ROT -   >IN +!        update >IN
                                offset
    911    001248              ;   TUCK -                      -- adr'
                                N
    912    001248              ;   HERE >counted               --
    913    001248              ;   HERE                        -- a
    914    001248              ;   BL OVER COUNT + C! ;    append trailing
                                blank
    915    001248              ;    HEADER  WORDD,4,'WORD',DOCOLON
    916    001248              ;        DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING
    917    001248              ;        DW DUP,TOR,ROT,SKIP
    918    001248              ;        DW OVER,TOR,ROT,SCAN
    919    001248              ;        DW DUP,qbran
    920    001248              ;        DEST  WORD1
    921    001248              ;        DW ONEMINUS  ; char-
    922    001248              ;WORD1:  DW RFROM,RFROM,ROT,MINUS,TOIN,PLUSSTORE
    923    001248              ;        DW TUCK,MINUS
    924    001248              ;        DW HERE,TOCOUNTED,HERE
    925    001248              ;        DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT
    926    001248              
    927    001248              ;Z NFA>LFA   nfa -- lfa    name adr -> link
                                field
    928    001248              ;   3 - ;
    929    001248                  HEADER  NFATOLFA,7,'NFA>LFA',DOCOLON
    929.1  000000                      PUBLIC  NFATOLFA
    929.2  001248 ....                 DW      link
    929.3  00124A FF                   DB      0FFh       ; not immediate
    929.4  00124B              link    SET     $
    929.5  00124B 07                   DB      7
    929.6  00124C 4E46413E4C46*        DB      'NFA>LFA'
    929.7  001253 00                   EVEN
    929.8  001254                      IF      'DOCOLON'='DOCODE'
    929.9  001254              NFATOLFA: DW     $+2
    929.10 001254                      ELSE
    929.11 001254 ....         NFATOLFA: DW      DOCOLON
    929.12 001256                      ENDIF
    929.13 001256                      ENDM
    930    001256 ....0300....*        DW lit,3,MINUS,EXIT
    931    00125E              
    932    00125E              ;Z NFA>CFA   nfa -- cfa    name adr -> code
                                field
    933    00125E              ;   HCOUNT 7F AND + ALIGNED ;   mask off
                                'smudge' bit
    934    00125E                  HEADER  NFATOCFA,7,'NFA>CFA',DOCOLON
    934.1  000000                      PUBLIC  NFATOCFA
    934.2  00125E ....                 DW      link
    934.3  001260 FF                   DB      0FFh       ; not immediate
    934.4  001261              link    SET     $
    934.5  001261 07                   DB      7
    934.6  001262 4E46413E4346*        DB      'NFA>CFA'
                                  - 4e-LP430 -                        Page  108

    934.7  001269 00                   EVEN
    934.8  00126A                      IF      'DOCOLON'='DOCODE'
    934.9  00126A              NFATOCFA: DW     $+2
    934.10 00126A                      ELSE
    934.11 00126A ....         NFATOCFA: DW      DOCOLON
    934.12 00126C                      ENDIF
    934.13 00126C                      ENDM
    935    00126C ....                 DW HCOUNT
    936    00126E ....7F00....*        DW lit,07FH,ANDD,PLUS,ALIGNED,EXIT
    937    00127A              
    938    00127A              ;Z IMMED?    nfa -- f      fetch immediate
                                flag
    939    00127A              ;   1- HC@ 1 AND 0= ;   Flashable model, LSB=0
                                if immed
    940    00127A                  HEADER  IMMEDQ,6,'IMMED?',DOCOLON
    940.1  000000                      PUBLIC  IMMEDQ
    940.2  00127A ....                 DW      link
    940.3  00127C FF                   DB      0FFh       ; not immediate
    940.4  00127D              link    SET     $
    940.5  00127D 06                   DB      6
    940.6  00127E 494D4D45443F         DB      'IMMED?'
    940.7  001284                      EVEN
    940.8  001284                      IF      'DOCOLON'='DOCODE'
    940.9  001284              IMMEDQ: DW     $+2
    940.10 001284                      ELSE
    940.11 001284 ....         IMMEDQ: DW      DOCOLON
    940.12 001286                      ENDIF
    940.13 001286                      ENDM
    941    001286 ............*        DW ONEMINUS,HCFETCH,lit,1,ANDD,ZEROEQUAL
                                           ,EXIT
    942    001294              
    943    001294              ;C FIND   c-addr -- c-addr 0   if not found
    944    001294              ;C FIND   c-addr -- xt  1      if immediate
    945    001294              ;C FIND   c-addr -- xt -1      if "normal"
    946    001294              ;   LATEST @ BEGIN             -- a nfa
    947    001294              ;       2DUP OVER C@ CHAR+     -- a nfa a nfa
                                n+1
    948    001294              ;       N=                     -- a nfa
                                f
    949    001294              ;       DUP IF
    950    001294              ;           DROP
    951    001294              ;           NFA>LFA H@ DUP     -- a link
                                link
    952    001294              ;       THEN
    953    001294              ;   0= UNTIL                   -- a nfa  OR  a
                                0
    954    001294              ;   DUP IF
    955    001294              ;       NIP DUP NFA>CFA        -- nfa xt
    956    001294              ;       SWAP IMMED?            -- xt iflag
    957    001294              ;       0= 1 OR                -- xt 1/-1
    958    001294              ;   THEN ;
    959    001294                  HEADER  FIND,4,'FIND',DOCOLON
    959.1  000000                      PUBLIC  FIND
    959.2  001294 ....                 DW      link
    959.3  001296 FF                   DB      0FFh       ; not immediate
    959.4  001297              link    SET     $
    959.5  001297 04                   DB      4
    959.6  001298 46494E44             DB      'FIND'
    959.7  00129C                      EVEN
    959.8  00129C                      IF      'DOCOLON'='DOCODE'
    959.9  00129C              FIND: DW     $+2
    959.10 00129C                      ELSE
    959.11 00129C ....         FIND: DW      DOCOLON
    959.12 00129E                      ENDIF
    959.13 00129E                      ENDM
    960    00129E ........             DW LATEST,FETCH
    961    0012A2 ............*FIND1:  DW TWODUP,OVER,CFETCH,CHARPLUS
    962    0012AA ............         DW NEQUAL,DUP,qbran
    963    0012B0                      DEST  FIND2
    963.1  0012B0 0A00                 DW      FIND2-$
    963.2  0012B2                      ENDM
    964    0012B2 ............*        DW DROP,NFATOLFA,HFETCH,DUP
    965    0012BA ........     FIND2:  DW ZEROEQUAL,qbran
    966    0012BE                      DEST  FIND1
    966.1  0012BE E4FF                 DW      FIND1-$
    966.2  0012C0                      ENDM
    967    0012C0 ........             DW DUP,qbran
    968    0012C4                      DEST  FIND3
                                  - 4e-LP430 -                        Page  109

    968.1  0012C4 1400                 DW      FIND3-$
    968.2  0012C6                      ENDM
    969    0012C6 ............         DW NIP,DUP,NFATOCFA
    970    0012CC ............*        DW SWAP,IMMEDQ,ZEROEQUAL,lit,1,ORR
    971    0012D8 ....         FIND3:  DW EXIT
    972    0012DA              
    973    0012DA              ;C UPC   char -- char  capitalize character
    974    0012DA              ;
    975    0012DA              ; DUP [CHAR] a < OVER [CHAR] z > OR IF EXIT THEN
                                 
    976    0012DA              ; [ CHAR A CHAR a - ] LITERAL + ; 
    977    0012DA              ;  HEADER  UPC,3,'UPC',DOCOLON
    978    0012DA                  HEADLESS UPC, DOCOLON
    978.1  000000                      PUBLIC  UPC
    978.2  0012DA                      IF      'DOCOLON'='DOCODE'
    978.3  0012DA              UPC: DW     $+2
    978.4  0012DA                      ELSE
    978.5  0012DA ....         UPC: DW      DOCOLON
    978.6  0012DC                      ENDIF
    978.7  0012DC                      ENDM
    979    0012DC ........6100*        DW DUP, lit, 'a', LESS, OVER, lit, 'z',
                                            GREATER
    980    0012EC ........             DW ORR, qbran
    981    0012F0                      DEST  UPC1
    981.1  0012F0 0400                 DW      UPC1-$
    981.2  0012F2                      ENDM
    982    0012F2 ....                 DW EXIT
    983    0012F4 ....E0FF.... UPC1:   DW lit, 'A'-'a', PLUS
    984    0012FA ....                 DW EXIT
    985    0012FC              
    986    0012FC              ;C CAPITALIZE c-addr -- c-addr  capitalize
                                string
    987    0012FC              ;
    988    0012FC              ; CAPS @ IF DUP COUNT OVER + SWAP ?DO  I c@ upc
                                I c! LOOP THEN
    989    0012FC              ;   HEADER CAPITALIZE, 10, 'CAPITALIZE',
                                DOCOLON
    990    0012FC                  HEADLESS CAPITALIZE, DOCOLON
    990.1  000000                      PUBLIC  CAPITALIZE
    990.2  0012FC                      IF      'DOCOLON'='DOCODE'
    990.3  0012FC              CAPITALIZE: DW     $+2
    990.4  0012FC                      ELSE
    990.5  0012FC ....         CAPITALIZE: DW      DOCOLON
    990.6  0012FE                      ENDIF
    990.7  0012FE                      ENDM
    991    0012FE ............         DW CAPS, FETCH, qbran
    992    001304                      DEST CAPS2
    992.1  001304 1C00                 DW      CAPS2-$
    992.2  001306                      ENDM
    993    001306 ............*        DW DUP, COUNT, OVER, PLUS, SWAP,
                                            xdo
    994    001312 ............*CAPS1:  DW II, CFETCH, UPC, II, CSTORE
    995    00131C ....                 DW xloop
    996    00131E                      DEST CAPS1
    996.1  00131E F4FF                 DW      CAPS1-$
    996.2  001320                      ENDM
    997    001320 ....         CAPS2:  DW EXIT
    998    001322              
    999    001322              ;C LITERAL  x --        append numeric
                                literal
   1000    001322              ;   STATE @ IF ['] LIT ,XT I, THEN ; IMMEDIATE
   1001    001322              ; This tests STATE so that it can also be
                                used
   1002    001322              ; interpretively.  (ANSI doesn't require
                                this.)
   1003    001322                  IMMED  LITERAL,7,'LITERAL',DOCOLON
   1003.1  000000                      PUBLIC  LITERAL
   1003.2  001322 ....                 DW      link
   1003.3  001324 FE                   DB      0FEh      // ; immediate
                                                                       (LSB=0)
   1003.4  001325              link    SET     $
   1003.5  001325 07                   DB      7
   1003.6  001326 4C4954455241*        DB      'LITERAL'
   1003.7  00132D 00                   EVEN
   1003.8  00132E                      IF      'DOCOLON'='DOCODE'
   1003.9  00132E              LITERAL: DW     $+2
   1003.10 00132E                      ELSE
   1003.11 00132E ....         LITERAL: DW      DOCOLON
                                  - 4e-LP430 -                        Page  110

   1003.12 001330                      ENDIF
   1003.13 001330                      ENDM
   1004    001330 ............         DW STATE,FETCH,qbran
   1005    001336                      DEST  LITER1
   1005.1  001336 0A00                 DW      LITER1-$
   1005.2  001338                      ENDM
   1006    001338 ............*        DW lit,lit,COMMAXT,ICOMMA
   1007    001340 ....         LITER1: DW EXIT
   1008    001342              
   1009    001342              ;Z DIGIT?   c -- n -1   if c is a valid
                                digit
   1010    001342              ;Z DIGIT?   c -- x  0   otherwise
   1011    001342              ;   [ HEX ] DUP 39 > 100 AND +     silly
                                looking
   1012    001342              ;   DUP 140 > 107 AND -   30 -     but it
                                works!
   1013    001342              ;   DUP BASE @ U< ;
   1014    001342                  HEADER  DIGITQ,6,'DIGIT?',DOCOLON
   1014.1  000000                      PUBLIC  DIGITQ
   1014.2  001342 ....                 DW      link
   1014.3  001344 FF                   DB      0FFh       ; not immediate
   1014.4  001345              link    SET     $
   1014.5  001345 06                   DB      6
   1014.6  001346 44494749543F         DB      'DIGIT?'
   1014.7  00134C                      EVEN
   1014.8  00134C                      IF      'DOCOLON'='DOCODE'
   1014.9  00134C              DIGITQ: DW     $+2
   1014.10 00134C                      ELSE
   1014.11 00134C ....         DIGITQ: DW      DOCOLON
   1014.12 00134E                      ENDIF
   1014.13 00134E                      ENDM
   1015    00134E ........3900*        DW DUP,lit,39H,GREATER,lit,100H,ANDD,PLU
                                           S
   1016    00135E ........4001*        DW DUP,lit,140H,GREATER,lit,107H,ANDD
   1017    00136C ........3000*        DW MINUS,lit,30H,MINUS
   1018    001374 ............*        DW DUP,BASE,FETCH,ULESS,EXIT
   1019    00137E              
   1020    00137E              ;Z ?SIGN   adr n -- adr' n' f  get optional
                                sign
   1021    00137E              ;Z  advance adr/n if sign; return NZ if
                                negative
   1022    00137E              ;   OVER C@                 -- adr n c
   1023    00137E              ;   2C - DUP ABS 1 = AND    -- +=-1, -=+1, else
                                0
   1024    00137E              ;   DUP IF 1+               -- +=0, -=+2
   1025    00137E              ;       >R 1 /STRING R>     -- adr' n'
                                f
   1026    00137E              ;   THEN ;
   1027    00137E                  HEADER  QSIGN,5,'?SIGN',DOCOLON
   1027.1  000000                      PUBLIC  QSIGN
   1027.2  00137E ....                 DW      link
   1027.3  001380 FF                   DB      0FFh       ; not immediate
   1027.4  001381              link    SET     $
   1027.5  001381 05                   DB      5
   1027.6  001382 3F5349474E           DB      '?SIGN'
   1027.7  001387 00                   EVEN
   1027.8  001388                      IF      'DOCOLON'='DOCODE'
   1027.9  001388              QSIGN: DW     $+2
   1027.10 001388                      ELSE
   1027.11 001388 ....         QSIGN: DW      DOCOLON
   1027.12 00138A                      ENDIF
   1027.13 00138A                      ENDM
   1028    00138A ............*        DW OVER,CFETCH,lit,2CH,MINUS,DUP,ABBS
   1029    001398 ....0100....*        DW lit,1,EQUAL,ANDD,DUP,qbran
   1030    0013A4                      DEST  QSIGN1
   1030.1  0013A4 0E00                 DW      QSIGN1-$
   1030.2  0013A6                      ENDM
   1031    0013A6 ............*        DW ONEPLUS,TOR,lit,1,SLASHSTRING,RFROM
   1032    0013B2 ....         QSIGN1: DW EXIT
   1033    0013B4              
   1034    0013B4              ;C >NUMBER  ud adr u -- ud' adr' u'
   1035    0013B4              ;C                      convert string to
                                number
   1036    0013B4              ;   BEGIN
   1037    0013B4              ;   DUP WHILE
   1038    0013B4              ;       OVER C@ DIGIT?
   1039    0013B4              ;       0= IF DROP EXIT THEN
   1040    0013B4              ;       >R 2SWAP BASE @ UD*
                                  - 4e-LP430 -                        Page  111

   1041    0013B4              ;       R> M+ 2SWAP
   1042    0013B4              ;       1 /STRING
   1043    0013B4              ;   REPEAT ;
   1044    0013B4                  HEADER  TONUMBER,7,'>NUMBER',DOCOLON
   1044.1  000000                      PUBLIC  TONUMBER
   1044.2  0013B4 ....                 DW      link
   1044.3  0013B6 FF                   DB      0FFh       ; not immediate
   1044.4  0013B7              link    SET     $
   1044.5  0013B7 07                   DB      7
   1044.6  0013B8 3E4E554D4245*        DB      '>NUMBER'
   1044.7  0013BF 00                   EVEN
   1044.8  0013C0                      IF      'DOCOLON'='DOCODE'
   1044.9  0013C0              TONUMBER: DW     $+2
   1044.10 0013C0                      ELSE
   1044.11 0013C0 ....         TONUMBER: DW      DOCOLON
   1044.12 0013C2                      ENDIF
   1044.13 0013C2                      ENDM
   1045    0013C2 ........     TONUM1: DW DUP,qbran
   1046    0013C6                      DEST  TONUM3
   1046.1  0013C6 2C00                 DW      TONUM3-$
   1046.2  0013C8                      ENDM
   1047    0013C8 ............         DW OVER,CFETCH,DIGITQ
   1048    0013CE ........             DW ZEROEQUAL,qbran
   1049    0013D2                      DEST  TONUM2
   1049.1  0013D2 0600                 DW      TONUM2-$
   1049.2  0013D4                      ENDM
   1050    0013D4 ........             DW DROP,EXIT
   1051    0013D8 ............*TONUM2: DW TOR,TWOSWAP,BASE,FETCH,UDSTAR
   1052    0013E2 ............         DW RFROM,MPLUS,TWOSWAP
   1053    0013E8 ....0100....*        DW lit,1,SLASHSTRING,bran
   1054    0013F0                      DEST  TONUM1
   1054.1  0013F0 D2FF                 DW      TONUM1-$
   1054.2  0013F2                      ENDM
   1055    0013F2 ....         TONUM3: DW EXIT
   1056    0013F4              
   1057    0013F4              ;Z ?NUMBER  c-addr -- n -1        string->number
   1058    0013F4              ;Z ?NUMBER  c-addr -- c-addr 0    if convert
                                error
   1059    0013F4              ;   DUP  0 0 ROT COUNT      -- ca ud adr
                                n
   1060    0013F4              ;   ?SIGN >R  >NUMBER       -- ca ud adr'
                                n'
   1061    0013F4              ;   IF   R> 2DROP 2DROP 0   -- ca 0   (error)
   1062    0013F4              ;   ELSE 2DROP NIP R>
   1063    0013F4              ;       IF NEGATE THEN  -1  -- n -1   (ok)
   1064    0013F4              ;   THEN ;
   1065    0013F4                  HEADER  QNUMBER,7,'?NUMBER',DOCOLON
   1065.1  000000                      PUBLIC  QNUMBER
   1065.2  0013F4 ....                 DW      link
   1065.3  0013F6 FF                   DB      0FFh       ; not immediate
   1065.4  0013F7              link    SET     $
   1065.5  0013F7 07                   DB      7
   1065.6  0013F8 3F4E554D4245*        DB      '?NUMBER'
   1065.7  0013FF 00                   EVEN
   1065.8  001400                      IF      'DOCOLON'='DOCODE'
   1065.9  001400              QNUMBER: DW     $+2
   1065.10 001400                      ELSE
   1065.11 001400 ....         QNUMBER: DW      DOCOLON
   1065.12 001402                      ENDIF
   1065.13 001402                      ENDM
   1066    001402 ............*        DW DUP,ZERO,DUP,ROT,COUNT
   1067    00140C ............*        DW QSIGN,TOR,TONUMBER,qbran
   1068    001414                      DEST  QNUM1
   1068.1  001414 1000                 DW      QNUM1-$
   1068.2  001416                      ENDM
   1069    001416 ............*        DW RFROM,TWODROP,TWODROP,lit,0
   1070    001420 ....                 DW bran
   1071    001422                      DEST  QNUM3
   1071.1  001422 1200                 DW      QNUM3-$
   1071.2  001424                      ENDM
   1072    001424 ............*QNUM1:  DW TWODROP,NIP,RFROM,qbran
   1073    00142C                      DEST  QNUM2
   1073.1  00142C 0400                 DW      QNUM2-$
   1073.2  00142E                      ENDM
   1074    00142E ....                 DW NEGATE
   1075    001430 ....FFFF     QNUM2:  DW lit,-1
   1076    001434 ....         QNUM3:  DW EXIT
   1077    001436              
                                  - 4e-LP430 -                        Page  112

   1078    001436              ;Z INTERPRET    i*x c-addr u -- j*x             
                                   interpret given buffer
   1079    001436              ; This is a common factor of EVALUATE and
                                QUIT.
   1080    001436              ; ref. dpANS-6, 3.4 The Forth Text Interpreter
   1081    001436              ;   'SOURCE 2!  0 >IN !
   1082    001436              ;   BEGIN
   1083    001436              ;   BL WORD DUP C@ WHILE        -- textadr
   1084    001436              ;       CAPITALIZE
   1085    001436              ;       FIND                    -- a 0/1/-1
   1086    001436              ;       ?DUP IF                 -- xt 1/-1
   1087    001436              ;           1+ STATE @ 0= OR    IMMED  or
                                interp?
   1088    001436              ;           IF EXECUTE ELSE ,XT THEN
   1089    001436              ;       ELSE                    -- textadr
   1090    001436              ;           ?NUMBER
   1091    001436              ;           IF POSTPONE LITERAL     converted
                                ok
   1092    001436              ;           ELSE COUNT TYPE 3F EMIT CR ABORT 
                                err
   1093    001436              ;           THEN
   1094    001436              ;       THEN
   1095    001436              ;   REPEAT DROP ;
   1096    001436                  HEADER  INTERPRET,9,'INTERPRET',DOCOLON
   1096.1  000000                      PUBLIC  INTERPRET
   1096.2  001436 ....                 DW      link
   1096.3  001438 FF                   DB      0FFh       ; not immediate
   1096.4  001439              link    SET     $
   1096.5  001439 09                   DB      9
   1096.6  00143A 494E54455250*        DB      'INTERPRET'
   1096.7  001443 00                   EVEN
   1096.8  001444                      IF      'DOCOLON'='DOCODE'
   1096.9  001444              INTERPRET: DW     $+2
   1096.10 001444                      ELSE
   1096.11 001444 ....         INTERPRET: DW      DOCOLON
   1096.12 001446                      ENDIF
   1096.13 001446                      ENDM
   1097    001446 ............*        DW TICKSOURCE,TWOSTORE,ZERO,TOIN,STORE
   1098    001450 ....         INTER1: DW QSTACK ; ?stack prüft auf stck
                                                  underflow  mk
   1099    001452 ............*        DW BLANK,WORDD,DUP,CFETCH,qbran
   1100    00145C                      DEST  INTER9
   1100.1  00145C 4A00                 DW      INTER9-$
   1100.2  00145E                      ENDM
   1101    00145E ....                 DW CAPITALIZE
   1102    001460 ............         DW FIND,QDUP,qbran
   1103    001466                      DEST  INTER4
   1103.1  001466 1C00                 DW      INTER4-$
   1103.2  001468                      ENDM
   1104    001468 ............*        DW ONEPLUS,STATE,FETCH,ZEROEQUAL,ORR
   1105    001472 ....                 DW qbran
   1106    001474                      DEST  INTER2
   1106.1  001474 0800                 DW      INTER2-$
   1106.2  001476                      ENDM
   1107    001476 ........             DW EXECUTE,bran
   1108    00147A                      DEST  INTER3
   1108.1  00147A 0400                 DW      INTER3-$
   1108.2  00147C                      ENDM
   1109    00147C ....         INTER2: DW COMMAXT
   1110    00147E ....         INTER3: DW bran
   1111    001480                      DEST  INTER8
   1111.1  001480 2200                 DW      INTER8-$
   1111.2  001482                      ENDM
   1112    001482 ........     INTER4: DW QNUMBER,qbran
   1113    001486                      DEST  INTER5
   1113.1  001486 0800                 DW      INTER5-$
   1113.2  001488                      ENDM
   1114    001488 ........             DW LITERAL,bran
   1115    00148C                      DEST  INTER6
   1115.1  00148C 1600                 DW      INTER6-$
   1115.2  00148E                      ENDM
   1116    00148E ........     INTER5: DW COUNT,TYP
   1117    001492 ....1500....         DW lit,15H,EMIT  ; emit a NAK ($15)
   1118    001498 ....3F00....         DW lit,3FH,EMIT
   1119    00149E              ;        DW TOIN,FETCH,DOT
   1120    00149E ........             DW CR,ABORT
   1121    0014A2              INTER6:
   1122    0014A2 ....         INTER8: DW bran
                                  - 4e-LP430 -                        Page  113

   1123    0014A4                      DEST  INTER1
   1123.1  0014A4 ACFF                 DW      INTER1-$
   1123.2  0014A6                      ENDM
   1124    0014A6 ........     INTER9: DW DROP,EXIT
   1125    0014AA              
   1126    0014AA              ;C EVALUATE  i*x c-addr u -- j*x             
                                interprt string
   1127    0014AA              ;   'SOURCE 2@ >R >R  >IN @ >R
   1128    0014AA              ;   INTERPRET
   1129    0014AA              ;   R> >IN !  R> R> 'SOURCE 2! ;
   1130    0014AA                  HEADER  EVALUATE,8,'EVALUATE',DOCOLON
   1130.1  000000                      PUBLIC  EVALUATE
   1130.2  0014AA ....                 DW      link
   1130.3  0014AC FF                   DB      0FFh       ; not immediate
   1130.4  0014AD              link    SET     $
   1130.5  0014AD 08                   DB      8
   1130.6  0014AE 4556414C5541*        DB      'EVALUATE'
   1130.7  0014B6                      EVEN
   1130.8  0014B6                      IF      'DOCOLON'='DOCODE'
   1130.9  0014B6              EVALUATE: DW     $+2
   1130.10 0014B6                      ELSE
   1130.11 0014B6 ....         EVALUATE: DW      DOCOLON
   1130.12 0014B8                      ENDIF
   1130.13 0014B8                      ENDM
   1131    0014B8 ............*        DW TICKSOURCE,TWOFETCH,TOR,TOR
   1132    0014C0 ............*        DW TOIN,FETCH,TOR,INTERPRET
   1133    0014C8 ............*        DW RFROM,TOIN,STORE,RFROM,RFROM
   1134    0014D2 ............         DW TICKSOURCE,TWOSTORE,EXIT
   1135    0014D8              
   1136    0014D8              #define PREFIXPROMPT 0
   1137    0014D8              
   1138    0014D8              ; C DOTSTATUS  --           display system
                                status
   1139    0014D8                 HEADLESS DOTSTATUS,DOCOLON
   1139.1  000000                      PUBLIC  DOTSTATUS
   1139.2  0014D8                      IF      'DOCOLON'='DOCODE'
   1139.3  0014D8              DOTSTATUS: DW     $+2
   1139.4  0014D8                      ELSE
   1139.5  0014D8 ....         DOTSTATUS: DW      DOCOLON
   1139.6  0014DA                      ENDIF
   1139.7  0014DA                      ENDM
   1140    0014DA ....1100....          DW lit,11H,EMIT  ; send XON
   1141    0014E0 ....                  DW CR
   1142    0014E2                       IF PREFIXPROMPT=1
   1143    0014E2                         DW XISQUOTE
   1144    0014E2                         DB 3,'OK '    ; for prefix prompt
                                style
   1145    0014E2                         DW ITYPE
   1146    0014E2                       ENDIF
   1147    0014E2 ....                  DW EXIT   
   1148    0014E4              
   1149    0014E4              ; C PROMPT  --            prompt user
   1150    0014E4                  HEADLESS PROMPT,DOCOLON
   1150.1  000000                      PUBLIC  PROMPT
   1150.2  0014E4                      IF      'DOCOLON'='DOCODE'
   1150.3  0014E4              PROMPT: DW     $+2
   1150.4  0014E4                      ELSE
   1150.5  0014E4 ....         PROMPT: DW      DOCOLON
   1150.6  0014E6                      ENDIF
   1150.7  0014E6                      ENDM
   1151    0014E6                      IF PREFIXPROMPT!=1
   1152    0014E6 ............*          DW STATE,FETCH,ZEROEQUAL,qbran
   1153    0014EE                        DEST PROMPT1
   1153.1  0014EE 2800                 DW      PROMPT1-$
   1153.2  0014F0                      ENDM
   1154    0014F0 ....0600....           DW lit,06H,EMIT ; send ACK
   1155    0014F6 ............*          DW BASE,FETCH,DUP,HEX,lit,'$',EMIT,lit
                                             ,02,ZEROUDOTR,BASE,STORE
   1156    00150E ....                   DW XISQUOTE
   1157    001510 036F6B20               DB 3,'ok '    ; for traditional Forth
                                                        style
   1158    001514 ....                   DW ITYPE
   1159    001516                      ENDIF
   1160    001516 ....         PROMPT1:DW EXIT
   1161    001518              
   1162    001518              
   1163    001518              ;C QUIT     -- R: i*x --     interpret from
                                kbd
                                  - 4e-LP430 -                        Page  114

   1164    001518              ;   L0 LP !  R0 RP!   0 STATE !
   1165    001518              ;   BEGIN
   1166    001518              ;       xon EMIT
   1167    001518              ;       TIB DUP TIBSIZE ACCEPT
   1168    001518              ;       xoff EMIT  SPACE
   1169    001518              ;       INTERPRET
   1170    001518              ;       CR STATE @ 0= IF ." OK" THEN
   1171    001518              ;   AGAIN ;
   1172    001518                  HEADER  QUIT,4,'QUIT',DOCOLON
   1172.1  000000                      PUBLIC  QUIT
   1172.2  001518 ....                 DW      link
   1172.3  00151A FF                   DB      0FFh       ; not immediate
   1172.4  00151B              link    SET     $
   1172.5  00151B 04                   DB      4
   1172.6  00151C 51554954             DB      'QUIT'
   1172.7  001520                      EVEN
   1172.8  001520                      IF      'DOCOLON'='DOCODE'
   1172.9  001520              QUIT: DW     $+2
   1172.10 001520                      ELSE
   1172.11 001520 ....         QUIT: DW      DOCOLON
   1172.12 001522                      ENDIF
   1172.13 001522                      ENDM
   1173    001522 ............         DW L0,LP,STORE
   1174    001528 ............*        DW RZERO,RPSTORE,ZERO,STATE,STORE
   1175    001532 ....         QUIT1:  DW DOTSTATUS
   1176    001534 ............*        DW TIB,DUP,TIBSIZE,ACCEPT
   1177    00153C                      ; DW lit,13H,EMIT         ; send
                                XOFF
   1178    00153C ....                 DW SPACE
   1179    00153E ....                 DW INTERPRET
   1180    001540 ....                 DW PROMPT
   1181    001542 ....                 DW bran
   1182    001544                      DEST  QUIT1
   1182.1  001544 EEFF                 DW      QUIT1-$
   1182.2  001546                      ENDM
   1183    000000              PUBLIC QUITIP
   1184    001546              QUITIP  equ QUIT+2
   1185    001546                      
   1186    001546              ;C ABORT    i*x -- R: j*x --    clear stk &
                                QUIT
   1187    001546              ;   S0 SP!  QUIT ;
   1188    001546                  HEADER  ABORT,5,'ABORT',DOCOLON
   1188.1  000000                      PUBLIC  ABORT
   1188.2  001546 ....                 DW      link
   1188.3  001548 FF                   DB      0FFh       ; not immediate
   1188.4  001549              link    SET     $
   1188.5  001549 05                   DB      5
   1188.6  00154A 41424F5254           DB      'ABORT'
   1188.7  00154F 00                   EVEN
   1188.8  001550                      IF      'DOCOLON'='DOCODE'
   1188.9  001550              ABORT: DW     $+2
   1188.10 001550                      ELSE
   1188.11 001550 ....         ABORT: DW      DOCOLON
   1188.12 001552                      ENDIF
   1188.13 001552                      ENDM
   1189    001552 ............ abort1  DW S0,SPSTORE,QUIT   ; QUIT never
                                                             returns
   1190    001558              
   1191    001558              ;Z ?ABORT   f c-addr u --      abort & print
                                msg
   1192    001558              ;   ROT IF ITYPE ABORT THEN 2DROP ;
   1193    001558                  HEADER  QABORT,6,'?ABORT',DOCOLON
   1193.1  000000                      PUBLIC  QABORT
   1193.2  001558 ....                 DW      link
   1193.3  00155A FF                   DB      0FFh       ; not immediate
   1193.4  00155B              link    SET     $
   1193.5  00155B 06                   DB      6
   1193.6  00155C 3F41424F5254         DB      '?ABORT'
   1193.7  001562                      EVEN
   1193.8  001562                      IF      'DOCOLON'='DOCODE'
   1193.9  001562              QABORT: DW     $+2
   1193.10 001562                      ELSE
   1193.11 001562 ....         QABORT: DW      DOCOLON
   1193.12 001564                      ENDIF
   1193.13 001564                      ENDM
   1194    001564 ........             DW ROT,qbran
   1195    001568                      DEST  QABO1
   1195.1  001568 0600                 DW      QABO1-$
                                  - 4e-LP430 -                        Page  115

   1195.2  00156A                      ENDM
   1196    00156A ........             DW ITYPE,ABORT
   1197    00156E ........     QABO1:  DW TWODROP,EXIT
   1198    001572              
   1199    001572              ;C ABORT"   i*x 0 -- i*x R: j*x -- j*x     
                                x1=0
   1200    001572              ;C ABORT"   i*x x1 -- R: j*x --            
                                x1<>0
   1201    001572              ;   POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE
   1202    001572                  IMMED  ABORTQUOTE,6,'ABORT"',DOCOLON
   1202.1  000000                      PUBLIC  ABORTQUOTE
   1202.2  001572 ....                 DW      link
   1202.3  001574 FE                   DB      0FEh      // ; immediate
                                                                         (LSB=0
                                                                        )
   1202.4  001575              link    SET     $
   1202.5  001575 06                   DB      6
   1202.6  001576 41424F525422         DB      'ABORT"'
   1202.7  00157C                      EVEN
   1202.8  00157C                      IF      'DOCOLON'='DOCODE'
   1202.9  00157C              ABORTQUOTE: DW     $+2
   1202.10 00157C                      ELSE
   1202.11 00157C ....         ABORTQUOTE: DW      DOCOLON
   1202.12 00157E                      ENDIF
   1202.13 00157E                      ENDM
   1203    00157E ....                 DW ISQUOTE
   1204    001580 ............         DW lit,QABORT,COMMAXT
   1205    001586 ....                 DW EXIT
   1206    001588              
   1207    001588              ;C '    -- xt           find word in dictionary
   1208    001588              ;   BL WORD CAPITALIZE FIND
   1209    001588              ;   0= ABORT" ?" ;
   1210    001588                  HEADER  TICK,1,27h,DOCOLON
   1210.1  000000                      PUBLIC  TICK
   1210.2  001588 ....                 DW      link
   1210.3  00158A FF                   DB      0FFh       ; not immediate
   1210.4  00158B              link    SET     $
   1210.5  00158B 01                   DB      1
   1210.6  00158C 27                   DB      27h
   1210.7  00158D 00                   EVEN
   1210.8  00158E                      IF      'DOCOLON'='DOCODE'
   1210.9  00158E              TICK: DW     $+2
   1210.10 00158E                      ELSE
   1210.11 00158E ....         TICK: DW      DOCOLON
   1210.12 001590                      ENDIF
   1210.13 001590                      ENDM
   1211    001590 ............*        DW BLANK,WORDD,CAPITALIZE,FIND,ZEROEQUAL
                                           ,XISQUOTE
   1212    00159C 013F                 DB 1,'?'
   1213    00159E ........             DW QABORT,EXIT
   1214    0015A2              
   1215    0015A2              ;C CHAR   -- char           parse ASCII
                                character
   1216    0015A2              ;   BL WORD 1+ C@ ;
   1217    0015A2                  HEADER  CHARR,4,'CHAR',DOCOLON
   1217.1  000000                      PUBLIC  CHARR
   1217.2  0015A2 ....                 DW      link
   1217.3  0015A4 FF                   DB      0FFh       ; not immediate
   1217.4  0015A5              link    SET     $
   1217.5  0015A5 04                   DB      4
   1217.6  0015A6 43484152             DB      'CHAR'
   1217.7  0015AA                      EVEN
   1217.8  0015AA                      IF      'DOCOLON'='DOCODE'
   1217.9  0015AA              CHARR: DW     $+2
   1217.10 0015AA                      ELSE
   1217.11 0015AA ....         CHARR: DW      DOCOLON
   1217.12 0015AC                      ENDIF
   1217.13 0015AC                      ENDM
   1218    0015AC ............*        DW BLANK,WORDD,ONEPLUS,CFETCH,EXIT
   1219    0015B6              
   1220    0015B6              ;C [CHAR]   --          compile character
                                literal
   1221    0015B6              ;   CHAR  ['] LIT ,XT  I, ; IMMEDIATE
   1222    0015B6                  IMMED  BRACCHAR,6,'[CHAR]',DOCOLON
   1222.1  000000                      PUBLIC  BRACCHAR
   1222.2  0015B6 ....                 DW      link
   1222.3  0015B8 FE                   DB      0FEh      // ; immediate
                                                                       (LSB=0)
                                  - 4e-LP430 -                        Page  116

   1222.4  0015B9              link    SET     $
   1222.5  0015B9 06                   DB      6
   1222.6  0015BA 5B434841525D         DB      '[CHAR]'
   1222.7  0015C0                      EVEN
   1222.8  0015C0                      IF      'DOCOLON'='DOCODE'
   1222.9  0015C0              BRACCHAR: DW     $+2
   1222.10 0015C0                      ELSE
   1222.11 0015C0 ....         BRACCHAR: DW      DOCOLON
   1222.12 0015C2                      ENDIF
   1222.13 0015C2                      ENDM
   1223    0015C2 ....                 DW CHARR
   1224    0015C4 ............         DW lit,lit,COMMAXT
   1225    0015CA ........             DW ICOMMA,EXIT
   1226    0015CE              
   1227    0015CE              ;C (    --                     skip input until
                                )
   1228    0015CE              ;   [ HEX ] 29 PARSE 2DROP ; IMMEDIATE
   1229    0015CE                  IMMED  PAREN,1,'(',DOCOLON
   1229.1  000000                      PUBLIC  PAREN
   1229.2  0015CE ....                 DW      link
   1229.3  0015D0 FE                   DB      0FEh      // ; immediate
                                                               (LSB=0)
   1229.4  0015D1              link    SET     $
   1229.5  0015D1 01                   DB      1
   1229.6  0015D2 28                   DB      '('
   1229.7  0015D3 00                   EVEN
   1229.8  0015D4                      IF      'DOCOLON'='DOCODE'
   1229.9  0015D4              PAREN: DW     $+2
   1229.10 0015D4                      ELSE
   1229.11 0015D4 ....         PAREN: DW      DOCOLON
   1229.12 0015D6                      ENDIF
   1229.13 0015D6                      ENDM
   1230    0015D6 ....2900....*        DW lit,29H,PARSE,TWODROP,EXIT
   1231    0015E0              
   1232    0015E0              ; COMPILER =====================================
                               =
   1233    0015E0              
   1234    0015E0              ;Z HEADER   --      create a Forth word
                                header
   1235    0015E0              ;   LATEST @ H, 0FF HC,         link & IMMED 
                                field
   1236    0015E0              ;   HHERE LATEST !            new "latest"
                                link
   1237    0015E0              ;   BL HWORD HC@ 1+ HALLOT    name field
   1238    0015E0              ;   ALIGN ;
   1239    0015E0              ; Separate headers model.
   1240    0015E0                  HEADER  HEADR,6,'HEADER',DOCOLON
   1240.1  000000                      PUBLIC  HEADR
   1240.2  0015E0 ....                 DW      link
   1240.3  0015E2 FF                   DB      0FFh       ; not immediate
   1240.4  0015E3              link    SET     $
   1240.5  0015E3 06                   DB      6
   1240.6  0015E4 484541444552         DB      'HEADER'
   1240.7  0015EA                      EVEN
   1240.8  0015EA                      IF      'DOCOLON'='DOCODE'
   1240.9  0015EA              HEADR: DW     $+2
   1240.10 0015EA                      ELSE
   1240.11 0015EA ....         HEADR: DW      DOCOLON
   1240.12 0015EC                      ENDIF
   1240.13 0015EC                      ENDM
   1241    0015EC ............         DW LATEST,FETCH,HCOMMA      ; link
   1242    0015F2 ....FF00....         DW lit,0FFh,HCCOMMA         ; immediate
                                                                    flag - see
                                                                    note
                                                                    below
   1243    0015F8 ............         DW HHERE,LATEST,STORE
   1244    0015FE ............*        DW BLANK,HWORD,HCFETCH,ONEPLUS,HALLOT
   1245    001608 ........             DW ALIGNN,EXIT   ; MSP430: headers in I
                                                         space must be
                                                         aligned
   1246    00160C              ; Note for Flashable MSP430: when compiling to
                                RAM, we need to set
   1247    00160C              ; the immediate byte to 0FFH.  When compiling to
                                Flash, the word IC!
   1248    00160C              ; will not write 0FFH to erased Flash (because
                                the byte is already 0FFH).
   1249    00160C              ; Thus we can write this byte at a later time
                                (with IMMEDIATE).
                                  - 4e-LP430 -                        Page  117

   1250    00160C              
   1251    00160C              ;Z <BUILDS  --      define a word with t.b.d.
                                action & no data
   1252    00160C              ;   HEADER 2 IALLOT ;       Flashable: do not
                                store Code Field
   1253    00160C                  HEADER  BUILDS,7,'<BUILDS',DOCOLON
   1253.1  000000                      PUBLIC  BUILDS
   1253.2  00160C ....                 DW      link
   1253.3  00160E FF                   DB      0FFh       ; not immediate
   1253.4  00160F              link    SET     $
   1253.5  00160F 07                   DB      7
   1253.6  001610 3C4255494C44*        DB      '<BUILDS'
   1253.7  001617 00                   EVEN
   1253.8  001618                      IF      'DOCOLON'='DOCODE'
   1253.9  001618              BUILDS: DW     $+2
   1253.10 001618                      ELSE
   1253.11 001618 ....         BUILDS: DW      DOCOLON
   1253.12 00161A                      ENDIF
   1253.13 00161A                      ENDM
   1254    00161A ........0200*        DW HEADR,lit,2,IALLOT,EXIT
   1255    001624              
   1256    001624              ;C CREATE   --      create an empty definition
                                pointing to RAM
   1257    001624              ;   HEADER
   1258    001624              ;   docreate ,CF              code field
   1259    001624              ;   HERE I, ;           store data adr
                                (Harvard)
   1260    001624              ; Harvard model, separate Code and Data
                                spaces.
   1261    001624              ; Separate headers model.
   1262    001624                  HEADER  CREATE,6,'CREATE',DOCOLON
   1262.1  000000                      PUBLIC  CREATE
   1262.2  001624 ....                 DW      link
   1262.3  001626 FF                   DB      0FFh       ; not immediate
   1262.4  001627              link    SET     $
   1262.5  001627 06                   DB      6
   1262.6  001628 435245415445         DB      'CREATE'
   1262.7  00162E                      EVEN
   1262.8  00162E                      IF      'DOCOLON'='DOCODE'
   1262.9  00162E              CREATE: DW     $+2
   1262.10 00162E                      ELSE
   1262.11 00162E ....         CREATE: DW      DOCOLON
   1262.12 001630                      ENDIF
   1262.13 001630                      ENDM
   1263    001630 ....                 DW HEADR
   1264    001632 ............         DW lit,docreate,COMMACF
   1265    001638 ............         DW HERE,ICOMMA,EXIT
   1266    00163E              
   1267    00163E              ;Z (DOES>)  --      run-time action of
                                DOES>
   1268    00163E              ;   R>              adrs of headless DOES>
                                def'n
   1269    00163E              ;   LATEST @ NFA>CFA    code field to fix
                                up
   1270    00163E              ;   !CF ;
   1271    00163E                  HEADER  XDOES,7,'(DOES>)',DOCOLON
   1271.1  000000                      PUBLIC  XDOES
   1271.2  00163E ....                 DW      link
   1271.3  001640 FF                   DB      0FFh       ; not immediate
   1271.4  001641              link    SET     $
   1271.5  001641 07                   DB      7
   1271.6  001642 28444F45533E*        DB      '(DOES>)'
   1271.7  001649 00                   EVEN
   1271.8  00164A                      IF      'DOCOLON'='DOCODE'
   1271.9  00164A              XDOES: DW     $+2
   1271.10 00164A                      ELSE
   1271.11 00164A ....         XDOES: DW      DOCOLON
   1271.12 00164C                      ENDIF
   1271.13 00164C                      ENDM
   1272    00164C ............*        DW RFROM,LATEST,FETCH,NFATOCFA,STORECF
   1273    001656 ....                 DW EXIT
   1274    001658              
   1275    001658              ;C DOES>    --      change action of latest
                                def'n
   1276    001658              ;   COMPILE (DOES>)
   1277    001658              ;   dodoes ,JMP ; IMMEDIATE
   1278    001658              ; Note that MSP430 uses a JMP, not a CALL, to
                                DODOES.
                                  - 4e-LP430 -                        Page  118

   1279    001658                  IMMED  DOES,5,'DOES>',DOCOLON
   1279.1  000000                      PUBLIC  DOES
   1279.2  001658 ....                 DW      link
   1279.3  00165A FE                   DB      0FEh      // ; immediate
                                                                  (LSB=0)
   1279.4  00165B              link    SET     $
   1279.5  00165B 05                   DB      5
   1279.6  00165C 444F45533E           DB      'DOES>'
   1279.7  001661 00                   EVEN
   1279.8  001662                      IF      'DOCOLON'='DOCODE'
   1279.9  001662              DOES: DW     $+2
   1279.10 001662                      ELSE
   1279.11 001662 ....         DOES: DW      DOCOLON
   1279.12 001664                      ENDIF
   1279.13 001664                      ENDM
   1280    001664 ............         DW lit,XDOES,COMMAXT
   1281    00166A ............*        DW lit,dodoes,COMMAJMP,EXIT
   1282    001672              
   1283    001672              ;C RECURSE  --      recurse current definition
   1284    001672              ;   LATEST @ NFA>CFA ,XT ; IMMEDIATE
   1285    001672              ;   NEWEST @ NFA>CFA ,XT ; IMMEDIATE  
                                Flashable
   1286    001672                  IMMED  RECURSE,7,'RECURSE',DOCOLON
   1286.1  000000                      PUBLIC  RECURSE
   1286.2  001672 ....                 DW      link
   1286.3  001674 FE                   DB      0FEh      // ; immediate
                                                                       (LSB=0)
   1286.4  001675              link    SET     $
   1286.5  001675 07                   DB      7
   1286.6  001676 524543555253*        DB      'RECURSE'
   1286.7  00167D 00                   EVEN
   1286.8  00167E                      IF      'DOCOLON'='DOCODE'
   1286.9  00167E              RECURSE: DW     $+2
   1286.10 00167E                      ELSE
   1286.11 00167E ....         RECURSE: DW      DOCOLON
   1286.12 001680                      ENDIF
   1286.13 001680                      ENDM
   1287    001680 ............*        DW NEWEST,FETCH,NFATOCFA,COMMAXT,EXIT
   1288    00168A              
   1289    00168A              ;C [        --      enter interpretive
                                state
   1290    00168A              ;   0 STATE ! ; IMMEDIATE
   1291    00168A                  IMMED  LEFTBRACKET,1,'[',DOCOLON
   1291.1  000000                      PUBLIC  LEFTBRACKET
   1291.2  00168A ....                 DW      link
   1291.3  00168C FE                   DB      0FEh      // ; immediate
                                                                     (LSB=0)
   1291.4  00168D              link    SET     $
   1291.5  00168D 01                   DB      1
   1291.6  00168E 5B                   DB      '['
   1291.7  00168F 00                   EVEN
   1291.8  001690                      IF      'DOCOLON'='DOCODE'
   1291.9  001690              LEFTBRACKET: DW     $+2
   1291.10 001690                      ELSE
   1291.11 001690 ....         LEFTBRACKET: DW      DOCOLON
   1291.12 001692                      ENDIF
   1291.13 001692                      ENDM
   1292    001692 ............*        DW ZERO,STATE,STORE,EXIT
   1293    00169A              
   1294    00169A              ;C ]        --      enter compiling state
   1295    00169A              ;   -1 STATE ! ;
   1296    00169A                  HEADER  RIGHTBRACKET,1,']',DOCOLON
   1296.1  000000                      PUBLIC  RIGHTBRACKET
   1296.2  00169A ....                 DW      link
   1296.3  00169C FF                   DB      0FFh       ; not immediate
   1296.4  00169D              link    SET     $
   1296.5  00169D 01                   DB      1
   1296.6  00169E 5D                   DB      ']'
   1296.7  00169F 00                   EVEN
   1296.8  0016A0                      IF      'DOCOLON'='DOCODE'
   1296.9  0016A0              RIGHTBRACKET: DW     $+2
   1296.10 0016A0                      ELSE
   1296.11 0016A0 ....         RIGHTBRACKET: DW      DOCOLON
   1296.12 0016A2                      ENDIF
   1296.13 0016A2                      ENDM
   1297    0016A2 ....FFFF....*        DW lit,-1,STATE,STORE,EXIT
   1298    0016AC              
   1299    0016AC              ;Z HIDE     --      "hide" latest definition   
                                  - 4e-LP430 -                        Page  119

                                Flashable
   1300    0016AC              ;   LATEST @ DUP NEWEST !  NFA>LFA H@ LATEST !
                                ;
   1301    0016AC                  HEADER  HIDE,4,'HIDE',DOCOLON
   1301.1  000000                      PUBLIC  HIDE
   1301.2  0016AC ....                 DW      link
   1301.3  0016AE FF                   DB      0FFh       ; not immediate
   1301.4  0016AF              link    SET     $
   1301.5  0016AF 04                   DB      4
   1301.6  0016B0 48494445             DB      'HIDE'
   1301.7  0016B4                      EVEN
   1301.8  0016B4                      IF      'DOCOLON'='DOCODE'
   1301.9  0016B4              HIDE: DW     $+2
   1301.10 0016B4                      ELSE
   1301.11 0016B4 ....         HIDE: DW      DOCOLON
   1301.12 0016B6                      ENDIF
   1301.13 0016B6                      ENDM
   1302    0016B6 ............*        DW LATEST,FETCH,DUP,NEWEST,STORE
   1303    0016C0 ............*        DW NFATOLFA,HFETCH,LATEST,STORE,EXIT
   1304    0016CA              
   1305    0016CA              ;Z REVEAL   --      "reveal" latest definition 
                                Flashable
   1306    0016CA              ;   NEWEST @ LATEST ! ;
   1307    0016CA                  HEADER  REVEAL,6,'REVEAL',DOCOLON
   1307.1  000000                      PUBLIC  REVEAL
   1307.2  0016CA ....                 DW      link
   1307.3  0016CC FF                   DB      0FFh       ; not immediate
   1307.4  0016CD              link    SET     $
   1307.5  0016CD 06                   DB      6
   1307.6  0016CE 52455645414C         DB      'REVEAL'
   1307.7  0016D4                      EVEN
   1307.8  0016D4                      IF      'DOCOLON'='DOCODE'
   1307.9  0016D4              REVEAL: DW     $+2
   1307.10 0016D4                      ELSE
   1307.11 0016D4 ....         REVEAL: DW      DOCOLON
   1307.12 0016D6                      ENDIF
   1307.13 0016D6                      ENDM
   1308    0016D6 ............*        DW NEWEST,FETCH,LATEST,STORE,EXIT
   1309    0016E0              
   1310    0016E0              ;C IMMEDIATE   --   make last def'n immediate
   1311    0016E0              ;   0FE LATEST @ 1- HC! ;   set Flashable
                                immediate flag
   1312    0016E0                  HEADER  IMMEDIATE,9,'IMMEDIATE',DOCOLON
   1312.1  000000                      PUBLIC  IMMEDIATE
   1312.2  0016E0 ....                 DW      link
   1312.3  0016E2 FF                   DB      0FFh       ; not immediate
   1312.4  0016E3              link    SET     $
   1312.5  0016E3 09                   DB      9
   1312.6  0016E4 494D4D454449*        DB      'IMMEDIATE'
   1312.7  0016ED 00                   EVEN
   1312.8  0016EE                      IF      'DOCOLON'='DOCODE'
   1312.9  0016EE              IMMEDIATE: DW     $+2
   1312.10 0016EE                      ELSE
   1312.11 0016EE ....         IMMEDIATE: DW      DOCOLON
   1312.12 0016F0                      ENDIF
   1312.13 0016F0                      ENDM
   1313    0016F0 ....FE00....*        DW lit,0FEh,LATEST,FETCH,ONEMINUS,HCSTOR
                                           E
   1314    0016FC ....                 DW EXIT
   1315    0016FE              
   1316    0016FE              ;C :        --      begin a colon definition 
                                
   1317    0016FE              ;   <BUILDS HIDE ] !COLON ;      Flashable
                                version
   1318    0016FE                  HEADER  COLON,1,':',DOCOLON
   1318.1  000000                      PUBLIC  COLON
   1318.2  0016FE ....                 DW      link
   1318.3  001700 FF                   DB      0FFh       ; not immediate
   1318.4  001701              link    SET     $
   1318.5  001701 01                   DB      1
   1318.6  001702 3A                   DB      ':'
   1318.7  001703 00                   EVEN
   1318.8  001704                      IF      'DOCOLON'='DOCODE'
   1318.9  001704              COLON: DW     $+2
   1318.10 001704                      ELSE
   1318.11 001704 ....         COLON: DW      DOCOLON
   1318.12 001706                      ENDIF
   1318.13 001706                      ENDM
                                  - 4e-LP430 -                        Page  120

   1319    001706 ............*        DW BUILDS,HIDE,RIGHTBRACKET,STORCOLON
   1320    00170E ....                 DW EXIT
   1321    001710              
   1322    001710              ;C ;       --       end a colon definition
                                
   1323    001710              ;   REVEAL  ,EXIT
   1324    001710              ;   POSTPONE [  ; IMMEDIATE
   1325    001710                  IMMED  SEMICOLON,1,';',DOCOLON
   1325.1  000000                      PUBLIC  SEMICOLON
   1325.2  001710 ....                 DW      link
   1325.3  001712 FE                   DB      0FEh      // ; immediate
                                                             (LSB=0)
   1325.4  001713              link    SET     $
   1325.5  001713 01                   DB      1
   1325.6  001714 3B                   DB      ';'
   1325.7  001715 00                   EVEN
   1325.8  001716                      IF      'DOCOLON'='DOCODE'
   1325.9  001716              SEMICOLON: DW     $+2
   1325.10 001716                      ELSE
   1325.11 001716 ....         SEMICOLON: DW      DOCOLON
   1325.12 001718                      ENDIF
   1325.13 001718                      ENDM
   1326    001718 ........             DW REVEAL,CEXIT
   1327    00171C ........             DW LEFTBRACKET,EXIT
   1328    001720              
   1329    001720              ;C [']  --         find word & compile as
                                literal
   1330    001720              ;   '  ['] LIT ,XT  I, ; IMMEDIATE
   1331    001720              ; When encountered in a colon definition,
                                the
   1332    001720              ; phrase  ['] xxx  will cause   LIT,xxt  to
                                be
   1333    001720              ; compiled into the colon definition (where
   1334    001720              ; (where xxt is the execution token of word
                                xxx).
   1335    001720              ; When the colon definition executes, xxt
                                will
   1336    001720              ; be put on the stack.  (All xt's are one
                                cell.)
   1337    001720                  IMMED  BRACTICK,3,'[\']',DOCOLON
   1337.1  000000                      PUBLIC  BRACTICK
   1337.2  001720 ....                 DW      link
   1337.3  001722 FE                   DB      0FEh      // ; immediate
                                                                     (LSB=0)
   1337.4  001723              link    SET     $
   1337.5  001723 03                   DB      3
   1337.6  001724 5B275D               DB      '[\']'
   1337.7  001727 00                   EVEN
   1337.8  001728                      IF      'DOCOLON'='DOCODE'
   1337.9  001728              BRACTICK: DW     $+2
   1337.10 001728                      ELSE
   1337.11 001728 ....         BRACTICK: DW      DOCOLON
   1337.12 00172A                      ENDIF
   1337.13 00172A                      ENDM
   1338    00172A ....                 DW TICK               ; get xt of
                                                              'xxx'
   1339    00172C ............         DW lit,lit,COMMAXT    ; append LIT
                                                              action
   1340    001732 ........             DW ICOMMA,EXIT        ; append xt
                                                              literal
   1341    001736              
   1342    001736              ;C POSTPONE  --   postpone compile action of
                                word
   1343    001736              ;   BL WORD FIND
   1344    001736              ;   DUP 0= ABORT" ?"
   1345    001736              ;   0< IF   -- xt  non immed: add code to
                                current
   1346    001736              ;                  def'n to compile xt
                                later.
   1347    001736              ;       ['] LIT ,XT  I,     add "LIT,xt,COMMAXT"
   1348    001736              ;       ['] ,XT ,XT         to current
                                definition
   1349    001736              ;   ELSE  ,XT      immed: compile into cur.
                                def'n
   1350    001736              ;   THEN ; IMMEDIATE
   1351    001736                  IMMED  POSTPONE,8,'POSTPONE',DOCOLON
   1351.1  000000                      PUBLIC  POSTPONE
   1351.2  001736 ....                 DW      link
                                  - 4e-LP430 -                        Page  121

   1351.3  001738 FE                   DB      0FEh      // ; immediate
                                                                         (LSB=0
                                                                        )
   1351.4  001739              link    SET     $
   1351.5  001739 08                   DB      8
   1351.6  00173A 504F5354504F*        DB      'POSTPONE'
   1351.7  001742                      EVEN
   1351.8  001742                      IF      'DOCOLON'='DOCODE'
   1351.9  001742              POSTPONE: DW     $+2
   1351.10 001742                      ELSE
   1351.11 001742 ....         POSTPONE: DW      DOCOLON
   1351.12 001744                      ENDIF
   1351.13 001744                      ENDM
   1352    001744 ............*        DW BLANK,WORDD,FIND,DUP,ZEROEQUAL,XISQUO
                                           TE
   1353    001750 013F                 DB 1,'?'
   1354    001752 ............         DW QABORT,ZEROLESS,qbran
   1355    001758                      DEST  POST1
   1355.1  001758 1400                 DW      POST1-$
   1355.2  00175A                      ENDM
   1356    00175A ............*        DW lit,lit,COMMAXT,ICOMMA
   1357    001762 ............*        DW lit,COMMAXT,COMMAXT,bran
   1358    00176A                      DEST  POST2
   1358.1  00176A 0400                 DW      POST2-$
   1358.2  00176C                      ENDM
   1359    00176C ....         POST1:  DW COMMAXT
   1360    00176E ....         POST2:  DW EXIT
   1361    001770              
   1362    001770              ;Z COMPILE   --   append inline execution
                                token
   1363    001770              ;   R> DUP CELL+ >R @ ,XT ;
   1364    001770              ; The phrase ['] xxx ,XT appears so often
                                that
   1365    001770              ; this word was created to combine the
                                actions
   1366    001770              ; of LIT and ,XT.  It takes an inline literal
   1367    001770              ; execution token and appends it to the
                                dict.
   1368    001770              ;    HEADER  COMPILE,7,'COMPILE',DOCOLON
   1369    001770              ;        DW RFROM,DUP,CELLPLUS,TOR
   1370    001770              ;        DW FETCH,COMMAXT,EXIT
   1371    001770              ; N.B.: not used in the current implementation
   1372    001770              
   1373    001770              ; CONTROL STRUCTURES ===========================
                               =
   1374    001770              
   1375    001770              ;C IF       -- adrs    conditional forward
                                branch
   1376    001770              ;   ['] qbran ,BRANCH  IHERE ,NONE ;     
                                Flashable
   1377    001770              ;   IMMEDIATE
   1378    001770                  IMMED  IFF,2,'IF',DOCOLON
   1378.1  000000                      PUBLIC  IFF
   1378.2  001770 ....                 DW      link
   1378.3  001772 FE                   DB      0FEh      // ; immediate
                                                               (LSB=0)
   1378.4  001773              link    SET     $
   1378.5  001773 02                   DB      2
   1378.6  001774 4946                 DB      'IF'
   1378.7  001776                      EVEN
   1378.8  001776                      IF      'DOCOLON'='DOCODE'
   1378.9  001776              IFF: DW     $+2
   1378.10 001776                      ELSE
   1378.11 001776 ....         IFF: DW      DOCOLON
   1378.12 001778                      ENDIF
   1378.13 001778                      ENDM
   1379    001778 ............         DW lit,qbran,COMMABRANCH
   1380    00177E ............         DW IHERE,COMMANONE,EXIT
   1381    001784              
   1382    001784              ;C THEN     adrs --        resolve forward
                                branch
   1383    001784              ;   IHERE SWAP !DEST ; IMMEDIATE
   1384    001784                  IMMED  THEN,4,'THEN',DOCOLON
   1384.1  000000                      PUBLIC  THEN
   1384.2  001784 ....                 DW      link
   1384.3  001786 FE                   DB      0FEh      // ; immediate
                                                                 (LSB=0)
   1384.4  001787              link    SET     $
                                  - 4e-LP430 -                        Page  122

   1384.5  001787 04                   DB      4
   1384.6  001788 5448454E             DB      'THEN'
   1384.7  00178C                      EVEN
   1384.8  00178C                      IF      'DOCOLON'='DOCODE'
   1384.9  00178C              THEN: DW     $+2
   1384.10 00178C                      ELSE
   1384.11 00178C ....         THEN: DW      DOCOLON
   1384.12 00178E                      ENDIF
   1384.13 00178E                      ENDM
   1385    00178E ............*        DW IHERE,SWAP,STOREDEST,EXIT
   1386    001796              
   1387    001796              ;C ELSE     adrs1 -- adrs2    branch for
                                IF..ELSE
   1388    001796              ;   ['] branch ,BRANCH  IHERE ,NONE      
                                Flashable
   1389    001796              ;   SWAP  POSTPONE THEN ; IMMEDIATE
   1390    001796                  IMMED  ELSS,4,'ELSE',DOCOLON
   1390.1  000000                      PUBLIC  ELSS
   1390.2  001796 ....                 DW      link
   1390.3  001798 FE                   DB      0FEh      // ; immediate
                                                                 (LSB=0)
   1390.4  001799              link    SET     $
   1390.5  001799 04                   DB      4
   1390.6  00179A 454C5345             DB      'ELSE'
   1390.7  00179E                      EVEN
   1390.8  00179E                      IF      'DOCOLON'='DOCODE'
   1390.9  00179E              ELSS: DW     $+2
   1390.10 00179E                      ELSE
   1390.11 00179E ....         ELSS: DW      DOCOLON
   1390.12 0017A0                      ENDIF
   1390.13 0017A0                      ENDM
   1391    0017A0 ............         DW lit,bran,COMMABRANCH
   1392    0017A6 ........             DW IHERE,COMMANONE
   1393    0017AA ............         DW SWAP,THEN,EXIT
   1394    0017B0              
   1395    0017B0              ;C BEGIN    -- adrs        target for bwd.
                                branch
   1396    0017B0              ;   IHERE ; IMMEDIATE
   1397    0017B0                  IMMED  BEGIN,5,'BEGIN',DOCOLON
   1397.1  000000                      PUBLIC  BEGIN
   1397.2  0017B0 ....                 DW      link
   1397.3  0017B2 FE                   DB      0FEh      // ; immediate
                                                                   (LSB=0)
   1397.4  0017B3              link    SET     $
   1397.5  0017B3 05                   DB      5
   1397.6  0017B4 424547494E           DB      'BEGIN'
   1397.7  0017B9 00                   EVEN
   1397.8  0017BA                      IF      'DOCOLON'='DOCODE'
   1397.9  0017BA              BEGIN: DW     $+2
   1397.10 0017BA                      ELSE
   1397.11 0017BA ....         BEGIN: DW      DOCOLON
   1397.12 0017BC                      ENDIF
   1397.13 0017BC                      ENDM
   1398    0017BC ........             DW IHERE,EXIT
   1399    0017C0              
   1400    0017C0              ;C UNTIL    adrs --   conditional backward
                                branch
   1401    0017C0              ;   ['] qbran ,BRANCH  ,DEST ; IMMEDIATE
   1402    0017C0              ;   conditional backward branch
   1403    0017C0                  IMMED  UNTIL,5,'UNTIL',DOCOLON
   1403.1  000000                      PUBLIC  UNTIL
   1403.2  0017C0 ....                 DW      link
   1403.3  0017C2 FE                   DB      0FEh      // ; immediate
                                                                   (LSB=0)
   1403.4  0017C3              link    SET     $
   1403.5  0017C3 05                   DB      5
   1403.6  0017C4 554E54494C           DB      'UNTIL'
   1403.7  0017C9 00                   EVEN
   1403.8  0017CA                      IF      'DOCOLON'='DOCODE'
   1403.9  0017CA              UNTIL: DW     $+2
   1403.10 0017CA                      ELSE
   1403.11 0017CA ....         UNTIL: DW      DOCOLON
   1403.12 0017CC                      ENDIF
   1403.13 0017CC                      ENDM
   1404    0017CC ............         DW lit,qbran,COMMABRANCH
   1405    0017D2 ........             DW COMMADEST,EXIT
   1406    0017D6              
   1407    0017D6              ;X AGAIN    adrs --      uncond'l backward
                                  - 4e-LP430 -                        Page  123

                                branch
   1408    0017D6              ;   ['] branch ,BRANCH  ,DEST ; IMMEDIATE
   1409    0017D6              ;   unconditional backward branch
   1410    0017D6                  IMMED  AGAIN,5,'AGAIN',DOCOLON
   1410.1  000000                      PUBLIC  AGAIN
   1410.2  0017D6 ....                 DW      link
   1410.3  0017D8 FE                   DB      0FEh      // ; immediate
                                                                   (LSB=0)
   1410.4  0017D9              link    SET     $
   1410.5  0017D9 05                   DB      5
   1410.6  0017DA 414741494E           DB      'AGAIN'
   1410.7  0017DF 00                   EVEN
   1410.8  0017E0                      IF      'DOCOLON'='DOCODE'
   1410.9  0017E0              AGAIN: DW     $+2
   1410.10 0017E0                      ELSE
   1410.11 0017E0 ....         AGAIN: DW      DOCOLON
   1410.12 0017E2                      ENDIF
   1410.13 0017E2                      ENDM
   1411    0017E2 ............         DW lit,bran,COMMABRANCH
   1412    0017E8 ........             DW COMMADEST,EXIT
   1413    0017EC              
   1414    0017EC              ;C WHILE    adrs1 -- adrs2 adrs1          
                                branch for WHILE loop
   1415    0017EC              ;   POSTPONE IF SWAP ; IMMEDIATE
   1416    0017EC                  IMMED  WHILE,5,'WHILE',DOCOLON
   1416.1  000000                      PUBLIC  WHILE
   1416.2  0017EC ....                 DW      link
   1416.3  0017EE FE                   DB      0FEh      // ; immediate
                                                                   (LSB=0)
   1416.4  0017EF              link    SET     $
   1416.5  0017EF 05                   DB      5
   1416.6  0017F0 5748494C45           DB      'WHILE'
   1416.7  0017F5 00                   EVEN
   1416.8  0017F6                      IF      'DOCOLON'='DOCODE'
   1416.9  0017F6              WHILE: DW     $+2
   1416.10 0017F6                      ELSE
   1416.11 0017F6 ....         WHILE: DW      DOCOLON
   1416.12 0017F8                      ENDIF
   1416.13 0017F8                      ENDM
   1417    0017F8 ............         DW IFF,SWAP,EXIT
   1418    0017FE              
   1419    0017FE              ;C REPEAT   adrs2 adrs1 --            resolve
                                WHILE loop
   1420    0017FE              ;   POSTPONE AGAIN POSTPONE THEN ; IMMEDIATE
   1421    0017FE                  IMMED  REPEAT,6,'REPEAT',DOCOLON
   1421.1  000000                      PUBLIC  REPEAT
   1421.2  0017FE ....                 DW      link
   1421.3  001800 FE                   DB      0FEh      // ; immediate
                                                                     (LSB=0)
   1421.4  001801              link    SET     $
   1421.5  001801 06                   DB      6
   1421.6  001802 524550454154         DB      'REPEAT'
   1421.7  001808                      EVEN
   1421.8  001808                      IF      'DOCOLON'='DOCODE'
   1421.9  001808              REPEAT: DW     $+2
   1421.10 001808                      ELSE
   1421.11 001808 ....         REPEAT: DW      DOCOLON
   1421.12 00180A                      ENDIF
   1421.13 00180A                      ENDM
   1422    00180A ............         DW AGAIN,THEN,EXIT
   1423    001810              
   1424    001810              ;Z >L   x -- L: -- x        move to leave
                                stack
   1425    001810              ;   CELL LP +!  LP @ ! ;      (L stack grows
                                up)
   1426    001810                  HEADER  TOL,2,'>L',DOCOLON
   1426.1  000000                      PUBLIC  TOL
   1426.2  001810 ....                 DW      link
   1426.3  001812 FF                   DB      0FFh       ; not immediate
   1426.4  001813              link    SET     $
   1426.5  001813 02                   DB      2
   1426.6  001814 3E4C                 DB      '>L'
   1426.7  001816                      EVEN
   1426.8  001816                      IF      'DOCOLON'='DOCODE'
   1426.9  001816              TOL: DW     $+2
   1426.10 001816                      ELSE
   1426.11 001816 ....         TOL: DW      DOCOLON
   1426.12 001818                      ENDIF
                                  - 4e-LP430 -                        Page  124

   1426.13 001818                      ENDM
   1427    001818 ............*        DW CELL,LP,PLUSSTORE,LP,FETCH,STORE,EXIT
   1428    001826              
   1429    001826              ;Z L>   -- x L: x --      move from leave
                                stack
   1430    001826              ;   LP @ @  CELL NEGATE LP +! ;
   1431    001826                  HEADER  LFROM,2,'L>',DOCOLON
   1431.1  000000                      PUBLIC  LFROM
   1431.2  001826 ....                 DW      link
   1431.3  001828 FF                   DB      0FFh       ; not immediate
   1431.4  001829              link    SET     $
   1431.5  001829 02                   DB      2
   1431.6  00182A 4C3E                 DB      'L>'
   1431.7  00182C                      EVEN
   1431.8  00182C                      IF      'DOCOLON'='DOCODE'
   1431.9  00182C              LFROM: DW     $+2
   1431.10 00182C                      ELSE
   1431.11 00182C ....         LFROM: DW      DOCOLON
   1431.12 00182E                      ENDIF
   1431.13 00182E                      ENDM
   1432    00182E ............         DW LP,FETCH,FETCH
   1433    001834 ............*        DW CELL,NEGATE,LP,PLUSSTORE,EXIT
   1434    00183E              
   1435    00183E              ;C DO       -- adrs L: -- 0       start a loop
                                
   1436    00183E              ;   ['] xdo ,XT   IHERE     target for bwd
                                branch
   1437    00183E              ;   0 >L ; IMMEDIATE           marker for
                                LEAVEs
   1438    00183E                  IMMED  DO,2,'DO',DOCOLON
   1438.1  000000                      PUBLIC  DO
   1438.2  00183E ....                 DW      link
   1438.3  001840 FE                   DB      0FEh      // ; immediate
                                                             (LSB=0)
   1438.4  001841              link    SET     $
   1438.5  001841 02                   DB      2
   1438.6  001842 444F                 DB      'DO'
   1438.7  001844                      EVEN
   1438.8  001844                      IF      'DOCOLON'='DOCODE'
   1438.9  001844              DO: DW     $+2
   1438.10 001844                      ELSE
   1438.11 001844 ....         DO: DW      DOCOLON
   1438.12 001846                      ENDIF
   1438.13 001846                      ENDM
   1439    001846 ............*        DW lit,xdo,COMMAXT,IHERE
   1440    00184E ............         DW ZERO,TOL,EXIT
   1441    001854              
   1442    001854              ;Z ENDLOOP   adrs xt -- L: 0 a1 a2 .. aN --  
                                common factor of LOOP and +LOOP
   1443    001854              ;   ,BRANCH  ,DEST                backward
                                loop
   1444    001854              ;   BEGIN L> ?DUP WHILE POSTPONE THEN REPEAT
                                ;
   1445    001854              ;                                 resolve
                                LEAVEs
   1446    001854              ; This is a common factor of LOOP and +LOOP.
   1447    001854                  HEADER  ENDLOOP,7,'ENDLOOP',DOCOLON
   1447.1  000000                      PUBLIC  ENDLOOP
   1447.2  001854 ....                 DW      link
   1447.3  001856 FF                   DB      0FFh       ; not immediate
   1447.4  001857              link    SET     $
   1447.5  001857 07                   DB      7
   1447.6  001858 454E444C4F4F*        DB      'ENDLOOP'
   1447.7  00185F 00                   EVEN
   1447.8  001860                      IF      'DOCOLON'='DOCODE'
   1447.9  001860              ENDLOOP: DW     $+2
   1447.10 001860                      ELSE
   1447.11 001860 ....         ENDLOOP: DW      DOCOLON
   1447.12 001862                      ENDIF
   1447.13 001862                      ENDM
   1448    001862 ........             DW COMMABRANCH,COMMADEST
   1449    001866 ............ LOOP1:  DW LFROM,QDUP,qbran
   1450    00186C                      DEST  LOOP2
   1450.1  00186C 0800                 DW      LOOP2-$
   1450.2  00186E                      ENDM
   1451    00186E ........             DW THEN,bran
   1452    001872                      DEST  LOOP1
   1452.1  001872 F4FF                 DW      LOOP1-$
                                  - 4e-LP430 -                        Page  125

   1452.2  001874                      ENDM
   1453    001874 ....         LOOP2:  DW EXIT
   1454    001876              
   1455    001876              ;C LOOP    adrs -- L: 0 a1 a2 .. aN --    finish
                                a loop
   1456    001876              ;   ['] xloop ENDLOOP ;  IMMEDIATE
   1457    001876                  IMMED  LOO,4,'LOOP',DOCOLON
   1457.1  000000                      PUBLIC  LOO
   1457.2  001876 ....                 DW      link
   1457.3  001878 FE                   DB      0FEh      // ; immediate
                                                                (LSB=0)
   1457.4  001879              link    SET     $
   1457.5  001879 04                   DB      4
   1457.6  00187A 4C4F4F50             DB      'LOOP'
   1457.7  00187E                      EVEN
   1457.8  00187E                      IF      'DOCOLON'='DOCODE'
   1457.9  00187E              LOO: DW     $+2
   1457.10 00187E                      ELSE
   1457.11 00187E ....         LOO: DW      DOCOLON
   1457.12 001880                      ENDIF
   1457.13 001880                      ENDM
   1458    001880 ............*        DW lit,xloop,ENDLOOP,EXIT
   1459    001888              
   1460    001888              ;C +LOOP   adrs -- L: 0 a1 a2 .. aN --    finish
                                a loop
   1461    001888              ;   ['] xplusloop ENDLOOP ;  IMMEDIATE
   1462    001888                  IMMED  PLUSLOOP,5,'+LOOP',DOCOLON
   1462.1  000000                      PUBLIC  PLUSLOOP
   1462.2  001888 ....                 DW      link
   1462.3  00188A FE                   DB      0FEh      // ; immediate
                                                                      (LSB=0)
   1462.4  00188B              link    SET     $
   1462.5  00188B 05                   DB      5
   1462.6  00188C 2B4C4F4F50           DB      '+LOOP'
   1462.7  001891 00                   EVEN
   1462.8  001892                      IF      'DOCOLON'='DOCODE'
   1462.9  001892              PLUSLOOP: DW     $+2
   1462.10 001892                      ELSE
   1462.11 001892 ....         PLUSLOOP: DW      DOCOLON
   1462.12 001894                      ENDIF
   1462.13 001894                      ENDM
   1463    001894 ............*        DW lit,xplusloop,ENDLOOP,EXIT
   1464    00189C              
   1465    00189C              ;C LEAVE    -- L: -- adrs
   1466    00189C              ;   ['] UNLOOP ,XT
   1467    00189C              ;   ['] branch ,BRANCH   IHERE ,NONE  >L
   1468    00189C              ;   ; IMMEDIATE      unconditional forward
                                branch
   1469    00189C                  IMMED  LEAV,5,'LEAVE',DOCOLON
   1469.1  000000                      PUBLIC  LEAV
   1469.2  00189C ....                 DW      link
   1469.3  00189E FE                   DB      0FEh      // ; immediate
                                                                  (LSB=0)
   1469.4  00189F              link    SET     $
   1469.5  00189F 05                   DB      5
   1469.6  0018A0 4C45415645           DB      'LEAVE'
   1469.7  0018A5 00                   EVEN
   1469.8  0018A6                      IF      'DOCOLON'='DOCODE'
   1469.9  0018A6              LEAV: DW     $+2
   1469.10 0018A6                      ELSE
   1469.11 0018A6 ....         LEAV: DW      DOCOLON
   1469.12 0018A8                      ENDIF
   1469.13 0018A8                      ENDM
   1470    0018A8 ............         DW lit,UNLOOP,COMMAXT
   1471    0018AE ............         DW lit,bran,COMMABRANCH
   1472    0018B4 ............*        DW IHERE,COMMANONE,TOL,EXIT
   1473    0018BC              
   1474    0018BC              ; OTHER OPERATIONS =============================
                               =
   1475    0018BC              
   1476    0018BC              ;X WITHIN   n1|u1 n2|u2 n3|u3 -- f        
                                n2<=n1<n3?
   1477    0018BC              ;  OVER - >R - R> U< ;          per ANS
                                document
   1478    0018BC                  HEADER  WITHIN,6,'WITHIN',DOCOLON
   1478.1  000000                      PUBLIC  WITHIN
   1478.2  0018BC ....                 DW      link
   1478.3  0018BE FF                   DB      0FFh       ; not immediate
                                  - 4e-LP430 -                        Page  126

   1478.4  0018BF              link    SET     $
   1478.5  0018BF 06                   DB      6
   1478.6  0018C0 57495448494E         DB      'WITHIN'
   1478.7  0018C6                      EVEN
   1478.8  0018C6                      IF      'DOCOLON'='DOCODE'
   1478.9  0018C6              WITHIN: DW     $+2
   1478.10 0018C6                      ELSE
   1478.11 0018C6 ....         WITHIN: DW      DOCOLON
   1478.12 0018C8                      ENDIF
   1478.13 0018C8                      ENDM
   1479    0018C8 ............*        DW OVER,MINUS,TOR,MINUS,RFROM,ULESS,EXIT
   1480    0018D6              
   1481    0018D6              ;C MOVE    addr1 addr2 u --     smart move
   1482    0018D6              ;             VERSION FOR 1 ADDRESS UNIT = 1
                                CHAR
   1483    0018D6              ;  >R 2DUP SWAP DUP R@ +     -- ... dst src
                                src+n
   1484    0018D6              ;  WITHIN IF  R> CMOVE>        src <= dst <
                                src+n
   1485    0018D6              ;       ELSE  R> CMOVE  THEN ;         
                                otherwise
   1486    0018D6                  HEADER  MOVE,4,'MOVE',DOCOLON
   1486.1  000000                      PUBLIC  MOVE
   1486.2  0018D6 ....                 DW      link
   1486.3  0018D8 FF                   DB      0FFh       ; not immediate
   1486.4  0018D9              link    SET     $
   1486.5  0018D9 04                   DB      4
   1486.6  0018DA 4D4F5645             DB      'MOVE'
   1486.7  0018DE                      EVEN
   1486.8  0018DE                      IF      'DOCOLON'='DOCODE'
   1486.9  0018DE              MOVE: DW     $+2
   1486.10 0018DE                      ELSE
   1486.11 0018DE ....         MOVE: DW      DOCOLON
   1486.12 0018E0                      ENDIF
   1486.13 0018E0                      ENDM
   1487    0018E0 ............*        DW TOR,TWODUP,SWAP,DUP,RFETCH,PLUS
   1488    0018EC ........             DW WITHIN,qbran
   1489    0018F0                      DEST  MOVE1
   1489.1  0018F0 0A00                 DW      MOVE1-$
   1489.2  0018F2                      ENDM
   1490    0018F2 ............         DW RFROM,CMOVEUP,bran
   1491    0018F8                      DEST  MOVE2
   1491.1  0018F8 0600                 DW      MOVE2-$
   1491.2  0018FA                      ENDM
   1492    0018FA ........     MOVE1:  DW RFROM,CMOVE
   1493    0018FE ....         MOVE2:  DW EXIT
   1494    001900              
   1495    001900              ;C DEPTH    -- +n        number of items on
                                stack
   1496    001900              ;   SP@ S0 SWAP - 2/ ;   16-BIT VERSION!
   1497    001900                  HEADER  DEPTH,5,'DEPTH',DOCOLON
   1497.1  000000                      PUBLIC  DEPTH
   1497.2  001900 ....                 DW      link
   1497.3  001902 FF                   DB      0FFh       ; not immediate
   1497.4  001903              link    SET     $
   1497.5  001903 05                   DB      5
   1497.6  001904 4445505448           DB      'DEPTH'
   1497.7  001909 00                   EVEN
   1497.8  00190A                      IF      'DOCOLON'='DOCODE'
   1497.9  00190A              DEPTH: DW     $+2
   1497.10 00190A                      ELSE
   1497.11 00190A ....         DEPTH: DW      DOCOLON
   1497.12 00190C                      ENDIF
   1497.13 00190C                      ENDM
   1498    00190C ............*        DW SPFETCH,S0,SWAP,MINUS,TWOSLASH,EXIT
   1499    001918              
   1500    001918              ;C ENVIRONMENT?  c-addr u -- false       system
                                query
   1501    001918              ;                         -- i*x true
   1502    001918              ;   2DROP 0 ;       the minimal definition!
   1503    001918                  HEADER  ENVIRONMENTQ,12,'ENVIRONMENT?',DOCOL
                               ON
   1503.1  000000                      PUBLIC  ENVIRONMENTQ
   1503.2  001918 ....                 DW      link
   1503.3  00191A FF                   DB      0FFh       ; not immediate
   1503.4  00191B              link    SET     $
   1503.5  00191B 0C                   DB      12
   1503.6  00191C 454E5649524F*        DB      'ENVIRONMENT?'
                                  - 4e-LP430 -                        Page  127

   1503.7  001928                      EVEN
   1503.8  001928                      IF      'DOCOLON'='DOCODE'
   1503.9  001928              ENVIRONMENTQ: DW     $+2
   1503.10 001928                      ELSE
   1503.11 001928 ....         ENVIRONMENTQ: DW      DOCOLON
   1503.12 00192A                      ENDIF
   1503.13 00192A                      ENDM
   1504    00192A ............         DW TWODROP,ZERO,EXIT
   1505    001930              
   1506    001930              ;U UTILITY WORDS =====================
   1507    001930              
   1508    001930              ;Z NOOP       --    do nothing
   1509    001930                  HEADER  NOOP,4,'NOOP',DOCOLON
   1509.1  000000                      PUBLIC  NOOP
   1509.2  001930 ....                 DW      link
   1509.3  001932 FF                   DB      0FFh       ; not immediate
   1509.4  001933              link    SET     $
   1509.5  001933 04                   DB      4
   1509.6  001934 4E4F4F50             DB      'NOOP'
   1509.7  001938                      EVEN
   1509.8  001938                      IF      'DOCOLON'='DOCODE'
   1509.9  001938              NOOP: DW     $+2
   1509.10 001938                      ELSE
   1509.11 001938 ....         NOOP: DW      DOCOLON
   1509.12 00193A                      ENDIF
   1509.13 00193A                      ENDM
   1510    00193A ....               DW EXIT
   1511    00193C              
   1512    00193C              ;Z FLALIGNED   a -- a'      align IDP to flash
                                boundary
   1513    00193C              ;   $200 OVER - $1FF AND + ;
   1514    00193C                  HEADER  FLALIGNED,9,'FLALIGNED',DOCOLON
   1514.1  000000                      PUBLIC  FLALIGNED
   1514.2  00193C ....                 DW      link
   1514.3  00193E FF                   DB      0FFh       ; not immediate
   1514.4  00193F              link    SET     $
   1514.5  00193F 09                   DB      9
   1514.6  001940 464C414C4947*        DB      'FLALIGNED'
   1514.7  001949 00                   EVEN
   1514.8  00194A                      IF      'DOCOLON'='DOCODE'
   1514.9  00194A              FLALIGNED: DW     $+2
   1514.10 00194A                      ELSE
   1514.11 00194A ....         FLALIGNED: DW      DOCOLON
   1514.12 00194C                      ENDIF
   1514.13 00194C                      ENDM
   1515    00194C ....0002....*        DW lit,0200h,OVER,MINUS,lit,01FFh,ANDD,P
                                           LUS,EXIT
   1516    00195E              
   1517    00195E              ;X MARKER   --      create word to restore
                                dictionary
   1518    00195E              ;   LATEST @ IHERE HERE
   1519    00195E              ;   IHERE FLALIGNED IDP !     align new word to
                                flash boundary
   1520    00195E              ;   <BUILDS I, I, I,        save dp,idp,latest
   1521    00195E              ;   DOES>  DUP I@  
   1522    00195E              ;   SWAP CELL+ DUP I@
   1523    00195E              ;   SWAP CELL+ I@           fetch saved   -- dp
                                idp latest 
   1524    00195E              ;   OVER FLALIGNED IHERE OVER - FLERASE    erase
                                Flash from saved to IHERE
   1525    00195E              ;   LATEST ! IDP ! DP ! ;
   1526    00195E                  HEADER  MARKER,6,'MARKER',DOCOLON
   1526.1  000000                      PUBLIC  MARKER
   1526.2  00195E ....                 DW      link
   1526.3  001960 FF                   DB      0FFh       ; not immediate
   1526.4  001961              link    SET     $
   1526.5  001961 06                   DB      6
   1526.6  001962 4D41524B4552         DB      'MARKER'
   1526.7  001968                      EVEN
   1526.8  001968                      IF      'DOCOLON'='DOCODE'
   1526.9  001968              MARKER: DW     $+2
   1526.10 001968                      ELSE
   1526.11 001968 ....         MARKER: DW      DOCOLON
   1526.12 00196A                      ENDIF
   1526.13 00196A                      ENDM
   1527    00196A ............*        DW LATEST,FETCH,IHERE,HERE
   1528    001972 ............*        DW IHERE,FLALIGNED,IDP,STORE
   1529    00197A ............*        DW BUILDS,ICOMMA,ICOMMA,ICOMMA,XDOES
                                  - 4e-LP430 -                        Page  128

   1530    001984 3040....             MOV #dodoes,PC      ; long direct jump
                                                            to DODOES
   1531    001988 ........             DW DUP,IFETCH
   1532    00198C ............*        DW SWAP,CELLPLUS,DUP,IFETCH
   1533    001994 ............         DW SWAP,CELLPLUS,IFETCH
   1534    00199A ............*        DW OVER,FLALIGNED,IHERE,OVER,MINUS,FLERA
                                           SE
   1535    0019A6 ............*        DW LATEST,STORE,IDP,STORE,DDP,STORE,EXIT
   1536    0019B4              
   1537    0019B4              /***
   1538    0019B4              ;X WORDS    --          list all words in
                                dict.
   1539    0019B4              ;   LATEST @ BEGIN
   1540    0019B4              ;       DUP HCOUNT 7F AND HTYPE SPACE
   1541    0019B4              ;       NFA>LFA H@
   1542    0019B4              ;   DUP 0= UNTIL
   1543    0019B4              ;   DROP ;
   1544    0019B4                  HEADER  WORDS,5,'WORDS',DOCOLON
   1545    0019B4                      DW LATEST,FETCH
   1546    0019B4              WDS1:   DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE
   1547    0019B4                      DW NFATOLFA,HFETCH
   1548    0019B4                      DW DUP,ZEROEQUAL,qbran
   1549    0019B4                      DEST  WDS1
   1550    0019B4                      DW DROP,EXIT
   1551    0019B4              ***/        
   1552    0019B4                     
   1553    0019B4              ;X WORDS    --          list all words in dict.
                                Stop and go key version.
   1554    0019B4              ;   LATEST @ BEGIN
   1555    0019B4              ;       KEY? IF KEY DROP KEY 0x0D = IF DROP EXIT
                                THEN THEN  
   1556    0019B4              ;       DUP HCOUNT 7F AND HTYPE SPACE
   1557    0019B4              ;       NFA>LFA H@
   1558    0019B4              ;   DUP 0= UNTIL
   1559    0019B4              ;   DROP ;
   1560    0019B4                  HEADER  WORDS,5,'WORDS',DOCOLON
   1560.1  000000                      PUBLIC  WORDS
   1560.2  0019B4 ....                 DW      link
   1560.3  0019B6 FF                   DB      0FFh       ; not immediate
   1560.4  0019B7              link    SET     $
   1560.5  0019B7 05                   DB      5
   1560.6  0019B8 574F524453           DB      'WORDS'
   1560.7  0019BD 00                   EVEN
   1560.8  0019BE                      IF      'DOCOLON'='DOCODE'
   1560.9  0019BE              WORDS: DW     $+2
   1560.10 0019BE                      ELSE
   1560.11 0019BE ....         WORDS: DW      DOCOLON
   1560.12 0019C0                      ENDIF
   1560.13 0019C0                      ENDM
   1561    0019C0 ........             DW LATEST,FETCH
   1562    0019C4 ........     WDS1:   DW KEYQ,qbran
   1563    0019C8                      DEST WDS2
   1563.1  0019C8 1000                 DW      WDS2-$
   1563.2  0019CA                      ENDM
   1564    0019CA ........             DW KEY,DROP ; halt
   1565    0019CE ............*        DW KEY,BLANK,EQUAL,qbran ; go on if
                                                                 blank, else
                                                                 quit
                                                                 words
   1566    0019D6                      DEST WDS3
   1566.1  0019D6 1C00                 DW      WDS3-$
   1566.2  0019D8                      ENDM
   1567    0019D8 ............*WDS2:   DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE
   1568    0019E6 ........             DW NFATOLFA,HFETCH
   1569    0019EA ............         DW DUP,ZEROEQUAL,qbran
   1570    0019F0                      DEST  WDS1
   1570.1  0019F0 D4FF                 DW      WDS1-$
   1570.2  0019F2                      ENDM
   1571    0019F2 ........     WDS3:   DW DROP,EXIT
   1572    0019F6              
   1573    0019F6              ;X (U.R)    u n -- xxx          display u
                                unsigned in n width; primitiv
   1574    0019F6              ;   >R  <# 0 #S #>  R> OVER - 0 MAX  (jump)
                                ;
   1575    0019F6                  HEADLESS  PARENUDOTR,DOCOLON
   1575.1  000000                      PUBLIC  PARENUDOTR
   1575.2  0019F6                      IF      'DOCOLON'='DOCODE'
   1575.3  0019F6              PARENUDOTR: DW     $+2
                                  - 4e-LP430 -                        Page  129

   1575.4  0019F6                      ELSE
   1575.5  0019F6 ....         PARENUDOTR: DW      DOCOLON
   1575.6  0019F8                      ENDIF
   1575.7  0019F8                      ENDM
   1576    0019F8 ............*        DW TOR,LESSNUM,ZERO,NUMS,NUMGREATER
   1577    001A02 ............*        DW RFROM,OVER,MINUS,ZERO,MAX
   1578    001A0C ....                 DW EXIT
   1579    001A0E                      
   1580    001A0E              ;X U.R    u n --           display u unsigned in
                                n width
   1581    001A0E              ;   >R  <# 0 #S #>  R> OVER - 0 MAX SPACES  TYPE
                                ;
   1582    001A0E                  HEADER  UDOTR,3,'U.R',DOCOLON
   1582.1  000000                      PUBLIC  UDOTR
   1582.2  001A0E ....                 DW      link
   1582.3  001A10 FF                   DB      0FFh       ; not immediate
   1582.4  001A11              link    SET     $
   1582.5  001A11 03                   DB      3
   1582.6  001A12 552E52               DB      'U.R'
   1582.7  001A15 00                   EVEN
   1582.8  001A16                      IF      'DOCOLON'='DOCODE'
   1582.9  001A16              UDOTR: DW     $+2
   1582.10 001A16                      ELSE
   1582.11 001A16 ....         UDOTR: DW      DOCOLON
   1582.12 001A18                      ENDIF
   1582.13 001A18                      ENDM
   1583    001A18 ....                 DW PARENUDOTR
   1584    001A1A ............         DW SPACES,TYP,EXIT
   1585    001A20                      
   1586    001A20              ;X 0U.R    u n --           display u unsigned
                                in n width with leading zeros
   1587    001A20              ;   >R  <# 0 #S #>  R> OVER - 0 MAX SPACES  TYPE
                                ;
   1588    001A20                  HEADER  ZEROUDOTR,4,'0U.R',DOCOLON
   1588.1  000000                      PUBLIC  ZEROUDOTR
   1588.2  001A20 ....                 DW      link
   1588.3  001A22 FF                   DB      0FFh       ; not immediate
   1588.4  001A23              link    SET     $
   1588.5  001A23 04                   DB      4
   1588.6  001A24 30552E52             DB      '0U.R'
   1588.7  001A28                      EVEN
   1588.8  001A28                      IF      'DOCOLON'='DOCODE'
   1588.9  001A28              ZEROUDOTR: DW     $+2
   1588.10 001A28                      ELSE
   1588.11 001A28 ....         ZEROUDOTR: DW      DOCOLON
   1588.12 001A2A                      ENDIF
   1588.13 001A2A                      ENDM
   1589    001A2A ....                 DW PARENUDOTR
   1590    001A2C ............         DW ZEROS,TYP,EXIT
   1591    001A32              
   1592    001A32              ;X ZEROS   n --            output n zeros
   1593    001A32              ;   BEGIN DUP WHILE ZERO 1- REPEAT DROP
                                ;
   1594    001A32                  HEADER  ZEROS,5,'ZEROS',DOCOLON
   1594.1  000000                      PUBLIC  ZEROS
   1594.2  001A32 ....                 DW      link
   1594.3  001A34 FF                   DB      0FFh       ; not immediate
   1594.4  001A35              link    SET     $
   1594.5  001A35 05                   DB      5
   1594.6  001A36 5A45524F53           DB      'ZEROS'
   1594.7  001A3B 00                   EVEN
   1594.8  001A3C                      IF      'DOCOLON'='DOCODE'
   1594.9  001A3C              ZEROS: DW     $+2
   1594.10 001A3C                      ELSE
   1594.11 001A3C ....         ZEROS: DW      DOCOLON
   1594.12 001A3E                      ENDIF
   1594.13 001A3E                      ENDM
   1595    001A3E ........     ZEROS1:  DW DUP,qbran
   1596    001A42                      DEST  ZEROS2
   1596.1  001A42 0E00                 DW      ZEROS2-$
   1596.2  001A44                      ENDM
   1597    001A44 ....3000....*        DW lit,'0',EMIT,ONEMINUS,bran
   1598    001A4E                      DEST  ZEROS1
   1598.1  001A4E F0FF                 DW      ZEROS1-$
   1598.2  001A50                      ENDM
   1599    001A50 ........     ZEROS2:  DW DROP,EXIT
   1600    001A54              
   1601    001A54              
                                  - 4e-LP430 -                        Page  130

   1602    001A54              
   1603    001A54              ;X DUMP  adr n --         dump memory
   1604    001A54              ;  OVER + SWAP DO
   1605    001A54              ;    CR I 4 U.R SPACE SPACE
   1606    001A54              ;    I $10 + I DO I C@ 3 U.R LOOP  SPACE
                                SPACE
   1607    001A54              ;    I $10 + I DO I C@ $7F AND $7E MIN BL MAX
                                EMIT LOOP
   1608    001A54              ;  10 +LOOP ;
   1609    001A54                  HEADER  DUMP,4,'DUMP',DOCOLON
   1609.1  000000                      PUBLIC  DUMP
   1609.2  001A54 ....                 DW      link
   1609.3  001A56 FF                   DB      0FFh       ; not immediate
   1609.4  001A57              link    SET     $
   1609.5  001A57 04                   DB      4
   1609.6  001A58 44554D50             DB      'DUMP'
   1609.7  001A5C                      EVEN
   1609.8  001A5C                      IF      'DOCOLON'='DOCODE'
   1609.9  001A5C              DUMP: DW     $+2
   1609.10 001A5C                      ELSE
   1609.11 001A5C ....         DUMP: DW      DOCOLON
   1609.12 001A5E                      ENDIF
   1609.13 001A5E                      ENDM
   1610    001A5E ............*        DW OVER,PLUS,SWAP,xdo
   1611    001A66 ............*LDUMP1: DW CR,II,lit,4,UDOTR,SPACE,SPACE
   1612    001A74 ........1000*        DW II,lit,10h,PLUS,II,xdo
   1613    001A80 ............*LDUMP2: DW II,CFETCH,lit,3,UDOTR,xloop
   1614    001A8C                      DEST  LDUMP2
   1614.1  001A8C F4FF                 DW      LDUMP2-$
   1614.2  001A8E                      ENDM
   1615    001A8E ........             DW SPACE,SPACE
   1616    001A92 ........1000*        DW II,lit,10h,PLUS,II,xdo
   1617    001A9E ............*LDUMP3: DW II,CFETCH,lit,7Fh,ANDD,lit,7Eh,MIN,BL
                                           ANK,MAX,EMIT,xloop
   1618    001AB6                      DEST  LDUMP3
   1618.1  001AB6 E8FF                 DW      LDUMP3-$
   1618.2  001AB8                      ENDM
   1619    001AB8 ....1000....         DW lit,10h,xplusloop
   1620    001ABE                      DEST  LDUMP1
   1620.1  001ABE A8FF                 DW      LDUMP1-$
   1620.2  001AC0                      ENDM
   1621    001AC0 ....                 DW EXIT
   1622    001AC2              
   1623    001AC2              ;X .S      --           print stack contents
   1624    001AC2              ;   [char] < EMIT   DEPTH . BS [char] > EMIT 
                                
   1625    001AC2              ;   SP@ S0 < IF
   1626    001AC2              ;       SP@ S0 2 - DO I @ U. -2 +LOOP
   1627    001AC2              ;   THEN ;
   1628    001AC2                  HEADER  DOTS,2,'.S',DOCOLON
   1628.1  000000                      PUBLIC  DOTS
   1628.2  001AC2 ....                 DW      link
   1628.3  001AC4 FF                   DB      0FFh       ; not immediate
   1628.4  001AC5              link    SET     $
   1628.5  001AC5 02                   DB      2
   1628.6  001AC6 2E53                 DB      '.S'
   1628.7  001AC8                      EVEN
   1628.8  001AC8                      IF      'DOCOLON'='DOCODE'
   1628.9  001AC8              DOTS: DW     $+2
   1628.10 001AC8                      ELSE
   1628.11 001AC8 ....         DOTS: DW      DOCOLON
   1628.12 001ACA                      ENDIF
   1628.13 001ACA                      ENDM
   1629    001ACA                      ;mk gforth style 
   1630    001ACA ....3C00....         DW lit,$3C,EMIT
   1631    001AD0 ........             DW DEPTH,DOT
   1632    001AD4 ....0800....*        DW lit,$08,EMIT,lit,$3E,EMIT,SPACE
                                            
   1633    001AE2                      ;/mk
   1634    001AE2 ............*        DW SPFETCH,S0,LESS,qbran
   1635    001AEA                      DEST  DOTS2
   1635.1  001AEA 1C00                 DW      DOTS2-$
   1635.2  001AEC                      ENDM
   1636    001AEC ............*        DW SPFETCH,S0,lit,2,MINUS
   1637    001AF6              ;        DW TWODUP,TOR,TOR,
   1638    001AF6 ....                 DW xdo
   1639    001AF8 ............*DOTS1:  DW II,FETCH,UDOT,lit,-2,xplusloop
   1640    001B04                      DEST  DOTS1
                                  - 4e-LP430 -                        Page  131

   1640.1  001B04 F4FF                 DW      DOTS1-$
   1640.2  001B06                      ENDM
   1641    001B06              ;        DW lit,'|',EMIT,RFROM,RFROM
   1642    001B06              ;        DW xdo
   1643    001B06              ;DOTS11: DW II,FETCH,UDOT,lit,-2,xplusloop
   1644    001B06              ;        DEST  DOTS11
   1645    001B06 ....         DOTS2:  DW EXIT
   1646    001B08              
   1647    001B08              
   1648    001B08              ;U ccrc      n c -- n'     crc process
                                byte
   1649    001B08              ;   8 LSHIFT XOR
   1650    001B08              ;   8 0 DO ( n' )
   1651    001B08              ;     DUP 1 LSHIFT  SWAP 8000 AND 0= INVERT 1021
                                ( CRC-16 )  AND  XOR 
   1652    001B08              ;   LOOP 
   1653    001B08              ;   FFFF AND ;
   1654    001B08              ;   HEADER  CCRC,4,'ccrc',DOCODE
   1655    001B08                  HEADLESS CCRC,DOCODE
   1655.1  000000                      PUBLIC  CCRC
   1655.2  001B08                      IF      'DOCODE'='DOCODE'
   1655.3  001B08 ....         CCRC: DW     $+2
   1655.4  001B0A                      ELSE
   1655.5  001B0A              CCRC: DW      DOCODE
   1655.6  001B0A                      ENDIF
   1655.7  001B0A                      ENDM
   1656    001B0A 37F0FF00               AND #00FFh,TOS
   1657    001B0E 8710                   SWPB TOS
   1658    001B10 37E4                   XOR @PSP+,TOS
   1659    001B12 3642                   MOV #8,W
   1660    001B14 0757            ccrc1: RLA TOS
   1661    001B16 0228                   JNC ccrc2
   1662    001B18 37E02110               XOR #01021h,TOS
   1663    001B1C 1683            ccrc2: DEC W
   1664    001B1E FA23                   JNZ ccrc1
   1665    001B20                        NEXT
   1665.1  001B20 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
   1665.2  001B22 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
   1665.3  001B24                      ENDM
   1666    001B24              
   1667    001B24              ;U crc     n addr len -- n'     crc process
                                string
   1668    001B24              ;   dup IF over + swap DO  ( n ) I C@ ccrc LOOP
                                ELSE 2drop THEN ;
   1669    001B24                  HEADER  CRC,3,'CRC',DOCOLON
   1669.1  000000                      PUBLIC  CRC
   1669.2  001B24 ....                 DW      link
   1669.3  001B26 FF                   DB      0FFh       ; not immediate
   1669.4  001B27              link    SET     $
   1669.5  001B27 03                   DB      3
   1669.6  001B28 435243               DB      'CRC'
   1669.7  001B2B 00                   EVEN
   1669.8  001B2C                      IF      'DOCOLON'='DOCODE'
   1669.9  001B2C              CRC: DW     $+2
   1669.10 001B2C                      ELSE
   1669.11 001B2C ....         CRC: DW      DOCOLON
   1669.12 001B2E                      ENDIF
   1669.13 001B2E                      ENDM
   1670    001B2E ........               DW DUP,qbran
   1671    001B32                        DEST pcrc2
   1671.1  001B32 1800                 DW      pcrc2-$
   1671.2  001B34                      ENDM
   1672    001B34 ............*          DW OVER,PLUS,SWAP,xdo
   1673    001B3C ............*pcrc1:    DW II,CFETCH,CCRC, xloop
   1674    001B44                        DEST pcrc1
   1674.1  001B44 F8FF                 DW      pcrc1-$
   1674.2  001B46                      ENDM
   1675    001B46 ....                   DW bran
   1676    001B48                        DEST pcrc3
   1676.1  001B48 0400                 DW      pcrc3-$
   1676.2  001B4A                      ENDM
   1677    001B4A ....         pcrc2:    DW TWODROP
   1678    001B4C ....         pcrc3:    DW EXIT
   1679    001B4E              
   1680    001B4E              
   1681    001B4E              
                                  - 4e-LP430 -                        Page  132

   1682    001B4E              ;U MISC ========================================
                               ================================
   1683    001B4E              
   1684    001B4E              ;C 2CONSTANT    <name>  w1 w2 --    define a
                                Forth double constant
   1685    001B4E              ;   <BUILDS  I, I,           Flashable Harvard
                                model
   1686    001B4E              ;   DOES> (machine code fragment)
   1687    001B4E              ; Note that the constant is stored in Code
                                space.
   1688    001B4E                      HEADER TWOCONSTANT,9,'2CONSTANT',DOCOLON
   1688.1  000000                      PUBLIC  TWOCONSTANT
   1688.2  001B4E ....                 DW      link
   1688.3  001B50 FF                   DB      0FFh       ; not immediate
   1688.4  001B51              link    SET     $
   1688.5  001B51 09                   DB      9
   1688.6  001B52 32434F4E5354*        DB      '2CONSTANT'
   1688.7  001B5B 00                   EVEN
   1688.8  001B5C                      IF      'DOCOLON'='DOCODE'
   1688.9  001B5C              TWOCONSTANT: DW     $+2
   1688.10 001B5C                      ELSE
   1688.11 001B5C ....         TWOCONSTANT: DW      DOCOLON
   1688.12 001B5E                      ENDIF
   1688.13 001B5E                      ENDM
   1689    001B5E ............*        DW BUILDS,ICOMMA,ICOMMA,XDOES
   1690    000000                      PUBLIC DOTWOCON
   1691    001B66              DOTWOCON:  ; ( -- w1 w2 )
   1692    001B66 2482               SUB #4,PSP       ; make room on stack
   1693    001B68 84470200           MOV TOS,2(PSP)
   1694    001B6C 3746               MOV @W+,TOS      ; fetch from parameter
                                                       field to TOS
   1695    001B6E A4460000           MOV @W,0(PSP)    ; fetch secon word from
                                                       parameter field to
                                                       NOS
   1696    001B72                    NEXT
   1696.1  001B72 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
   1696.2  001B74 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
   1696.3  001B76                      ENDM
   1697    001B76              
   1698    001B76              ;U \         --      backslash 
   1699    001B76              ; everything up to the end of the current line
                                is a comment. 
   1700    001B76              ;   SOURCE >IN ! DROP ; 
   1701    001B76                  IMMED BACKSLASH,1,'\\',DOCOLON
   1701.1  000000                      PUBLIC  BACKSLASH
   1701.2  001B76 ....                 DW      link
   1701.3  001B78 FE                   DB      0FEh      // ; immediate
                                                                   (LSB=0)
   1701.4  001B79              link    SET     $
   1701.5  001B79 01                   DB      1
   1701.6  001B7A 5C                   DB      '\\'
   1701.7  001B7B 00                   EVEN
   1701.8  001B7C                      IF      'DOCOLON'='DOCODE'
   1701.9  001B7C              BACKSLASH: DW     $+2
   1701.10 001B7C                      ELSE
   1701.11 001B7C ....         BACKSLASH: DW      DOCOLON
   1701.12 001B7E                      ENDIF
   1701.13 001B7E                      ENDM
   1702    001B7E ............*        DW SOURCE,TOIN,STORE,DROP,EXIT
                                            
   1703    001B88              
   1704    001B88              ;Z .VER     --     type message   
   1705    001B88                      HEADER  DOTVER,4,'.VER',DOCOLON     
                                
   1705.1  000000                      PUBLIC  DOTVER
   1705.2  001B88 ....                 DW      link
   1705.3  001B8A FF                   DB      0FFh       ; not immediate
   1705.4  001B8B              link    SET     $
   1705.5  001B8B 04                   DB      4
   1705.6  001B8C 2E564552             DB      '.VER'
   1705.7  001B90                      EVEN
   1705.8  001B90                      IF      'DOCOLON'='DOCODE'
   1705.9  001B90              DOTVER: DW     $+2
   1705.10 001B90                      ELSE
   1705.11 001B90 ....         DOTVER: DW      DOCOLON
   1705.12 001B92                      ENDIF
                                  - 4e-LP430 -                        Page  133

   1705.13 001B92                      ENDM
   1706    001B92 ............*        DW lit,version,COUNT,ITYPE ; # of
                                                                   version
                                                                   
   1707    001B9A ............*        DW lit,stamp,COUNT,ONEMINUS,ITYPE ; time
                                            stamp of version
   1708    001BA4 ....                 DW DOTBOOTVERSION
   1709    001BA6 ....                 DW SPACE
   1710    001BA8 ............         DW BASE,FETCH,BIN
   1711    001BAE ............*        DW COR,FETCH,lit,16,ZEROUDOTR ; flags
                                            indicating reset procedure.
                                            
   1712    001BB8 ........             DW BASE,STORE
   1713    001BBC ....                 DW EXIT 
   1714    001BBE              
   1715    001BBE              ;U BELL     --                send $07 to
                                Terminal
   1716    001BBE                   HEADER BELL,4,'BELL',DOCOLON
   1716.1  000000                      PUBLIC  BELL
   1716.2  001BBE ....                 DW      link
   1716.3  001BC0 FF                   DB      0FFh       ; not immediate
   1716.4  001BC1              link    SET     $
   1716.5  001BC1 04                   DB      4
   1716.6  001BC2 42454C4C             DB      'BELL'
   1716.7  001BC6                      EVEN
   1716.8  001BC6                      IF      'DOCOLON'='DOCODE'
   1716.9  001BC6              BELL: DW     $+2
   1716.10 001BC6                      ELSE
   1716.11 001BC6 ....         BELL: DW      DOCOLON
   1716.12 001BC8                      ENDIF
   1716.13 001BC8                      ENDM
   1717    001BC8 ....0700....*         DW lit,7,EMIT,EXIT
   1718    001BD0              
   1719    001BD0              ;U ESC[     --                start esc-sequence
   1720    001BD0              ; 27 emit 91 emit ;
   1721    001BD0                   HEADERLESS  ESCPAR,4,'ESC[',DOCOLON
   1721.1  000000                      PUBLIC  ESCPAR
   1721.2  001BD0                      IF      'DOCOLON'='DOCODE'
   1721.3  001BD0              ESCPAR: DW     $+2
   1721.4  001BD0                      ELSE
   1721.5  001BD0 ....         ESCPAR: DW      DOCOLON
   1721.6  001BD2                      ENDIF
   1721.7  001BD2                      ENDM
   1722    001BD2 ....1B00....*         DW lit,27,EMIT, lit,91,EMIT
   1723    001BDE ....                  DW EXIT
   1724    001BE0              
   1725    001BE0              ;U PN      --                 send parameter of
                                esc-sequence
   1726    001BE0              ; base @  swap decimal 0 u.r  base ! ;
                                
   1727    001BE0                   HEADERLESS  PN,2,'PN',DOCOLON
   1727.1  000000                      PUBLIC  PN
   1727.2  001BE0                      IF      'DOCOLON'='DOCODE'
   1727.3  001BE0              PN: DW     $+2
   1727.4  001BE0                      ELSE
   1727.5  001BE0 ....         PN: DW      DOCOLON
   1727.6  001BE2                      ENDIF
   1727.7  001BE2                      ENDM
   1728    001BE2 ........              DW BASE,FETCH
   1729    001BE6 ............*         DW SWAP,DECIMAL,ZERO,UDOTR
   1730    001BEE ........              DW BASE,STORE
   1731    001BF2 ....                  DW EXIT
   1732    001BF4              
   1733    001BF4              ;U ;PN    --                  send delimiter ;
                                followed by parameter
   1734    001BF4              ; 59 emit pn ;
   1735    001BF4                   HEADERLESS SEMIPN,3,';PN',DOCOLON
   1735.1  000000                      PUBLIC  SEMIPN
   1735.2  001BF4                      IF      'DOCOLON'='DOCODE'
   1735.3  001BF4              SEMIPN: DW     $+2
   1735.4  001BF4                      ELSE
   1735.5  001BF4 ....         SEMIPN: DW      DOCOLON
   1735.6  001BF6                      ENDIF
   1735.7  001BF6                      ENDM
   1736    001BF6 ....3B00....*         DW lit,59,EMIT,PN
   1737    001BFE ....                  DW EXIT
   1738    001C00              
   1739    001C00              ;U AT-XY   x y --          send esc-sequence to
                                  - 4e-LP430 -                        Page  134

                                terminal
   1740    001C00              ; 1+ swap 1+ swap ESC[ pn ;pn 72 emit ;
                                
   1741    001C00                   HEADER ATXY,5,'AT-XY',DOCOLON
   1741.1  000000                      PUBLIC  ATXY
   1741.2  001C00 ....                 DW      link
   1741.3  001C02 FF                   DB      0FFh       ; not immediate
   1741.4  001C03              link    SET     $
   1741.5  001C03 05                   DB      5
   1741.6  001C04 41542D5859           DB      'AT-XY'
   1741.7  001C09 00                   EVEN
   1741.8  001C0A                      IF      'DOCOLON'='DOCODE'
   1741.9  001C0A              ATXY: DW     $+2
   1741.10 001C0A                      ELSE
   1741.11 001C0A ....         ATXY: DW      DOCOLON
   1741.12 001C0C                      ENDIF
   1741.13 001C0C                      ENDM
   1742    001C0C ............*         DW ONEPLUS,SWAP,ONEPLUS,SWAP
   1743    001C14 ........              DW ESCPAR,PN
   1744    001C18 ........4800*         DW SEMIPN, lit,72,EMIT
   1745    001C20 ....                  DW EXIT
   1746    001C22              
   1747    001C22              ;U PAGE    --              send "page" command
                                to terminal to clear screen.
   1748    001C22              ; esc[  ." 2J" 0 0 at-xy ;
   1749    001C22                   HEADER PAGEE,4,'PAGE',DOCOLON
   1749.1  000000                      PUBLIC  PAGEE
   1749.2  001C22 ....                 DW      link
   1749.3  001C24 FF                   DB      0FFh       ; not immediate
   1749.4  001C25              link    SET     $
   1749.5  001C25 04                   DB      4
   1749.6  001C26 50414745             DB      'PAGE'
   1749.7  001C2A                      EVEN
   1749.8  001C2A                      IF      'DOCOLON'='DOCODE'
   1749.9  001C2A              PAGEE: DW     $+2
   1749.10 001C2A                      ELSE
   1749.11 001C2A ....         PAGEE: DW      DOCOLON
   1749.12 001C2C                      ENDIF
   1749.13 001C2C                      ENDM
   1750    001C2C ....                 DW ESCPAR
   1751    001C2E ....                 DW XISQUOTE
   1752    001C30 03                   DB (ESC1-ESC0)
   1753    001C31 324A         ESC0:   DB '2J'
   1754    001C33 00                   EVEN
   1755    001C34 ....         ESC1:   DW ITYPE
   1756    001C36 ............         DW ZERO,ZERO,ATXY
   1757    001C3C ....                 DW EXIT
   1758    001C3E              
   1759    001C3E              ;U BIN   --                set number base to
                                binary
   1760    001C3E                   HEADER BIN,3,'BIN',DOCOLON
   1760.1  000000                      PUBLIC  BIN
   1760.2  001C3E ....                 DW      link
   1760.3  001C40 FF                   DB      0FFh       ; not immediate
   1760.4  001C41              link    SET     $
   1760.5  001C41 03                   DB      3
   1760.6  001C42 42494E               DB      'BIN'
   1760.7  001C45 00                   EVEN
   1760.8  001C46                      IF      'DOCOLON'='DOCODE'
   1760.9  001C46              BIN: DW     $+2
   1760.10 001C46                      ELSE
   1760.11 001C46 ....         BIN: DW      DOCOLON
   1760.12 001C48                      ENDIF
   1760.13 001C48                      ENDM
   1761    001C48 ....0200....*         DW lit,2,BASE,STORE,EXIT
   1762    001C52                       
   1763    001C52              ; ommitted, MSP430G2553 RAM is too smal.
   1764    001C52              ;U RAM   --                compile into RAM.
                                SAVE your system befor using RAM.
   1765    001C52              ; here  unused 10 - allot  idp ! ; Use COLD to
                                swich back to flash.
   1766    001C52              ;     HEADER RAM,3,'RAM',DOCOLON
   1767    001C52              ;         DW HERE,UNUSED,lit,0x10,MINUS,ALLOT,ID
                               P,STORE,EXIT
   1768    001C52              
   1769    001C52              ;U TRUE   -- f            true flag
   1770    001C52                  HEADER  TRUE,4,'TRUE',DOCON
   1770.1  000000                      PUBLIC  TRUE
                                  - 4e-LP430 -                        Page  135

   1770.2  001C52 ....                 DW      link
   1770.3  001C54 FF                   DB      0FFh       ; not immediate
   1770.4  001C55              link    SET     $
   1770.5  001C55 04                   DB      4
   1770.6  001C56 54525545             DB      'TRUE'
   1770.7  001C5A                      EVEN
   1770.8  001C5A                      IF      'DOCON'='DOCODE'
   1770.9  001C5A              TRUE: DW     $+2
   1770.10 001C5A                      ELSE
   1770.11 001C5A ....         TRUE: DW      DOCON
   1770.12 001C5C                      ENDIF
   1770.13 001C5C                      ENDM
   1771    001C5C FFFF                 DW 0xFFFF
   1772    001C5E              
   1773    001C5E              ;U FALSE   -- f            false flag
   1774    001C5E                  HEADER  FALSE,5,'FALSE',DOCON
   1774.1  000000                      PUBLIC  FALSE
   1774.2  001C5E ....                 DW      link
   1774.3  001C60 FF                   DB      0FFh       ; not immediate
   1774.4  001C61              link    SET     $
   1774.5  001C61 05                   DB      5
   1774.6  001C62 46414C5345           DB      'FALSE'
   1774.7  001C67 00                   EVEN
   1774.8  001C68                      IF      'DOCON'='DOCODE'
   1774.9  001C68              FALSE: DW     $+2
   1774.10 001C68                      ELSE
   1774.11 001C68 ....         FALSE: DW      DOCON
   1774.12 001C6A                      ENDIF
   1774.13 001C6A                      ENDM
   1775    001C6A 0000                 DW 0x0
   1776    001C6C                      
   1777    001C6C              ;C TABLE   --      create an empty definition
                                pointing to FLASH
   1778    001C6C              ;   HEADER
   1779    001C6C              ;   docreate ,CF              code field
   1780    001C6C              ;   IHERE I, ;           store data adr
                                (Harvard)
   1781    001C6C              ; Harvard model, separate Code and Data
                                spaces.
   1782    001C6C              ; Separate headers model.
   1783    001C6C              ; or do this (4e4th):
   1784    001C6C              ;  : TABLE  <builds ihere cell + i, does> @
                                ;
   1785    001C6C                 HEADER  TABLE,5,'TABLE',DOCOLON
   1785.1  000000                      PUBLIC  TABLE
   1785.2  001C6C ....                 DW      link
   1785.3  001C6E FF                   DB      0FFh       ; not immediate
   1785.4  001C6F              link    SET     $
   1785.5  001C6F 05                   DB      5
   1785.6  001C70 5441424C45           DB      'TABLE'
   1785.7  001C75 00                   EVEN
   1785.8  001C76                      IF      'DOCOLON'='DOCODE'
   1785.9  001C76              TABLE: DW     $+2
   1785.10 001C76                      ELSE
   1785.11 001C76 ....         TABLE: DW      DOCOLON
   1785.12 001C78                      ENDIF
   1785.13 001C78                      ENDM
   1786    001C78 ....                 DW HEADR
   1787    001C7A ............         DW lit,docreate,COMMACF
   1788    001C80 ............*        DW IHERE,CELL,PLUS,ICOMMA,EXIT
   1789    001C8A              
   1790    001C8A              
   1791    001C8A              
   1792    001C8A              ;U MCU specific words ==========================
                               ================================
   1793    001C8A              
   1794    001C8A              /*
   1795    001C8A              ; .ID    -- <string>   Print MCU identifier.
   1796    001C8A                      HEADER  DOTID,3,'.ID',DOCOLON     
                                
   1797    001C8A                      DW lit,id,COUNT,ITYPE 
   1798    001C8A                      DW EXIT  
   1799    001C8A              */
   1800    001C8A              
   1801    001C8A              ;U 1MS  --   wait about 1 millisecond
   1802    001C8A              ;  xx 0 DO yy 0 DO LOOP LOOP ;  adjust xx and yy
                                to get a msec.
   1803    001C8A                   HEADER ONEMS,3,'1MS',DOCOLON
                                  - 4e-LP430 -                        Page  136

   1803.1  000000                      PUBLIC  ONEMS
   1803.2  001C8A ....                 DW      link
   1803.3  001C8C FF                   DB      0FFh       ; not immediate
   1803.4  001C8D              link    SET     $
   1803.5  001C8D 03                   DB      3
   1803.6  001C8E 314D53               DB      '1MS'
   1803.7  001C91 00                   EVEN
   1803.8  001C92                      IF      'DOCOLON'='DOCODE'
   1803.9  001C92              ONEMS: DW     $+2
   1803.10 001C92                      ELSE
   1803.11 001C92 ....         ONEMS: DW      DOCOLON
   1803.12 001C94                      ENDIF
   1803.13 001C94                      ENDM
   1804    001C94 ....2900....*         DW lit,41,ZERO,xdo 
   1805    001C9C ....0B00....*onems1:  DW lit,11,ZERO,xdo
   1806    001CA4 ....         onems2:  DW xloop
   1807    001CA6                       DEST onems2
   1807.1  001CA6 FEFF                 DW      onems2-$
   1807.2  001CA8                      ENDM
   1808    001CA8 ....                  DW xloop
   1809    001CAA                       DEST onems1
   1809.1  001CAA F2FF                 DW      onems1-$
   1809.2  001CAC                      ENDM
   1810    001CAC ....                  DW EXIT
   1811    001CAE              
   1812    001CAE              ;U MS  n --                wait about n
                                milliseconds
   1813    001CAE              ;  0 DO 1MS LOOP ;
   1814    001CAE                   HEADER MS,2,'MS',DOCOLON
   1814.1  000000                      PUBLIC  MS
   1814.2  001CAE ....                 DW      link
   1814.3  001CB0 FF                   DB      0FFh       ; not immediate
   1814.4  001CB1              link    SET     $
   1814.5  001CB1 02                   DB      2
   1814.6  001CB2 4D53                 DB      'MS'
   1814.7  001CB4                      EVEN
   1814.8  001CB4                      IF      'DOCOLON'='DOCODE'
   1814.9  001CB4              MS: DW     $+2
   1814.10 001CB4                      ELSE
   1814.11 001CB4 ....         MS: DW      DOCOLON
   1814.12 001CB6                      ENDIF
   1814.13 001CB6                      ENDM
   1815    001CB6 ........              DW ZERO,xdo
   1816    001CBA ........     ms1:     DW ONEMS,xloop
   1817    001CBE                       DEST ms1
   1817.1  001CBE FCFF                 DW      ms1-$
   1817.2  001CC0                      ENDM
   1818    001CC0 ....                  DW EXIT
   1819    001CC2              
   1820    001CC2              
   1821    001CC2              ;U Bit manipulation words ----------------------
                               --------------------------------
   1822    001CC2              ;  based on http://www.forth.org/svfig/Len/bits.
                               htm
   1823    001CC2              
   1824    001CC2              ;U SET    mask addr --      set bit from mask in
                                addr (cell); use even adr!
   1825    001CC2                  HEADER  wset,3,'SET',DOCODE
   1825.1  000000                      PUBLIC  wset
   1825.2  001CC2 ....                 DW      link
   1825.3  001CC4 FF                   DB      0FFh       ; not immediate
   1825.4  001CC5              link    SET     $
   1825.5  001CC5 03                   DB      3
   1825.6  001CC6 534554               DB      'SET'
   1825.7  001CC9 00                   EVEN
   1825.8  001CCA                      IF      'DOCODE'='DOCODE'
   1825.9  001CCA ....         wset: DW     $+2
   1825.10 001CCC                      ELSE
   1825.11 001CCC              wset: DW      DOCODE
   1825.12 001CCC                      ENDIF
   1825.13 001CCC                      ENDM
   1826    001CCC A7D40000           BIS     @PSP,0(TOS)
   1827    001CD0 2453               ADD     #2,PSP
   1828    001CD2 3744               MOV     @PSP+,TOS
   1829    001CD4                    NEXT
   1829.1  001CD4 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
   1829.2  001CD6 3046                 MOV @W+,PC     // ; fetch code address
                                  - 4e-LP430 -                        Page  137

                                                          into PC, W=PFA
   1829.3  001CD8                      ENDM
   1830    001CD8              
   1831    001CD8              ;U CSET    mask addr --      set bit from mask
                                in addr (byte)
   1832    001CD8                  HEADER  cset,4,'CSET',DOCODE
   1832.1  000000                      PUBLIC  cset
   1832.2  001CD8 ....                 DW      link
   1832.3  001CDA FF                   DB      0FFh       ; not immediate
   1832.4  001CDB              link    SET     $
   1832.5  001CDB 04                   DB      4
   1832.6  001CDC 43534554             DB      'CSET'
   1832.7  001CE0                      EVEN
   1832.8  001CE0                      IF      'DOCODE'='DOCODE'
   1832.9  001CE0 ....         cset: DW     $+2
   1832.10 001CE2                      ELSE
   1832.11 001CE2              cset: DW      DOCODE
   1832.12 001CE2                      ENDIF
   1832.13 001CE2                      ENDM
   1833    001CE2 E7D40000           BIS.B   @PSP,0(TOS)
   1834    001CE6 2453               ADD     #2,PSP
   1835    001CE8 3744               MOV     @PSP+,TOS
   1836    001CEA                    NEXT
   1836.1  001CEA 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
   1836.2  001CEC 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
   1836.3  001CEE                      ENDM
   1837    001CEE              
   1838    001CEE              ;U CLR  mask addr --      reset bit from mask in
                                addr (cell); use even adr!
   1839    001CEE                  HEADER  wclr,3,'CLR',DOCODE
   1839.1  000000                      PUBLIC  wclr
   1839.2  001CEE ....                 DW      link
   1839.3  001CF0 FF                   DB      0FFh       ; not immediate
   1839.4  001CF1              link    SET     $
   1839.5  001CF1 03                   DB      3
   1839.6  001CF2 434C52               DB      'CLR'
   1839.7  001CF5 00                   EVEN
   1839.8  001CF6                      IF      'DOCODE'='DOCODE'
   1839.9  001CF6 ....         wclr: DW     $+2
   1839.10 001CF8                      ELSE
   1839.11 001CF8              wclr: DW      DOCODE
   1839.12 001CF8                      ENDIF
   1839.13 001CF8                      ENDM
   1840    001CF8 A7C40000           BIC     @PSP,0(TOS)
   1841    001CFC 2453               ADD     #2,PSP
   1842    001CFE 3744               MOV     @PSP+,TOS
   1843    001D00                    NEXT
   1843.1  001D00 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
   1843.2  001D02 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
   1843.3  001D04                      ENDM
   1844    001D04              
   1845    001D04              ;U CCLR  mask addr --      reset bit from mask
                                in addr (byte)
   1846    001D04                  HEADER  cclr,4,'CCLR',DOCODE
   1846.1  000000                      PUBLIC  cclr
   1846.2  001D04 ....                 DW      link
   1846.3  001D06 FF                   DB      0FFh       ; not immediate
   1846.4  001D07              link    SET     $
   1846.5  001D07 04                   DB      4
   1846.6  001D08 43434C52             DB      'CCLR'
   1846.7  001D0C                      EVEN
   1846.8  001D0C                      IF      'DOCODE'='DOCODE'
   1846.9  001D0C ....         cclr: DW     $+2
   1846.10 001D0E                      ELSE
   1846.11 001D0E              cclr: DW      DOCODE
   1846.12 001D0E                      ENDIF
   1846.13 001D0E                      ENDM
   1847    001D0E E7C40000           BIC.B   @PSP,0(TOS)
   1848    001D12 2453               ADD     #2,PSP
   1849    001D14 3744               MOV     @PSP+,TOS
   1850    001D16                    NEXT
   1850.1  001D16 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
   1850.2  001D18 3046                 MOV @W+,PC     // ; fetch code address
                                  - 4e-LP430 -                        Page  138

                                                          into PC, W=PFA
   1850.3  001D1A                      ENDM
   1851    001D1A              
   1852    001D1A              ;U CTOGGLE    mask addr --        flip bit from
                                mask in addr (byte)
   1853    001D1A                  HEADER  ctoggle,7,'CTOGGLE',DOCODE
   1853.1  000000                      PUBLIC  ctoggle
   1853.2  001D1A ....                 DW      link
   1853.3  001D1C FF                   DB      0FFh       ; not immediate
   1853.4  001D1D              link    SET     $
   1853.5  001D1D 07                   DB      7
   1853.6  001D1E 43544F47474C*        DB      'CTOGGLE'
   1853.7  001D25 00                   EVEN
   1853.8  001D26                      IF      'DOCODE'='DOCODE'
   1853.9  001D26 ....         ctoggle: DW     $+2
   1853.10 001D28                      ELSE
   1853.11 001D28              ctoggle: DW      DOCODE
   1853.12 001D28                      ENDIF
   1853.13 001D28                      ENDM
   1854    001D28 E7E40000           XOR.B   @PSP,0(TOS)
   1855    001D2C 2453               ADD     #2,PSP
   1856    001D2E 3744               MOV     @PSP+,TOS
   1857    001D30                    NEXT
   1857.1  001D30 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
   1857.2  001D32 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
   1857.3  001D34                      ENDM
   1858    001D34              
   1859    001D34              ;U CGET       mask addr -- flag    test bit from
                                mask in addr (byte)
   1860    001D34                  HEADER  cget,4,'CGET',DOCODE
   1860.1  000000                      PUBLIC  cget
   1860.2  001D34 ....                 DW      link
   1860.3  001D36 FF                   DB      0FFh       ; not immediate
   1860.4  001D37              link    SET     $
   1860.5  001D37 04                   DB      4
   1860.6  001D38 43474554             DB      'CGET'
   1860.7  001D3C                      EVEN
   1860.8  001D3C                      IF      'DOCODE'='DOCODE'
   1860.9  001D3C ....         cget: DW     $+2
   1860.10 001D3E                      ELSE
   1860.11 001D3E              cget: DW      DOCODE
   1860.12 001D3E                      ENDIF
   1860.13 001D3E                      ENDM
   1861    001D3E E7B40000           BIT.B   @PSP,0(TOS)
   1862    001D42 0224               JZ cget1
   1863    001D44 3743               MOV #-1,TOS
   1864    001D46 013C               JMP cget2
   1865    001D48 0743         cget1:MOV #0, TOS
   1866    001D4A 2453         cget2:ADD     #2,PSP
   1867    001D4C                    NEXT
   1867.1  001D4C 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
   1867.2  001D4E 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
   1867.3  001D50                      ENDM
   1868    001D50              
   1869    001D50              
   1870    001D50              ;U Memory info ---------------------------------
                               --------------------------------
   1871    001D50              
   1872    001D50              /* see also: XLINK configuration file for
                                MSP430G2553 
   1873    001D50              ram   =: 0200-03FF
   1874    001D50                  0200-03C9    forth system; userarea, stacks,
                                tib, pad ...
   1875    001D50                  03CA-03FF    VARAREA for forth variables;
                                check UNUSED ram.
   1876    001D50              
   1877    001D50              flash =: C000-FFFF
   1878    001D50                  C000-D7FF   MEMBOT to MEMTOP is user flash.
                                Check unsused MEM.  
   1879    001D50                  D800-FDFF   kernel
   1880    001D50                  FE00-FFFF   INTSEG
   1881    001D50                  FFE0-FFFF   INTVEC
   1882    001D50                  FFFE-FFFF   RESET
   1883    001D50              */
                                  - 4e-LP430 -                        Page  139

   1884    001D50              
   1885    001D50              ;Z RESETADR   -- adr      reset vector
                                address
   1886    001D50                  HEADER  RESETADR,8,'RESETADR',DOCON
   1886.1  000000                      PUBLIC  RESETADR
   1886.2  001D50 ....                 DW      link
   1886.3  001D52 FF                   DB      0FFh       ; not immediate
   1886.4  001D53              link    SET     $
   1886.5  001D53 08                   DB      8
   1886.6  001D54 524553455441*        DB      'RESETADR'
   1886.7  001D5C                      EVEN
   1886.8  001D5C                      IF      'DOCON'='DOCODE'
   1886.9  001D5C              RESETADR: DW     $+2
   1886.10 001D5C                      ELSE
   1886.11 001D5C ....         RESETADR: DW      DOCON
   1886.12 001D5E                      ENDIF
   1886.13 001D5E                      ENDM
   1887    001D5E ....                 DW resetvec
   1888    001D60              
   1889    001D60              ;Z MEMBOT   -- adr       begining of USERflash  
                                      
   1890    001D60                  HEADER  MEMBOT,6,'MEMBOT',DOCON
   1890.1  000000                      PUBLIC  MEMBOT
   1890.2  001D60 ....                 DW      link
   1890.3  001D62 FF                   DB      0FFh       ; not immediate
   1890.4  001D63              link    SET     $
   1890.5  001D63 06                   DB      6
   1890.6  001D64 4D454D424F54         DB      'MEMBOT'
   1890.7  001D6A                      EVEN
   1890.8  001D6A                      IF      'DOCON'='DOCODE'
   1890.9  001D6A              MEMBOT: DW     $+2
   1890.10 001D6A                      ELSE
   1890.11 001D6A ....         MEMBOT: DW      DOCON
   1890.12 001D6C                      ENDIF
   1890.13 001D6C                      ENDM
   1891    001D6C 00C0                 DW USERFLASHSTART 
   1892    001D6E              
   1893    001D6E              ;Z MEMTOP   -- adr       end of USERflash       
                                 
   1894    001D6E                  HEADER  MEMTOP,6,'MEMTOP',DOCON
   1894.1  000000                      PUBLIC  MEMTOP
   1894.2  001D6E ....                 DW      link
   1894.3  001D70 FF                   DB      0FFh       ; not immediate
   1894.4  001D71              link    SET     $
   1894.5  001D71 06                   DB      6
   1894.6  001D72 4D454D544F50         DB      'MEMTOP'
   1894.7  001D78                      EVEN
   1894.8  001D78                      IF      'DOCON'='DOCODE'
   1894.9  001D78              MEMTOP: DW     $+2
   1894.10 001D78                      ELSE
   1894.11 001D78 ....         MEMTOP: DW      DOCON
   1894.12 001D7A                      ENDIF
   1894.13 001D7A                      ENDM
   1895    001D7A FFD7                 DW USERFLASHEND 
   1896    001D7C              
   1897    001D7C              ;U MEM       -- u    bytes left in flash
   1898    001D7C              ;       memtop ihere - ;
   1899    001D7C                  HEADER  MEM,3,'MEM',DOCOLON
   1899.1  000000                      PUBLIC  MEM
   1899.2  001D7C ....                 DW      link
   1899.3  001D7E FF                   DB      0FFh       ; not immediate
   1899.4  001D7F              link    SET     $
   1899.5  001D7F 03                   DB      3
   1899.6  001D80 4D454D               DB      'MEM'
   1899.7  001D83 00                   EVEN
   1899.8  001D84                      IF      'DOCOLON'='DOCODE'
   1899.9  001D84              MEM: DW     $+2
   1899.10 001D84                      ELSE
   1899.11 001D84 ....         MEM: DW      DOCOLON
   1899.12 001D86                      ENDIF
   1899.13 001D86                      ENDM
   1900    001D86 ............         DW MEMTOP,IHERE,MINUS
   1901    001D8C ....                 DW EXIT
   1902    001D8E                      
   1903    001D8E              ;U UNUSED    -- u    bytes left in RAM
   1904    001D8E                  HEADER UNUSED,6,'UNUSED',DOCOLON
   1904.1  000000                      PUBLIC  UNUSED
   1904.2  001D8E ....                 DW      link
                                  - 4e-LP430 -                        Page  140

   1904.3  001D90 FF                   DB      0FFh       ; not immediate
   1904.4  001D91              link    SET     $
   1904.5  001D91 06                   DB      6
   1904.6  001D92 554E55534544         DB      'UNUSED'
   1904.7  001D98                      EVEN
   1904.8  001D98                      IF      'DOCOLON'='DOCODE'
   1904.9  001D98              UNUSED: DW     $+2
   1904.10 001D98                      ELSE
   1904.11 001D98 ....         UNUSED: DW      DOCOLON
   1904.12 001D9A                      ENDIF
   1904.13 001D9A                      ENDM
   1905    001D9A ....0004....*        DW lit,RAMEND,HERE,MINUS
   1906    001DA2 ....                 DW EXIT
   1907    001DA4              
   1908    001DA4              ;Z VARBOT     -- a-addr     bottom of Variable
                                Area
   1909    001DA4                  HEADER  VARBOT,6,'VARBOT',DOCON
   1909.1  000000                      PUBLIC  VARBOT
   1909.2  001DA4 ....                 DW      link
   1909.3  001DA6 FF                   DB      0FFh       ; not immediate
   1909.4  001DA7              link    SET     $
   1909.5  001DA7 06                   DB      6
   1909.6  001DA8 564152424F54         DB      'VARBOT'
   1909.7  001DAE                      EVEN
   1909.8  001DAE                      IF      'DOCON'='DOCODE'
   1909.9  001DAE              VARBOT: DW     $+2
   1909.10 001DAE                      ELSE
   1909.11 001DAE ....         VARBOT: DW      DOCON
   1909.12 001DB0                      ENDIF
   1909.13 001DB0                      ENDM
   1910    001DB0 ....                 DW VARAREA
   1911    001DB2              
   1912    000000              EXTERN intseg,intvecs
   1913    001DB2              ;Z TOPSEG     -- a-addr     bottom of top most
                                segment
   1914    001DB2                  HEADER  TOPSEG,6,'TOPSEG',DOCON
   1914.1  000000                      PUBLIC  TOPSEG
   1914.2  001DB2 ....                 DW      link
   1914.3  001DB4 FF                   DB      0FFh       ; not immediate
   1914.4  001DB5              link    SET     $
   1914.5  001DB5 06                   DB      6
   1914.6  001DB6 544F50534547         DB      'TOPSEG'
   1914.7  001DBC                      EVEN
   1914.8  001DBC                      IF      'DOCON'='DOCODE'
   1914.9  001DBC              TOPSEG: DW     $+2
   1914.10 001DBC                      ELSE
   1914.11 001DBC ....         TOPSEG: DW      DOCON
   1914.12 001DBE                      ENDIF
   1914.13 001DBE                      ENDM
   1915    001DBE ....                 DW intseg
   1916    001DC0              
   1917    001DC0              ;Z VECBOT     -- a-addr     begining of vector
                                segment
   1918    001DC0                  HEADER  VECBOT,6,'VECBOT',DOCON
   1918.1  000000                      PUBLIC  VECBOT
   1918.2  001DC0 ....                 DW      link
   1918.3  001DC2 FF                   DB      0FFh       ; not immediate
   1918.4  001DC3              link    SET     $
   1918.5  001DC3 06                   DB      6
   1918.6  001DC4 564543424F54         DB      'VECBOT'
   1918.7  001DCA                      EVEN
   1918.8  001DCA                      IF      'DOCON'='DOCODE'
   1918.9  001DCA              VECBOT: DW     $+2
   1918.10 001DCA                      ELSE
   1918.11 001DCA ....         VECBOT: DW      DOCON
   1918.12 001DCC                      ENDIF
   1918.13 001DCC                      ENDM
   1919    001DCC ....                 DW intvecs
   1920    001DCE              
   1921    001DCE              
   1922    001DCE              ;U ?       adr -- u      display content of
                                variable          
   1923    001DCE              ;       @ u. ;
   1924    001DCE                      HEADER  QQ,1,'?',DOCOLON
   1924.1  000000                      PUBLIC  QQ
   1924.2  001DCE ....                 DW      link
   1924.3  001DD0 FF                   DB      0FFh       ; not immediate
   1924.4  001DD1              link    SET     $
                                  - 4e-LP430 -                        Page  141

   1924.5  001DD1 01                   DB      1
   1924.6  001DD2 3F                   DB      '?'
   1924.7  001DD3 00                   EVEN
   1924.8  001DD4                      IF      'DOCOLON'='DOCODE'
   1924.9  001DD4              QQ: DW     $+2
   1924.10 001DD4                      ELSE
   1924.11 001DD4 ....         QQ: DW      DOCOLON
   1924.12 001DD6                      ENDIF
   1924.13 001DD6                      ENDM
   1925    001DD6 ........             DW FETCH,UDOT
   1926    001DDA ....                 DW EXIT
   1927    001DDC              
   1928    001DDC              
   1929    001DDC              ;U MCU Peripherie ------------------------------
                               --------------------------------
   1930    001DDC              
   1931    001DDC              ;Z P1    --  adr       address of port1 output
                                register 
   1932    001DDC                  HEADER  P1,2,'P1',DOCON
   1932.1  000000                      PUBLIC  P1
   1932.2  001DDC ....                 DW      link
   1932.3  001DDE FF                   DB      0FFh       ; not immediate
   1932.4  001DDF              link    SET     $
   1932.5  001DDF 02                   DB      2
   1932.6  001DE0 5031                 DB      'P1'
   1932.7  001DE2                      EVEN
   1932.8  001DE2                      IF      'DOCON'='DOCODE'
   1932.9  001DE2              P1: DW     $+2
   1932.10 001DE2                      ELSE
   1932.11 001DE2 ....         P1: DW      DOCON
   1932.12 001DE4                      ENDIF
   1932.13 001DE4                      ENDM
   1933    001DE4 2100                 DW P1OUT
   1934    001DE6              
   1935    001DE6              ;Z P2    --  adr       address of port2 output
                                register 
   1936    001DE6                  HEADER  P2,2,'P2',DOCON
   1936.1  000000                      PUBLIC  P2
   1936.2  001DE6 ....                 DW      link
   1936.3  001DE8 FF                   DB      0FFh       ; not immediate
   1936.4  001DE9              link    SET     $
   1936.5  001DE9 02                   DB      2
   1936.6  001DEA 5032                 DB      'P2'
   1936.7  001DEC                      EVEN
   1936.8  001DEC                      IF      'DOCON'='DOCODE'
   1936.9  001DEC              P2: DW     $+2
   1936.10 001DEC                      ELSE
   1936.11 001DEC ....         P2: DW      DOCON
   1936.12 001DEE                      ENDIF
   1936.13 001DEE                      ENDM
   1937    001DEE 2900                 DW P2OUT
   1938    001DF0              
   1939    001DF0              ;Z P3    --  adr       address of port2 output
                                register 
   1940    001DF0                  HEADER  P3,2,'P3',DOCON
   1940.1  000000                      PUBLIC  P3
   1940.2  001DF0 ....                 DW      link
   1940.3  001DF2 FF                   DB      0FFh       ; not immediate
   1940.4  001DF3              link    SET     $
   1940.5  001DF3 02                   DB      2
   1940.6  001DF4 5033                 DB      'P3'
   1940.7  001DF6                      EVEN
   1940.8  001DF6                      IF      'DOCON'='DOCODE'
   1940.9  001DF6              P3: DW     $+2
   1940.10 001DF6                      ELSE
   1940.11 001DF6 ....         P3: DW      DOCON
   1940.12 001DF8                      ENDIF
   1940.13 001DF8                      ENDM
   1941    001DF8 1900                 DW P3OUT
   1942    001DFA              
   1943    001DFA              ; Note: the first character sent from the MSP430
                                seems to get
   1944    001DFA              ; scrambled.  I conjecture this is because the
                                baud rate generator
   1945    001DFA              ; has not reset to the new rate when we attempt
                                to send a character.
   1946    001DFA              ; See init430f1611.s43 for delay after
                                initialization.
                                  - 4e-LP430 -                        Page  142

   1947    001DFA              
   1948    001DFA              
   1949    001DFA              ;U Basics for an extern cross assembler
                                ----------------------------------------
   1950    001DFA              ; Usage of CODE and NEXT see top of file.
   1951    001DFA              
   1952    001DFA              ;U CODE       <name> --       build header for
                                assembler word,
   1953    001DFA              ;                              execute code at
                                runtime.
   1954    001DFA              ;    <builds ihere ihere 2 -  i!  ;
   1955    001DFA                   HEADER  CODEE,4,'CODE',DOCOLON
   1955.1  000000                      PUBLIC  CODEE
   1955.2  001DFA ....                 DW      link
   1955.3  001DFC FF                   DB      0FFh       ; not immediate
   1955.4  001DFD              link    SET     $
   1955.5  001DFD 04                   DB      4
   1955.6  001DFE 434F4445             DB      'CODE'
   1955.7  001E02                      EVEN
   1955.8  001E02                      IF      'DOCOLON'='DOCODE'
   1955.9  001E02              CODEE: DW     $+2
   1955.10 001E02                      ELSE
   1955.11 001E02 ....         CODEE: DW      DOCOLON
   1955.12 001E04                      ENDIF
   1955.13 001E04                      ENDM
   1956    001E04 ............*        DW BUILDS,IHERE,IHERE,lit,2,MINUS,ISTORE
   1957    001E12 ....                 DW EXIT
   1958    001E14                      
   1959    001E14              ;U CODEADR    <name> --   build constant
   1960    001E14              ;  <name>     -- adr      at runtime put address
                                of next cell on stack,
   1961    001E14              ;                         thats where your code
                                starts.
   1962    001E14              ;    <builds does>  ;
   1963    001E14                   HEADER  CODEADR,7,'CODEADR',DOCOLON
   1963.1  000000                      PUBLIC  CODEADR
   1963.2  001E14 ....                 DW      link
   1963.3  001E16 FF                   DB      0FFh       ; not immediate
   1963.4  001E17              link    SET     $
   1963.5  001E17 07                   DB      7
   1963.6  001E18 434F44454144*        DB      'CODEADR'
   1963.7  001E1F 00                   EVEN
   1963.8  001E20                      IF      'DOCOLON'='DOCODE'
   1963.9  001E20              CODEADR: DW     $+2
   1963.10 001E20                      ELSE
   1963.11 001E20 ....         CODEADR: DW      DOCOLON
   1963.12 001E22                      ENDIF
   1963.13 001E22                      ENDM
   1964    001E22 ........             DW BUILDS,XDOES  ; build forth word
                                                         <name>
   1965    001E26 3040....             MOV #DOROM,PC    ; push ihere to TOS
                                                         
   1966    001E2A              
   1967    001E2A              ;U CALL   adr --   run a code subroutine
                                starting at address.
   1968    001E2A                   HEADER  CALLL,4,'CALL',DOCODE
   1968.1  000000                      PUBLIC  CALLL
   1968.2  001E2A ....                 DW      link
   1968.3  001E2C FF                   DB      0FFh       ; not immediate
   1968.4  001E2D              link    SET     $
   1968.5  001E2D 04                   DB      4
   1968.6  001E2E 43414C4C             DB      'CALL'
   1968.7  001E32                      EVEN
   1968.8  001E32                      IF      'DOCODE'='DOCODE'
   1968.9  001E32 ....         CALLL: DW     $+2
   1968.10 001E34                      ELSE
   1968.11 001E34              CALLL: DW      DOCODE
   1968.12 001E34                      ENDIF
   1968.13 001E34                      ENDM
   1969    001E34 8712                CALL TOS
   1970    001E36                     next       
   1970.1  001E36 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
   1970.2  001E38 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
   1970.3  001E3A                      ENDM
   1971    001E3A              
   1972    001E3A              /*
                                  - 4e-LP430 -                        Page  143

   1973    001E3A              ;U NEXT,       --       Macro; compiles jump to
                                high level forth          
   1974    001E3A              ;    hex  : next  4536 i, 4630 i, ;
   1975    001E3A                   HEADER  NEXTCOMA,5,'NEXT,',DOCOLON
   1976    001E3A                      DW lit,4536h,ICOMMA,lit,4630h,ICOMMA
   1977    001E3A                      DW EXIT
   1978    001E3A              */
   1979    001E3A              
   1980    001E3A              ;U END-CODE       --       mark end of code
                                section          
   1981    001E3A              ;     ;
   1982    001E3A                   HEADER  ENDCODE,8,'END-CODE',DOCOLON
   1982.1  000000                      PUBLIC  ENDCODE
   1982.2  001E3A ....                 DW      link
   1982.3  001E3C FF                   DB      0FFh       ; not immediate
   1982.4  001E3D              link    SET     $
   1982.5  001E3D 08                   DB      8
   1982.6  001E3E 454E442D434F*        DB      'END-CODE'
   1982.7  001E46                      EVEN
   1982.8  001E46                      IF      'DOCOLON'='DOCODE'
   1982.9  001E46              ENDCODE: DW     $+2
   1982.10 001E46                      ELSE
   1982.11 001E46 ....         ENDCODE: DW      DOCOLON
   1982.12 001E48                      ENDIF
   1982.13 001E48                      ENDM
   1983    001E48 ....                 DW EXIT ; dummy - used as delimiter in
                                                4e4th-IDE to generate code
                                                
   1984    001E4A              
   1985    001E4A              
   1986    001E4A              /***********************************************
                               ******************************** 
   1987    001E4A              ; copy&paste to 4e4th:
   1988    001E4A              
   1989    001E4A              \ Code example:
   1990    001E4A                 hex 
   1991    001E4A                 CODE REDOFF    C3D2 I, 0021 I,   NEXT,
                                END-CODE
   1992    001E4A                 CODE REDON     D3D2 I, 0021 I,   NEXT,
                                END-CODE
   1993    001E4A              
   1994    001E4A              \ now run your words:
   1995    001E4A                 REDOFF   1000 ms   REDON
   1996    001E4A              
   1997    001E4A              ************************************************
                               *******************************/
   1998    001E4A              
   1999    001E4A              ; EOF 
     68    001E4A              #include "4e-startup.s43" 
      1    001E4A              ;U STARTUP WORDS ===============================
                               ================================
      2    001E4A              
      3    001E4A              ;U .BOOTVERSION  --  print boot version
                                
      4    001E4A                  HEADLESS DOTBOOTVERSION,DOCOLON
      4.1  000000                      PUBLIC  DOTBOOTVERSION
      4.2  001E4A                      IF      'DOCOLON'='DOCODE'
      4.3  001E4A              DOTBOOTVERSION: DW     $+2
      4.4  001E4A                      ELSE
      4.5  001E4A ....         DOTBOOTVERSION: DW      DOCOLON
      4.6  001E4C                      ENDIF
      4.7  001E4C                      ENDM
      5    001E4C ....                  DW XISQUOTE
      6    001E4E 07                    DB (doboot1-doboot0)
      7    001E4F 206465627567*doboot0: DB ' debug '
      8    001E56                       EVEN
      9    001E56 ....         doboot1: DW ITYPE
     10    001E58 ....                  DW EXIT
     11    001E5A              
     12    001E5A              ;Z ITHERE      -- adr      find first free flash
                                cell
     13    001E5A              ;  MEMTOP BEGIN 1- 
     14    001E5A              ;  DUP C@ FF <> 
     15    001E5A              ;  OVER FL0 < OR UNTIL 1+ ;
     16    001E5A                  HEADER  ITHERE,6,'ITHERE',DOCOLON
     16.1  000000                      PUBLIC  ITHERE
     16.2  001E5A ....                 DW      link
     16.3  001E5C FF                   DB      0FFh       ; not immediate
                                  - 4e-LP430 -                        Page  144

     16.4  001E5D              link    SET     $
     16.5  001E5D 06                   DB      6
     16.6  001E5E 495448455245         DB      'ITHERE'
     16.7  001E64                      EVEN
     16.8  001E64                      IF      'DOCOLON'='DOCODE'
     16.9  001E64              ITHERE: DW     $+2
     16.10 001E64                      ELSE
     16.11 001E64 ....         ITHERE: DW      DOCOLON
     16.12 001E66                      ENDIF
     16.13 001E66                      ENDM
     17    001E66 ....               DW MEMTOP
     18    001E68 ............*ih1   DW ONEMINUS,DUP,CFETCH,lit,$FF,NOTEQUAL
     19    001E74 ............*      DW OVER,MEMBOT,LESS,ORR,qbran
     20    001E7E                      DEST  ih1
     20.1  001E7E EAFF                 DW      ih1-$
     20.2  001E80                      ENDM
     21    001E80 ........           DW ONEPLUS,EXIT
     22    001E84              
     23    001E84              ;U APPCRC    -- crc      CRC of APP-dictionary
     24    001E84              ;    0 MEMBOT ITHERE OVER - (crc  APPU0 #INIT
                                (crc ;
     25    001E84              ;    HEADER   APPCRC,6,'APPCRC',DOCOLON
     26    001E84                   HEADLESS APPCRC,DOCOLON
     26.1  000000                      PUBLIC  APPCRC
     26.2  001E84                      IF      'DOCOLON'='DOCODE'
     26.3  001E84              APPCRC: DW     $+2
     26.4  001E84                      ELSE
     26.5  001E84 ....         APPCRC: DW      DOCOLON
     26.6  001E86                      ENDIF
     26.7  001E86                      ENDM
     27    001E86 ....0000             DW lit,0
     28    001E8A ............*        DW MEMBOT,ITHERE,OVER,MINUS,CRC
     29    001E94 ............*        DW APPU0,NINIT,CRC,EXIT
     30    001E9C              
     31    000000              EXTERN crcval 
     32    001E9C              
     33    001E9C              ;U VALID?     -- f       check if user app crc
                                matches infoB
     34    001E9C              ;     APPCRC crcval I@ = ;
     35    001E9C              ;    HEADER   VALIDQ,6,'VALID?',DOCOLON
     36    001E9C                  HEADLESS VALIDQ,DOCOLON
     36.1  000000                      PUBLIC  VALIDQ
     36.2  001E9C                      IF      'DOCOLON'='DOCODE'
     36.3  001E9C              VALIDQ: DW     $+2
     36.4  001E9C                      ELSE
     36.5  001E9C ....         VALIDQ: DW      DOCOLON
     36.6  001E9E                      ENDIF
     36.7  001E9E                      ENDM
     37    001E9E ............*        DW APPCRC,lit,crcval,IFETCH,EQUAL,EXIT
     38    001EAA              
     39    001EAA              ;U SAVE   --      save user area to infoB
     40    001EAA              ;  InfoB [ 63 2 + ] Literal FLERASE
     41    001EAA              ;  U0 APPU0 #INIT D->I
     42    001EAA              ;  APPCRC [ crcval ] Literal I! ;
     43    001EAA                  HEADER  SAVE,4,'SAVE',DOCOLON
     43.1  000000                      PUBLIC  SAVE
     43.2  001EAA ....                 DW      link
     43.3  001EAC FF                   DB      0FFh       ; not immediate
     43.4  001EAD              link    SET     $
     43.5  001EAD 04                   DB      4
     43.6  001EAE 53415645             DB      'SAVE'
     43.7  001EB2                      EVEN
     43.8  001EB2                      IF      'DOCOLON'='DOCODE'
     43.9  001EB2              SAVE: DW     $+2
     43.10 001EB2                      ELSE
     43.11 001EB2 ....         SAVE: DW      DOCOLON
     43.12 001EB4                      ENDIF
     43.13 001EB4                      ENDM
     44    001EB4                      ; save user area to infoB
     45    001EB4 ........4100*        DW INFOB,lit,63+2,FLERASE
     46    001EBC ............*        DW U0,APPU0,NINIT,DTOI 
     47    001EC4 ............*        DW APPCRC,lit,crcval,ISTORE
     48    001ECC                      ; save variable area to infoC
     49    001ECC ........4100*        DW INFOC,lit,63+2,FLERASE
     50    001ED4 ............*        DW HERE,UNUSED,ZERO,FILL
     51    001EDC ............*        DW VARBOT,INFOC,lit,(VAR_SIZE)*2,DTOI
                                            
     52    001EE6 ....                 DW EXIT
                                  - 4e-LP430 -                        Page  145

     53    001EE8              
     54    00018E              CORREST    EQU 018Eh 
     55    000186              CORPOWERON EQU 0186h 
     56    001EE8              
     57    001EE8              ;Z BOOT     --        boot system
     58    001EE8                  HEADER  BOOT,4,'BOOT',DOCOLON
     58.1  000000                      PUBLIC  BOOT
     58.2  001EE8 ....                 DW      link
     58.3  001EEA FF                   DB      0FFh       ; not immediate
     58.4  001EEB              link    SET     $
     58.5  001EEB 04                   DB      4
     58.6  001EEC 424F4F54             DB      'BOOT'
     58.7  001EF0                      EVEN
     58.8  001EF0                      IF      'DOCOLON'='DOCODE'
     58.9  001EF0              BOOT: DW     $+2
     58.10 001EF0                      ELSE
     58.11 001EF0 ....         BOOT: DW      DOCOLON
     58.12 001EF2                      ENDIF
     58.13 001EF2                      ENDM
     59    001EF2 ............         DW S2,cget,qbran  
     60    001EF8                      DEST  boot1 
     60.1  001EF8 2800                 DW      boot1-$
     60.2  001EFA                      ENDM
     61    001EFA ........             DW VALIDQ,qbran
     62    001EFE                      DEST invalid
     62.1  001EFE 0400                 DW      invalid-$
     62.2  001F00                      ENDM
     63    001F00 ....         valid:  DW COLD   ; valid infoB and dictionary
     64    001F02 ............*invalid:DW COR,FETCH,lit,CORPOWERON,NOTEQUAL,qbr
                                           an
     65    001F0E                      DEST boot1
     65.1  001F0E 1200                 DW      boot1-$
     65.2  001F10                      ENDM
     66    001F10              reset1:  ; reset and invalid infoB
     67    001F10 ............*        DW LATEST,FETCH,MEMBOT,ITHERE,WITHIN,qbr
                                           an  ; check RAM latest 
     68    001F1C                      DEST boot1
     68.1  001F1C 0400                 DW      boot1-$
     68.2  001F1E                      ENDM
     69    001F1E ....                 DW WARM   ; invalid infoB but seemingly
                                                  valid RAM
     70    001F20 ....         boot1:  DW WIPE   ; invalid infoB but power on
                                                  or RAM invalid
     71    001F22              
     72    000000              PUBLIC BOOTIP ; used to init IP register.
     73    001F22              BOOTIP   equ BOOT+2
     74    001F22              
     75    001F22              ;Z WARM     --        use user area from RAM
                                (hopefully intact)
     76    001F22                  HEADER  WARM,4,'WARM',DOCOLON
     76.1  000000                      PUBLIC  WARM
     76.2  001F22 ....                 DW      link
     76.3  001F24 FF                   DB      0FFh       ; not immediate
     76.4  001F25              link    SET     $
     76.5  001F25 04                   DB      4
     76.6  001F26 5741524D             DB      'WARM'
     76.7  001F2A                      EVEN
     76.8  001F2A                      IF      'DOCOLON'='DOCODE'
     76.9  001F2A              WARM: DW     $+2
     76.10 001F2A                      ELSE
     76.11 001F2A ....         WARM: DW      DOCOLON
     76.12 001F2C                      ENDIF
     76.13 001F2C                      ENDM
     77    001F2C ....                 DW XISQUOTE
     78    001F2E 05                   DB (warm1-warm0)
     79    001F2F 5761726D     warm0:  DB 'Warm'
     80    001F33 00                   EVEN
     81    001F34 ....         warm1:  DW ITYPE
     82    001F36 ....                 DW ABORT
     83    001F38              
     84    001F38              ;U .COLD  --  display COLD message
     85    001F38                  HEADLESS DOTCOLD,DOCOLON
     85.1  000000                      PUBLIC  DOTCOLD
     85.2  001F38                      IF      'DOCOLON'='DOCODE'
     85.3  001F38              DOTCOLD: DW     $+2
     85.4  001F38                      ELSE
     85.5  001F38 ....         DOTCOLD: DW      DOCOLON
     85.6  001F3A                      ENDIF
                                  - 4e-LP430 -                        Page  146

     85.7  001F3A                      ENDM
     86    001F3A ....                 DW XISQUOTE
     87    001F3C 05                   DB (dotcold1-dotcold0)
     88    001F3D 436F6C64     dotcold0:DB 'Cold'
     89    001F41 00                   EVEN
     90    001F42 ....         dotcold1:DW ITYPE
     91    001F44 ....                 DW EXIT
     92    001F46              
     93    001F46              PUBLIC DOTCOLD
     94    001F46              
     95    001F46              ;Z COLD     --        set user area to latest
                                application 
     96    001F46                  HEADER  COLD,4,'COLD',DOCOLON
     96.1  000000                      PUBLIC  COLD
     96.2  001F46 ....                 DW      link
     96.3  001F48 FF                   DB      0FFh       ; not immediate
     96.4  001F49              link    SET     $
     96.5  001F49 04                   DB      4
     96.6  001F4A 434F4C44             DB      'COLD'
     96.7  001F4E                      EVEN
     96.8  001F4E                      IF      'DOCOLON'='DOCODE'
     96.9  001F4E              COLD: DW     $+2
     96.10 001F4E                      ELSE
     96.11 001F4E ....         COLD: DW      DOCOLON
     96.12 001F50                      ENDIF
     96.13 001F50                      ENDM
     97    001F50 ............*      DW APPU0,U0,NINIT,ITOD  ; use application
                                                              user area
     98    001F58 ............*      DW INFOC,VARBOT,lit,0x20,ITOD  ; use
                                                                     applicatio
                                                                    n variable
                                                                     area
     99    001F62 ............       DW APP,FETCH,EXECUTE ; AUTOSTART
                                                           Application
    100    001F68 ....               DW ABORT
    101    001F6A              
    102    000000              PUBLIC COLDIP ; used to init IP register while
                                              testing.
    103    001F6A              COLDIP   equ COLD+2
    104    001F6A              
    105    001F6A              ;Z FACTORY     --      set user area to plain
                                kernel
    106    001F6A              ;   UINIT U0 #INIT I->D SAVE   init user
                                area
    107    001F6A              ;   ABORT ;
    108    001F6A                  HEADER  FACTORY,7,'FACTORY',DOCOLON
    108.1  000000                      PUBLIC  FACTORY
    108.2  001F6A ....                 DW      link
    108.3  001F6C FF                   DB      0FFh       ; not immediate
    108.4  001F6D              link    SET     $
    108.5  001F6D 07                   DB      7
    108.6  001F6E 464143544F52*        DB      'FACTORY'
    108.7  001F75 00                   EVEN
    108.8  001F76                      IF      'DOCOLON'='DOCODE'
    108.9  001F76              FACTORY: DW     $+2
    108.10 001F76                      ELSE
    108.11 001F76 ....         FACTORY: DW      DOCOLON
    108.12 001F78                      ENDIF
    108.13 001F78                      ENDM
    109    001F78 ............*        DW UINIT,U0,NINIT,ITOD    ; store kernel
                                                                  user area
                                                                  table to user
                                                                  area
    110    001F80 ............*        DW VARBOT,lit,(VAR_SIZE)*2,ZERO,FILL  ;
                                            set variables to ZERO
    111    001F8A ....                 DW SAVE
    112    001F8C ....                 DW DOTVER
    113    001F8E ....                 DW EXIT
    114    001F90              
    115    000000              PUBLIC FACTORYIP ; used to init IP register.
    116    001F90              FACTORYIP equ FACTORY+2
    117    001F90              
    118    001F90              
    119    001F90              ;U PROFUSE  -- adr        address of production
                                fuse.
    120    001F90              ; constant PROFUSEADR
    121    001F90                  HEADER  PROFUSEADR,7,'PROFUSE',DOCON
    121.1  000000                      PUBLIC  PROFUSEADR
                                  - 4e-LP430 -                        Page  147

    121.2  001F90 ....                 DW      link
    121.3  001F92 FF                   DB      0FFh       ; not immediate
    121.4  001F93              link    SET     $
    121.5  001F93 07                   DB      7
    121.6  001F94 50524F465553*        DB      'PROFUSE'
    121.7  001F9B 00                   EVEN
    121.8  001F9C                      IF      'DOCON'='DOCODE'
    121.9  001F9C              PROFUSEADR: DW     $+2
    121.10 001F9C                      ELSE
    121.11 001F9C ....         PROFUSEADR: DW      DOCON
    121.12 001F9E                      ENDIF
    121.13 001F9E                      ENDM
    122    001F9E ....                 DW PROFUSE  
    123    001FA0                      
    124    001FA0              ;U 4E4THPRO  --           save app and blow
                                production fuse.
    125    001FA0              ; SAVE ZERO PROFUSEADR VEC! ;
    126    001FA0                  HEADER  FORTHPRO,8,'4E4THPRO',DOCOLON
    126.1  000000                      PUBLIC  FORTHPRO
    126.2  001FA0 ....                 DW      link
    126.3  001FA2 FF                   DB      0FFh       ; not immediate
    126.4  001FA3              link    SET     $
    126.5  001FA3 08                   DB      8
    126.6  001FA4 344534544850*        DB      '4E4THPRO'
    126.7  001FAC                      EVEN
    126.8  001FAC                      IF      'DOCOLON'='DOCODE'
    126.9  001FAC              FORTHPRO: DW     $+2
    126.10 001FAC                      ELSE
    126.11 001FAC ....         FORTHPRO: DW      DOCOLON
    126.12 001FAE                      ENDIF
    126.13 001FAE                      ENDM
    127    001FAE ............*        DW SAVE,ZERO,PROFUSEADR,VECSTORE
    128    001FB6 ....                 DW EXIT
    129    001FB8              
    130    001FB8              ;U WIPE    --            erase flash but not
                                kernel, reset user area.
    131    001FB8              ; PROFUSEADR @ IF WIPE ELSE COLD TEHN ;
    132    001FB8                  HEADER  WIPE,4,'WIPE',DOCOLON
    132.1  000000                      PUBLIC  WIPE
    132.2  001FB8 ....                 DW      link
    132.3  001FBA FF                   DB      0FFh       ; not immediate
    132.4  001FBB              link    SET     $
    132.5  001FBB 04                   DB      4
    132.6  001FBC 57495045             DB      'WIPE'
    132.7  001FC0                      EVEN
    132.8  001FC0                      IF      'DOCOLON'='DOCODE'
    132.9  001FC0              WIPE: DW     $+2
    132.10 001FC0                      ELSE
    132.11 001FC0 ....         WIPE: DW      DOCOLON
    132.12 001FC2                      ENDIF
    132.13 001FC2                      ENDM
    133    001FC2 ............         DW PROFUSEADR,FETCH,qbran
    134    001FC8                      DEST wipe1
    134.1  001FC8 0400                 DW      wipe1-$
    134.2  001FCA                      ENDM
    135    001FCA ....                 DW PARENWIPE
    136    001FCC ....         wipe1:  DW COLD
    137    001FCE              
    138    001FCE              ;U (WIPE)    --      erase flash but not kernel,
                                reset user area.
    139    001FCE              ; MEMBOT USERMEM FLERASE
    140    001FCE              ; FACTORY ." Wiped" ABORT ;
    141    001FCE                  HEADER  PARENWIPE,6,'(WIPE)',DOCOLON
    141.1  000000                      PUBLIC  PARENWIPE
    141.2  001FCE ....                 DW      link
    141.3  001FD0 FF                   DB      0FFh       ; not immediate
    141.4  001FD1              link    SET     $
    141.5  001FD1 06                   DB      6
    141.6  001FD2 285749504529         DB      '(WIPE)'
    141.7  001FD8                      EVEN
    141.8  001FD8                      IF      'DOCOLON'='DOCODE'
    141.9  001FD8              PARENWIPE: DW     $+2
    141.10 001FD8                      ELSE
    141.11 001FD8 ....         PARENWIPE: DW      DOCOLON
    141.12 001FDA                      ENDIF
    141.13 001FDA                      ENDM
    142    001FDA ........0018*        DW MEMBOT,lit,USERFLASHEND-USERFLASHSTAR
                                           T+1,FLERASE
                                  - 4e-LP430 -                        Page  148

    143    001FE2 ....                 DW FACTORY 
    144    001FE4 ....         DW XISQUOTE
    145    001FE6 07                   DB (wipmsg1-wipmsg0)
    146    001FE7 205769706564 wipmsg0:DB ' Wiped'
    147    001FED 00                   EVEN
    148    001FEE ....         wipmsg1:DW ITYPE
    149    001FF0 ....                 DW ABORT      ; ABORT never returns
    150    001FF2              
     69    001FF2              #include "4e-vecarea.s43"
      1    001FF2              ; write vector area ============================
                               =======================
      2    001FF2              
      3    000000              EXTERN resetvec,reset
      4    001FF2              
      5    001FF2              ; write vector area - or any flash location.  !!
                                dangerous!!
      6    001FF2              ;Z VEC!        x adr  --     store x to top most
                                segment
      7    001FF2                      HEADER  VECSTORE,4,'VEC!',DOCODE
      7.1  000000                      PUBLIC  VECSTORE
      7.2  001FF2 ....                 DW      link
      7.3  001FF4 FF                   DB      0FFh       ; not immediate
      7.4  001FF5              link    SET     $
      7.5  001FF5 04                   DB      4
      7.6  001FF6 56454321             DB      'VEC!'
      7.7  001FFA                      EVEN
      7.8  001FFA                      IF      'DOCODE'='DOCODE'
      7.9  001FFA ....         VECSTORE: DW     $+2
      7.10 001FFC                      ELSE
      7.11 001FFC              VECSTORE: DW      DOCODE
      7.12 001FFC                      ENDIF
      7.13 001FFC                      ENDM
      8    001FFC 3644                 MOV     @PSP+,W         ; get data to
                                                                write
      9    001FFE 17B3                 BIT     #1,TOS
     10    002000 1320                 JNZ     IST_X2          ; if not even
                                                                address, do not
                                                                write
     11    002002 2697                 CMP     @TOS,W
     12    002004 1124                 JZ      IST_X2          ; if memory is
                                                                desired value,
                                                                do not
                                                                write
     13    002006 0212                 PUSH sr
     14    002008 32C2                 DINT                    ; Disable
                                                                interrupts
     15    00200A B24000A52C01         MOV #FWKEY,&FCTL3       ; Clear
                                                                LOCK
     16    002010 B24040A52801         MOV #FWKEY+WRT,&FCTL1   ; Enable
                                                                write
     17    002016 87460000             MOV     W,0(TOS)        ; Write word to
                                                                flash
                                                                location
     18    00201A B24000A52801         MOV #FWKEY,&FCTL1       ; Done. Clear
                                                                WRT.
     19    002020 B24010A52C01         MOV #FWKEY+LOCK,&FCTL3  ; Set LOCK
     20    002026              ;        EINT                    ; Enable
                                interrupts
     21    002026 3241                 POP sr
     22    002028 3744         IST_X2: MOV     @PSP+,TOS       ; pop new
                                                                TOS
     23    00202A                      NEXT
     23.1  00202A 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
     23.2  00202C 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
     23.3  00202E                      ENDM
     24    00202E              
     25    00202E              ;U (VECWIPE)    --      erase top segment in
                                flash
     26    00202E                  HEADER  PARENVECWIPE,9,'(VECWIPE)',DOCODE
     26.1  000000                      PUBLIC  PARENVECWIPE
     26.2  00202E ....                 DW      link
     26.3  002030 FF                   DB      0FFh       ; not immediate
     26.4  002031              link    SET     $
     26.5  002031 09                   DB      9
     26.6  002032 285645435749*        DB      '(VECWIPE)'
     26.7  00203B 00                   EVEN
                                  - 4e-LP430 -                        Page  149

     26.8  00203C                      IF      'DOCODE'='DOCODE'
     26.9  00203C ....         PARENVECWIPE: DW     $+2
     26.10 00203E                      ELSE
     26.11 00203E              PARENVECWIPE: DW      DOCODE
     26.12 00203E                      ENDIF
     26.13 00203E                      ENDM
     27    00203E              ;        DW lit,intseg,lit,1,FLERASE  ;geht so
                                nicht, ist geschützt
     28    00203E              ;        DW EXIT
     29    00203E 3640....             MOV #intseg,W
     30    002042 0212                 PUSH sr
     31    002044 32C2                 DINT                    ; Disable
                                                                interrupts
     32    002046 B24000A52C01         MOV #FWKEY,&FCTL3       ; Clear
                                                                LOCK
     33    00204C B24002A52801         MOV #FWKEY+ERASE,&FCTL1 ; Enable segment
                                                                erase
     34    002052 B6430000             MOV     #-1,0(W)        ; Dummy write in
                                                                segment to
                                                                erase
     35    002056 B24000A52801         MOV #FWKEY,&FCTL1       ; Done. Clear
                                                                erase
                                                                command.
     36    00205C B24010A52C01         MOV #FWKEY+LOCK,&FCTL3  ; Done, set
                                                                LOCK
     37    002062 32D2                 EINT                    ; Enable
                                                                interrupts
     38    002064 3241                 POP sr
     39    002066                      NEXT
     39.1  002066 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
     39.2  002068 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
     39.3  00206A                      ENDM
     40    00206A              
     41    00206A              
     42    00206A              ;U VECWIPE    --      erase ISR flash, set reset
                                vector = reset to boot 4e4th.
     43    00206A              ; (VECWIPE)  resetvector RESETADR VEC!
                                ;
     44    00206A                  HEADER  VECWIPE,7,'VECWIPE',DOCOLON
     44.1  000000                      PUBLIC  VECWIPE
     44.2  00206A ....                 DW      link
     44.3  00206C FF                   DB      0FFh       ; not immediate
     44.4  00206D              link    SET     $
     44.5  00206D 07                   DB      7
     44.6  00206E 564543574950*        DB      'VECWIPE'
     44.7  002075 00                   EVEN
     44.8  002076                      IF      'DOCOLON'='DOCODE'
     44.9  002076              VECWIPE: DW     $+2
     44.10 002076                      ELSE
     44.11 002076 ....         VECWIPE: DW      DOCOLON
     44.12 002078                      ENDIF
     44.13 002078                      ENDM
     45    002078 ....                 DW PARENVECWIPE
     46    00207A ............*        DW lit,reset,RESETADR,VECSTORE
     47    002082 ....                 DW EXIT
     48    002084                      
     49    002084              ;U VECSAVE    --      save all vectors to infoD 
                                mk
     50    002084              ;  InfoD $40 FLERASE   vecbot infoD $20 D->I
                                ;
     51    002084                  HEADER  VECSAVE,7,'VECSAVE',DOCOLON
     51.1  000000                      PUBLIC  VECSAVE
     51.2  002084 ....                 DW      link
     51.3  002086 FF                   DB      0FFh       ; not immediate
     51.4  002087              link    SET     $
     51.5  002087 07                   DB      7
     51.6  002088 564543534156*        DB      'VECSAVE'
     51.7  00208F 00                   EVEN
     51.8  002090                      IF      'DOCOLON'='DOCODE'
     51.9  002090              VECSAVE: DW     $+2
     51.10 002090                      ELSE
     51.11 002090 ....         VECSAVE: DW      DOCOLON
     51.12 002092                      ENDIF
     51.13 002092                      ENDM
     52    002092 ........4000*        DW INFOD,lit,0x40,FLERASE
     53    00209A ............*        DW VECBOT,INFOD,lit,0x20,DTOI 
                                  - 4e-LP430 -                        Page  150

     54    0020A4 ....                 DW EXIT
     55    0020A6              
     56    0020A6              ;U VECRESTORE   --    unconditional restore all
                                saved vectors.
     57    0020A6              ;  vecwipe    infoD vecbot $32 D->I ;
     58    0020A6                  HEADER  VECRESTORE,10,'VECRESTORE',DOCOLON
     58.1  000000                      PUBLIC  VECRESTORE
     58.2  0020A6 ....                 DW      link
     58.3  0020A8 FF                   DB      0FFh       ; not immediate
     58.4  0020A9              link    SET     $
     58.5  0020A9 0A                   DB      10
     58.6  0020AA 564543524553*        DB      'VECRESTORE'
     58.7  0020B4                      EVEN
     58.8  0020B4                      IF      'DOCOLON'='DOCODE'
     58.9  0020B4              VECRESTORE: DW     $+2
     58.10 0020B4                      ELSE
     58.11 0020B4 ....         VECRESTORE: DW      DOCOLON
     58.12 0020B6                      ENDIF
     58.13 0020B6                      ENDM
     59    0020B6 ....                 DW VECWIPE
     60    0020B8 ............*        DW INFOD,VECBOT,lit,0x1E,DTOI ; dont
                                            touch reset vector. 
     61    0020C2 ....                 DW EXIT
     62    0020C4              
     63    0020C4              /*
     64    0020C4              ;U VECBACK    --      write back of vectors:
                                dont overwrite newer ones.  
     65    0020C4              ;  $20 0 DO infoD i + @    vecbot i + @  $FFFF
                                =
     66    0020C4              ;  IF  vecbot i + vec! ELSE drop THEN  2 +LOOP
                                ;
     67    0020C4                  HEADER  VECBACK,7,'VECBACK',DOCOLON
     68    0020C4                      DW lit,0x20,ZERO,xdo 
     69    0020C4              vback1: DW INFOD,II,PLUS,FETCH
     70    0020C4                      DW VECBOT,II,PLUS,FETCH,lit,0xFFFF,EQUAL
     71    0020C4                      DW qbran
     72    0020C4                      DEST vback2
     73    0020C4                      DW VECBOT,II,PLUS,VECSTORE
     74    0020C4                      DW bran
     75    0020C4                      DEST vback3
     76    0020C4              vback2: DW DROP
     77    0020C4              vback3: DW lit,2,xplusloop
     78    0020C4                      DEST vback1
     79    0020C4                      DW EXIT
     80    0020C4              */
     81    0020C4              
     82    0020C4              ;U VECBACK    --      write back of vectors:
                                dont overwrite newer ones.  
     83    0020C4              ;  $20 0 DO  vecbot i + @ FFFF =
     84    0020C4              ;  IF  infoD i + @   vecbot i + vec! THEN  2
                                +LOOP ;
     85    0020C4                  HEADER  VECBACK,7,'VECBACK',DOCOLON
     85.1  000000                      PUBLIC  VECBACK
     85.2  0020C4 ....                 DW      link
     85.3  0020C6 FF                   DB      0FFh       ; not immediate
     85.4  0020C7              link    SET     $
     85.5  0020C7 07                   DB      7
     85.6  0020C8 564543424143*        DB      'VECBACK'
     85.7  0020CF 00                   EVEN
     85.8  0020D0                      IF      'DOCOLON'='DOCODE'
     85.9  0020D0              VECBACK: DW     $+2
     85.10 0020D0                      ELSE
     85.11 0020D0 ....         VECBACK: DW      DOCOLON
     85.12 0020D2                      ENDIF
     85.13 0020D2                      ENDM
     86    0020D2 ....2000....*        DW lit,0x20,ZERO,xdo 
     87    0020DA ............*vback1: DW VECBOT,II,PLUS,FETCH,lit,0xFFFF,EQUAL
     88    0020E8 ....                 DW qbran
     89    0020EA                      DEST vback2
     89.1  0020EA 1200                 DW      vback2-$
     89.2  0020EC                      ENDM
     90    0020EC ............*        DW INFOD,II,PLUS,FETCH
     91    0020F4 ............*        DW VECBOT,II,PLUS,VECSTORE
     92    0020FC ....0200.... vback2: DW lit,2,xplusloop
     93    002102                      DEST vback1
     93.1  002102 D8FF                 DW      vback1-$
     93.2  002104                      ENDM
     94    002104 ....                 DW EXIT
                                  - 4e-LP430 -                        Page  151

     95    002106              
     96    002106              ;U INTERRUPT  isr iv --      store ISR address
                                to interrupt vector address 
     97    002106              /* Store address of interrupt service routine to
                                interrupt vector address, 
     98    002106              keep all other vectors. ´This is a slow flash
                                operation. 
     99    002106              Saves all vectors to infoD, wipes vectors to
                                FFFF, 
    100    002106              writes iv and then writes back the other vector
                                values. */
    101    002106              ;    vecsave vecwipe vec! vecback ;
    102    002106                      HEADER  INTERRUPT,9,'INTERRUPT',DOCOLON
    102.1  000000                      PUBLIC  INTERRUPT
    102.2  002106 ....                 DW      link
    102.3  002108 FF                   DB      0FFh       ; not immediate
    102.4  002109              link    SET     $
    102.5  002109 09                   DB      9
    102.6  00210A 494E54455252*        DB      'INTERRUPT'
    102.7  002113 00                   EVEN
    102.8  002114                      IF      'DOCOLON'='DOCODE'
    102.9  002114              INTERRUPT: DW     $+2
    102.10 002114                      ELSE
    102.11 002114 ....         INTERRUPT: DW      DOCOLON
    102.12 002116                      ENDIF
    102.13 002116                      ENDM
    103    002116 ............*        DW VECSAVE,VECWIPE,VECSTORE,VECBACK
    104    00211E ....                 DW EXIT 
    105    002120              
    106    002120              
    107    002120              ; finis
     70    002120              #include "4e-LaunchPad.s43"
      1    002120              ; ----------------------------------------------
                               ------------------------
      2    002120              ; 4e4th is a Forth based on CamelForth
                                
      3    002120              ; for the Texas Instruments MSP430 
      4    002120              ; 
      5    002120              ; This program is free software; you can
                                redistribute it and/or modify
      6    002120              ; it under the terms of the GNU General Public
                                License as published by
      7    002120              ; the Free Software Foundation; either version 3
                                of the License, or
      8    002120              ; (at your option) any later version.
      9    002120              ; 
     10    002120              ; This program is distributed in the hope that
                                it will be useful,
     11    002120              ; but WITHOUT ANY WARRANTY; without even the
                                implied warranty of
     12    002120              ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
                                PURPOSE.  See the
     13    002120              ; GNU General Public License for more details.
     14    002120              ;
     15    002120              ; You should have received a copy of the GNU
                                General Public License
     16    002120              ; along with this program.  If not, see
                                <http://www.gnu.org/licenses/>.
     17    002120              ; 
     18    002120              ; See LICENSE TERMS in Brads file readme.txt as
                                well.
     19    002120              
     20    002120              ; ----------------------------------------------
                               ------------------------
     21    002120              ; 4e-LaunchPad.s43 - LaunchPad Suporting Words -
                                MSP430G2553 
     22    002120              ; ----------------------------------------------
                               ------------------------
     23    002120              
     24    002120              
     25    002120              ;U PORTS ---------------------------------------
                               ------------------------
     26    002120              
     27    002120              ; TI document SLAU144I - December 2004 - Revised
                                January 2012 
     28    002120              ; The digital I/O registers are listed in Table
                                8-2. 
     29    002120              
                                  - 4e-LP430 -                        Page  152

     30    002120              ;U \ P1in = $20
     31    002120              ;U \ P1out = $21
     32    002120              ;U \ P1dir = $22
     33    002120              
     34    002120              ;U \ P2in = $28
     35    002120              ;U \ P2out = $29
     36    002120              ;U \ P2dir = $2A
     37    002120              
     38    002120              ;U \ LED - portpinX->---resistor---LED---GND
     39    002120              ;U \ P1.0 - red LED
     40    002120              ;U \ P1.6 - green LED
     41    002120              
     42    002120              ;U RED      -- mask port         red LED mask
                                and port address
     43    002120                  HEADER red,3,'RED',DOTWOCON
     43.1  000000                      PUBLIC  red
     43.2  002120 ....                 DW      link
     43.3  002122 FF                   DB      0FFh       ; not immediate
     43.4  002123              link    SET     $
     43.5  002123 03                   DB      3
     43.6  002124 524544               DB      'RED'
     43.7  002127 00                   EVEN
     43.8  002128                      IF      'DOTWOCON'='DOCODE'
     43.9  002128              red: DW     $+2
     43.10 002128                      ELSE
     43.11 002128 ....         red: DW      DOTWOCON
     43.12 00212A                      ENDIF
     43.13 00212A                      ENDM
     44    00212A 2100                   DW P1OUT
     45    00212C 0100                   DW 00000001b
     46    00212E              
     47    00212E              ;U GREEN     -- mask port        green LED mask
                                and port address
     48    00212E                  HEADER green,5,'GREEN',DOTWOCON
     48.1  000000                      PUBLIC  green
     48.2  00212E ....                 DW      link
     48.3  002130 FF                   DB      0FFh       ; not immediate
     48.4  002131              link    SET     $
     48.5  002131 05                   DB      5
     48.6  002132 475245454E           DB      'GREEN'
     48.7  002137 00                   EVEN
     48.8  002138                      IF      'DOTWOCON'='DOCODE'
     48.9  002138              green: DW     $+2
     48.10 002138                      ELSE
     48.11 002138 ....         green: DW      DOTWOCON
     48.12 00213A                      ENDIF
     48.13 00213A                      ENDM
     49    00213A 2100               DW P1OUT
     50    00213C 4000               DW 01000000b
     51    00213E              
     52    00213E              ;U \ Switch S2
     53    00213E              ;U portpin P1.3 --->0_0----GND
     54    00213E              ;U S2        -- mask port        second button
                                mask and port address
     55    00213E                  HEADER S2,2,'S2',DOTWOCON
     55.1  000000                      PUBLIC  S2
     55.2  00213E ....                 DW      link
     55.3  002140 FF                   DB      0FFh       ; not immediate
     55.4  002141              link    SET     $
     55.5  002141 02                   DB      2
     55.6  002142 5332                 DB      'S2'
     55.7  002144                      EVEN
     55.8  002144                      IF      'DOTWOCON'='DOCODE'
     55.9  002144              S2: DW     $+2
     55.10 002144                      ELSE
     55.11 002144 ....         S2: DW      DOTWOCON
     55.12 002146                      ENDIF
     55.13 002146                      ENDM
     56    002146 2000               DW P1IN
     57    002148 0800               DW 00001000b
     58    00214A              
     59    00214A              ;U S2?     -- f    test button S2, true is
                                pressed 
     60    00214A                  HEADER SQEST,3,'S2?',DOCOLON
     60.1  000000                      PUBLIC  SQEST
     60.2  00214A ....                 DW      link
     60.3  00214C FF                   DB      0FFh       ; not immediate
     60.4  00214D              link    SET     $
                                  - 4e-LP430 -                        Page  153

     60.5  00214D 03                   DB      3
     60.6  00214E 53323F               DB      'S2?'
     60.7  002151 00                   EVEN
     60.8  002152                      IF      'DOCOLON'='DOCODE'
     60.9  002152              SQEST: DW     $+2
     60.10 002152                      ELSE
     60.11 002152 ....         SQEST: DW      DOCOLON
     60.12 002154                      ENDIF
     60.13 002154                      ENDM
     61    002154 ............*        DW S2, cget, ZEROEQUAL, EXIT
     62    00215C              
     63    00215C              ; ----------------------------------------------
                               ------------------------
     71    00215C              #include "4e-onewire.s43"
      1    00215C              ;****h* 4e4th/4e-onewire
      2    00215C              ; NAME
      3    00215C              ;   4e-onewire
      4    00215C              ; SYNOPSIS
      5    00215C              ;   Dallas 1-wire drivers for 4e4th/CamelForth.
      6    00215C              ; DESCRIPTION
      7    00215C              ;   These are "bit-banging" 1-wire drivers for
                                the MSP430G2553
      8    00215C              ;   MCU installed on a TI Launchpad board.
      9    00215C              ;   Currently configured to use P2.3, with
                                MCLK=8 MHz.
     10    00215C              ; NOTES
     11    00215C              ;   4e4th configures MCLK = DCOCLK = 8 MHz (see
                                4e-init430G2553.s43).
     12    00215C              ;   Launchpad I/O pin usage:
     13    00215C              ;       P1.0 - LED1 output
     14    00215C              ;       P1.1 - UART
     15    00215C              ;       P1.2 - UART
     16    00215C              ;       P1.3 - SW2 input (internal pullup
                                enabled)
     17    00215C              ;       P1.4 - output (configured by 4e4th)
     18    00215C              ;       P1.5 - output (configured by 4e4th)
     19    00215C              ;       P2.0
     20    00215C              ;       P2.1
     21    00215C              ;       P2.2
     22    00215C              ;       P2.3 - 1-wire I/O
     23    00215C              ;       P2.4
     24    00215C              ;       P2.5
     25    00215C              ;       P1.6 - LED2 output
     26    00215C              ;       P1.7
     27    00215C              ;   MSP430G2553 pins are capable of sourcing or
                                sinking 6 mA.
     28    00215C              ;   Internal pullup resistor is 20-50 Kohm, typ.
                                35 Kohm, which
     29    00215C              ;   is too high, so an external pullup resistor
                                is required.
     30    00215C              ;   Dallas DS18B20 data sheet suggests 4.7 Kohm
                                pullup resistor.
     31    00215C              ;   Dallas App Note 132 suggests 1.1 Kohm pullup
                                resistor.
     32    00215C              ;   Either external pullup is within limits for
                                drive current.
     33    00215C              ;
     34    00215C              ;   Note that the MSP430 does not have
                                open-drain outputs.
     35    00215C              ;   To simulate open-drain, a "0" is written to
                                the pin's output 
     36    00215C              ;   register.  When a "1" is written to the
                                pin's direction register,
     37    00215C              ;   the output is enabled and "0" is output. 
                                When a "0" is written
     38    00215C              ;   to the direction register, the input is
                                enabled and the pin is
     39    00215C              ;   Hi-Z (equivalent to an open-drain "1"
                                output). 
     40    00215C              ; HISTORY
     41    00215C              ;   23 nov 12 bjr - Changed to use P2.3 for
                                1-wire I/O.
     42    00215C              ;   19 nov 12 bjr - Refactored code to make
                                OWSLOT primitive instead
     43    00215C              ;                   of OWTOUCH.
     44    00215C              ;   23 oct 12 bjr - Created.
     45    00215C              ; AUTHOR
     46    00215C              ;   B. J. Rodriguez
                                  - 4e-LP430 -                        Page  154

     47    00215C              ; COPYRIGHT
     48    00215C              ;   (c) 2012 Bradford J. Rodriguez.
     49    00215C              ; 
     50    00215C              ;   This program is free software; you can
                                redistribute it and/or modify
     51    00215C              ;   it under the terms of the GNU General Public
                                License as published by
     52    00215C              ;   the Free Software Foundation; either version
                                3 of the License, or
     53    00215C              ;   (at your option) any later version.
     54    00215C              ;
     55    00215C              ;   This program is distributed in the hope that
                                it will be useful,
     56    00215C              ;   but WITHOUT ANY WARRANTY; without even the
                                implied warranty of
     57    00215C              ;   MERCHANTABILITY or FITNESS FOR A PARTICULAR
                                PURPOSE.  See the
     58    00215C              ;   GNU General Public License for more
                                details.
     59    00215C              ;
     60    00215C              ;   You should have received a copy of the GNU
                                General Public License
     61    00215C              ;   along with this program.  If not, see
                                <http://www.gnu.org/licenses/>.
     62    00215C              ;
     63    00215C              ;   Commercial inquiries should be directed to
                                the author at 
     64    00215C              ;   115 First St., #105, Collingwood, Ontario
                                L9Y 4W3 Canada
     65    00215C              ;   or via email to bj@camelforth.com
     66    00215C              ;******
     67    00215C              
     68    00215C              ; define port registers and pin to be used for
                                1-wire (P2.3)
     69    00215C              #define OWIN    P2IN
     70    00215C              #define OWOUT   P2OUT
     71    00215C              #define OWDIR   P2DIR
     72    00215C              #define OWREN   P2REN
     73    00215C              #define OWBIT   BIT3
     74    00215C              
     75    00215C              ; define MCLK frequency in MHz.
     76    000008              MCLK    EQU     8
     77    00215C              
     78    00215C              ; Define a software delay of N usec for our MCLK
                                freq (8 MHz)
     79    00215C              ; Uses scratch register X.
     80    00215C              ; Note that due to truncation, may delay as many
                                as 2 MCLK cycles
     81    00215C              ; short of the specified period.  For 1-wire
                                code this is ok,
     82    00215C              ; since we always have other instructions using
                                at least 2 cycles.
     83    00215C              
     90    00215C              
     91    00215C                  
     92    00215C              ;****f* 4e-onewire/OWRESET
     93    00215C              ; NAME
     94    00215C              ;   OWRESET
     95    00215C              ; SYNOPSIS
     96    00215C              ;   OWRESET ( -- f )  Initialize 1-wire devices;
                                return true if present
     97    00215C              ; DESCRIPTION
     98    00215C              ;   This configures the port pin used by the
                                1-wire interface, and then
     99    00215C              ;   sends an "initialize" sequence to the 1-wire
                                devices.  If any device
    100    00215C              ;   is present, it will be detected.
    101    00215C              ;
    102    00215C              ;   Timing, per DS18B20 data sheet:
    103    00215C              ;   a) Output "0" (drive output low) for >480
                                usec.
    104    00215C              ;   b) Output "1" (let output float).
    105    00215C              ;   c) After 15 to 60 usec, device will drive
                                pin low for 60 to 240 usec.
    106    00215C              ;      So, wait 75 usec and sample input.
    107    00215C              ;   d) Leave output high (floating) for at least
                                480 usec.
    108    00215C              ;******
                                  - 4e-LP430 -                        Page  155

    109    00215C              
    110    00215C                      HEADER  OWRESET,7,'OWRESET',DOCODE
    110.1  000000                      PUBLIC  OWRESET
    110.2  00215C ....                 DW      link
    110.3  00215E FF                   DB      0FFh       ; not immediate
    110.4  00215F              link    SET     $
    110.5  00215F 07                   DB      7
    110.6  002160 4F5752455345*        DB      'OWRESET'
    110.7  002167 00                   EVEN
    110.8  002168                      IF      'DOCODE'='DOCODE'
    110.9  002168 ....         OWRESET: DW     $+2
    110.10 00216A                      ELSE
    110.11 00216A              OWRESET: DW      DOCODE
    110.12 00216A                      ENDIF
    110.13 00216A                      ENDM
    111    00216A              
    112    00216A                      ; push old TOS onto stack
    113    00216A 2483                 SUB    #2,PSP           ; 1 
    114    00216C 84470000             MOV     TOS,0(PSP)      ; 4 
    115    002170                      
    116    002170                      ; preclear result in TOS
    117    002170 0743                 MOV     #0,TOS
    118    002172              
    119    002172                      ; initialize the pin used for the
                                1-wire.
    120    002172 F0C2....             BIC.B   #OWBIT,OWDIR    ; make pin an
                                                                input
    121    002176 F0C2....             BIC.B   #OWBIT,OWOUT    ; make output
                                                                bit a
                                                                "0"
    122    00217A F0C2....             BIC.B   #OWBIT,OWREN    ; disable
                                                                internal
                                                                pullup
    123    00217E              
    124    00217E                      ; Delay >480 usec in case output pin had
                                been low
    125    00217E                      DELAY   500
    125.1  00217E                      LOCAL   loop
    125.2  00217E 3A403405             MOV     #(((500*MCLK)-2)/3),X  ;
                                                    2
    125.3  002182 1A83         loop:   SUB     #1,X                    ; 1n
                                                                        
    125.4  002184 FE23                 JNZ     loop                    ; 2n
                                                                        
    125.5  002186                      ENDM
    126    002186                      
    127    002186                      ; Pull output low
    128    002186 F0D2....             BIS.B   #OWBIT,OWDIR    ; make pin
                                                                output, sends
                                                                "0"
    129    00218A              
    130    00218A                      ; Delay >480 usec        
    131    00218A                      DELAY   500
    131.1  00218A                      LOCAL   loop
    131.2  00218A 3A403405             MOV     #(((500*MCLK)-2)/3),X  ;
                                                    2
    131.3  00218E 1A83         loop:   SUB     #1,X                    ; 1n
                                                                        
    131.4  002190 FE23                 JNZ     loop                    ; 2n
                                                                        
    131.5  002192                      ENDM
    132    002192                      
    133    002192                      ; Critical timing period, disable
                                interrupts.
    134    002192 32C2                 BIC     #8,SR           ; clear GIE
                                                                bit
    135    002194              
    136    002194                      ; Pull output high
    137    002194 F0C2....             BIC.B   #OWBIT,OWDIR    ; make pin
                                                                input, sends
                                                                "1"
    138    002198              
    139    002198                      ; Delay 75 usec
    140    002198                      DELAY   75
    140.1  002198                      LOCAL   loop
    140.2  002198 3A40C700             MOV     #(((75*MCLK)-2)/3),X  ;
                                                   2
    140.3  00219C 1A83         loop:   SUB     #1,X                    ; 1n
                                  - 4e-LP430 -                        Page  156

                                                   
    140.4  00219E FE23                 JNZ     loop                    ; 2n
                                                   
    140.5  0021A0                      ENDM
    141    0021A0                      
    142    0021A0                      ; Sample input pin, set TOS if input is
                                zero
    143    0021A0 F0B2....             BIT.B   #OWBIT,OWIN
    144    0021A4 0120                 JNZ     OWNONE
    145    0021A6 3743                 MOV     #-1,TOS         ; if input zero,
                                                                an 1-wire is
                                                                present
    146    0021A8              OWNONE:
    147    0021A8                      ; End critical timing period, enable
                                interrupts
    148    0021A8 32D2                 BIS     #8,SR           ; set GIE
                                                                bit
    149    0021AA                      
    150    0021AA                      ; Delay rest of 480 usec (we've already
                                delayed 75 usec)
    151    0021AA                      DELAY   405
    151.1  0021AA                      LOCAL   loop
    151.2  0021AA 3A403704             MOV     #(((405*MCLK)-2)/3),X  ;
                                                    2
    151.3  0021AE 1A83         loop:   SUB     #1,X                    ; 1n
                                                                        
    151.4  0021B0 FE23                 JNZ     loop                    ; 2n
                                                                        
    151.5  0021B2                      ENDM
    152    0021B2              
    153    0021B2                      ; we now have the result flag in TOS    
                                   
    154    0021B2                      NEXT
    154.1  0021B2 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    154.2  0021B4 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    154.3  0021B6                      ENDM
    155    0021B6              
    156    0021B6              ;****f* 4e-onewire/OWSLOT
    157    0021B6              ; NAME
    158    0021B6              ;   OWSLOT
    159    0021B6              ; SYNOPSIS
    160    0021B6              ;   OWSLOT ( c -- c' ) Write and read one bit
                                to/from 1-wire.
    161    0021B6              ; DESCRIPTION
    162    0021B6              ;   The "touch byte" function is described in
                                Dallas App Note 74.
    163    0021B6              ;   It outputs a byte to the 1-wire pin, LSB
                                first, and reads back
    164    0021B6              ;   the state of the 1-wire pin after a suitable
                                delay.
    165    0021B6              ;   To read a byte, output $FF and read the
                                reply data.
    166    0021B6              ;   To write a byte, output that byte and
                                discard the reply.
    167    0021B6              ;
    168    0021B6              ;   This function performs one bit of the
                                "touch" operation --
    169    0021B6              ;   one read/write "slot" in Dallas jargon. 
                                Perform this eight
    170    0021B6              ;   times in a row to get the "touch byte"
                                function.
    171    0021B6              ;
    172    0021B6              ; PARAMETERS
    173    0021B6              ;   The input parameter is xxxxxxxxbbbbbbbo
                                where
    174    0021B6              ;   'xxxxxxxx' are don't cares,
    175    0021B6              ;   'bbbbbbb' are bits to be shifted down,
                                and
    176    0021B6              ;   'o' is the bit to be output in the slot. 
                                This must be 1
    177    0021B6              ;   to create a read slot.
    178    0021B6              ;
    179    0021B6              ;   The returned value is xxxxxxxxibbbbbbb
                                where
    180    0021B6              ;   'xxxxxxxx' are not known (the input shifted
                                down 1 position),
                                  - 4e-LP430 -                        Page  157

    181    0021B6              ;   'i' is the bit read during the slot.  This
                                has no meaning
    182    0021B6              ;   if it was a write slot.
    183    0021B6              ;   'bbbbbbb' are the 7 input bits, shifted down
                                one position.
    184    0021B6              ;
    185    0021B6              ;   This peculiar parameter usage allows OWTOUCH
                                to be written as
    186    0021B6              ;     OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT
                                OWSLOT OWSLOT 
    187    0021B6              ;
    188    0021B6              ; NOTES 
    189    0021B6              ;   Interrupts are disabled during each
                                bit.
    190    0021B6              
    191    0021B6              ;   Timing, per DS18B20 data sheet:
    192    0021B6              ;   a) Output "0" for start period.  (> 1 us, <
                                15 us, typ. 6 us*)
    193    0021B6              ;   b) Output data bit (0 or 1), open drain
                                
    194    0021B6              ;   c) After MS from start of cycle, sample
                                input (15 to 60 us, typ. 25 us*)
    195    0021B6              ;   d) After write-0 period from start of cycle,
                                output "1" (>60 us)
    196    0021B6              ;   e) After recovery period, loop or return. (>
                                1 us)
    197    0021B6              ;   For writes, DS18B20 samples input 15 to 60
                                usec from start of cycle.
    198    0021B6              ;   * "Typical" values are per App Note 132 for
                                a 300m cable length.
    199    0021B6              
    200    0021B6              ;   ---------        ---------------------------
                               ----
    201    0021B6              ;            \      /                       
                                /
    202    0021B6              ;             -------------------------------
                                
    203    0021B6              ;            a      b          c             d  
                                  e
    204    0021B6              ;            |  6us |   19us   |    35us     |
                                2us |
    205    0021B6              ;******
    206    0021B6              
    207    0021B6                      HEADER  OWSLOT,6,'OWSLOT',DOCODE
    207.1  000000                      PUBLIC  OWSLOT
    207.2  0021B6 ....                 DW      link
    207.3  0021B8 FF                   DB      0FFh       ; not immediate
    207.4  0021B9              link    SET     $
    207.5  0021B9 06                   DB      6
    207.6  0021BA 4F57534C4F54         DB      'OWSLOT'
    207.7  0021C0                      EVEN
    207.8  0021C0                      IF      'DOCODE'='DOCODE'
    207.9  0021C0 ....         OWSLOT: DW     $+2
    207.10 0021C2                      ELSE
    207.11 0021C2              OWSLOT: DW      DOCODE
    207.12 0021C2                      ENDIF
    207.13 0021C2                      ENDM
    208    0021C2              
    209    0021C2 37C00001             BIC     #0x100,TOS      ; preclear
                                                                result bit in
                                                                TOS
    210    0021C6              
    211    0021C6                      ; disable interrupts
    212    0021C6 32C2                 BIC     #8,SR           ; clear GIE
                                                                bit
    213    0021C8                      
    214    0021C8                      ; output a "0"
    215    0021C8 F0D2....             BIS.B   #OWBIT,OWDIR    ; make pin
                                                                output, sends
                                                                "0"
    216    0021CC F0C2....             BIC.B   #OWBIT,OWOUT    ; just in case,
                                                                ensure 0 is
                                                                output
    217    0021D0                      
    218    0021D0                      ; delay 6 usec
    219    0021D0                      DELAY   6
    219.1  0021D0                      LOCAL   loop
    219.2  0021D0 3A400F00             MOV     #(((6*MCLK)-2)/3),X  ;
                                  - 4e-LP430 -                        Page  158

                                                                     2
    219.3  0021D4 1A83         loop:   SUB     #1,X                    ; 1n
                                                  
    219.4  0021D6 FE23                 JNZ     loop                    ; 2n
                                                  
    219.5  0021D8                      ENDM
    220    0021D8                      
    221    0021D8                      ; output the LSB (no action required if
                                LSB=0)
    222    0021D8 17B3                 BIT     #1,TOS
    223    0021DA 0224                 JZ      OWSEND0
    224    0021DC F0C2....             BIC.B   #OWBIT,OWDIR    ; make pin
                                                                input, sends
                                                                "1"
    225    0021E0              OWSEND0:        
    226    0021E0                      
    227    0021E0                      ; delay 19 usec
    228    0021E0                      DELAY   19
    228.1  0021E0                      LOCAL   loop
    228.2  0021E0 3A403200             MOV     #(((19*MCLK)-2)/3),X  ;
                                                   2
    228.3  0021E4 1A83         loop:   SUB     #1,X                    ; 1n
                                                   
    228.4  0021E6 FE23                 JNZ     loop                    ; 2n
                                                   
    228.5  0021E8                      ENDM
    229    0021E8                      
    230    0021E8                      ; sample the input (no action required
                                if zero)
    231    0021E8 F0B2....             BIT.B   #OWBIT,OWIN
    232    0021EC 0224                 JZ      OWRECV0
    233    0021EE 37D00001             BIS     #0x100,TOS      ; if input=1,
                                                                store 1 in high
                                                                TOS
    234    0021F2 0711         OWRECV0: RRA    TOS             ; shift TOS down
                                                                1 bit
    235    0021F4                      
    236    0021F4                      ; delay 35 usec
    237    0021F4                      DELAY   35
    237.1  0021F4                      LOCAL   loop
    237.2  0021F4 3A405C00             MOV     #(((35*MCLK)-2)/3),X  ;
                                                   2
    237.3  0021F8 1A83         loop:   SUB     #1,X                    ; 1n
                                                   
    237.4  0021FA FE23                 JNZ     loop                    ; 2n
                                                   
    237.5  0021FC                      ENDM
    238    0021FC                      
    239    0021FC                      ; output a "1"
    240    0021FC F0C2....             BIC.B   #OWBIT,OWDIR    ; make pin input
                                                                = Hi-Z
    241    002200                      
    242    002200                      ; enable interrupts
    243    002200 32D2                 BIS     #8,SR           ; set GIE
                                                                bit
    244    002202                      
    245    002202                      ; delay 2 usec
    246    002202                      DELAY   2
    246.1  002202                      LOCAL   loop
    246.2  002202 2A42                 MOV     #(((2*MCLK)-2)/3),X  ;
                                                                     2
    246.3  002204 1A83         loop:   SUB     #1,X                    ; 1n
                                                  
    246.4  002206 FE23                 JNZ     loop                    ; 2n
                                                  
    246.5  002208                      ENDM
    247    002208                      
    248    002208                      ; note that NEXT will take 0.5 usec (4
                                clocks)
    249    002208                      ; we now have the received bit in the
                                0x80 bit of TOS.
    250    002208                      NEXT
    250.1  002208 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
    250.2  00220A 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
    250.3  00220C                      ENDM
     72    00220C              #include "4e-LPM.s43"
                                  - 4e-LP430 -                        Page  159

      1    00220C              ; setup a sleep function.
      2    00220C              
      3    00220C              /***********************************************
                               *************
      4    00220C              * Interrupt Vectors (offset from 0xFFE0)
      5    00220C              
      6    00220C              #define PORT1_VECTOR        (2 * 2u)  0xFFE4
                                Port 1 
      7    00220C              #define PORT2_VECTOR        (3 * 2u)  0xFFE6
                                Port 2 
      8    00220C              #define ADC10_VECTOR        (5 * 2u)  0xFFEA
                                ADC10 
      9    00220C              #define USCIAB0TX_VECTOR    (6 * 2u)  0xFFEC
                                USCI A0/B0 Transmit 
     10    00220C              #define USCIAB0RX_VECTOR    (7 * 2u)  0xFFEE
                                USCI A0/B0 Receive 
     11    00220C              #define TIMER0_A1_VECTOR    (8 * 2u)  0xFFF0
                                Timer0)A CC1, TA0 
     12    00220C              #define TIMER0_A0_VECTOR    (9 * 2u)  0xFFF2
                                Timer0_A CC0 
     13    00220C              #define WDT_VECTOR          (10 * 2u) 0xFFF4
                                Watchdog Timer 
     14    00220C              #define COMPARATORA_VECTOR  (11 * 2u) 0xFFF6
                                Comparator A 
     15    00220C              #define TIMER1_A1_VECTOR    (12 * 2u) 0xFFF8
                                Timer1_A CC1-4, TA1 
     16    00220C              #define TIMER1_A0_VECTOR    (13 * 2u) 0xFFFA
                                Timer1_A CC0 
     17    00220C              #define NMI_VECTOR          (14 * 2u) 0xFFFC
                                Non-maskable 
     18    00220C              #define RESET_VECTOR        (15 * 2u) 0xFFFE
                                Reset [Highest Priority] 
     19    00220C              
     20    00220C              services:
     21    00220C              - UCA0 interupt enable.
     22    00220C              - Activate LPM4 mode. 
     23    00220C              - UCA0 ISR disables lpm4 mode.
     24    00220C              - UCA0 interupt disable.
     25    00220C              
     26    00220C              ************************************************
                               ***************/
     27    00220C              
     28    00220C              ;C IRXON    --             turn UCA0 interrupt
                                on
     29    00220C                  HEADER IRXON,5,'IRXON',DOCODE
     29.1  000000                      PUBLIC  IRXON
     29.2  00220C ....                 DW      link
     29.3  00220E FF                   DB      0FFh       ; not immediate
     29.4  00220F              link    SET     $
     29.5  00220F 05                   DB      5
     29.6  002210 4952584F4E           DB      'IRXON'
     29.7  002215 00                   EVEN
     29.8  002216                      IF      'DOCODE'='DOCODE'
     29.9  002216 ....         IRXON: DW     $+2
     29.10 002218                      ELSE
     29.11 002218              IRXON: DW      DOCODE
     29.12 002218                      ENDIF
     29.13 002218                      ENDM
     30    002218 D0D3....            BIS.B #UCA0RXIE,IE2
     31    00221C                     NEXT
     31.1  00221C 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
     31.2  00221E 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
     31.3  002220                      ENDM
     32    002220              
     33    002220              ;C IRXOFF    --             turn UCA0 interrupt
                                off
     34    002220                  HEADER IRXOFF,6,'IRXOFF',DOCODE
     34.1  000000                      PUBLIC  IRXOFF
     34.2  002220 ....                 DW      link
     34.3  002222 FF                   DB      0FFh       ; not immediate
     34.4  002223              link    SET     $
     34.5  002223 06                   DB      6
     34.6  002224 4952584F4646         DB      'IRXOFF'
     34.7  00222A                      EVEN
     34.8  00222A                      IF      'DOCODE'='DOCODE'
     34.9  00222A ....         IRXOFF: DW     $+2
                                  - 4e-LP430 -                        Page  160

     34.10 00222C                      ELSE
     34.11 00222C              IRXOFF: DW      DOCODE
     34.12 00222C                      ENDIF
     34.13 00222C                      ENDM
     35    00222C D0C3....            BIC.B #UCA0RXIE,IE2
     36    002230                     NEXT
     36.1  002230 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
     36.2  002232 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
     36.3  002234                      ENDM
     37    002234              
     38    002234              ;C LPM_WAKE    -- adr        LPM wake up
                                interrupt service routine address
     39    002234              ;  turns off LPM mode.
     40    002234                  HEADER LPM_WAKE,8,'LPM_WAKE',DOCON
     40.1  000000                      PUBLIC  LPM_WAKE
     40.2  002234 ....                 DW      link
     40.3  002236 FF                   DB      0FFh       ; not immediate
     40.4  002237              link    SET     $
     40.5  002237 08                   DB      8
     40.6  002238 4C504D5F5741*        DB      'LPM_WAKE'
     40.7  002240                      EVEN
     40.8  002240                      IF      'DOCON'='DOCODE'
     40.9  002240              LPM_WAKE: DW     $+2
     40.10 002240                      ELSE
     40.11 002240 ....         LPM_WAKE: DW      DOCON
     40.12 002242                      ENDIF
     40.13 002242                      ENDM
     41    002242 ....                DW lpm_wake
     42    002244              lpm_wake:
     43    002244                      ; BIS.B #BIT0,&021h      ; red LED
                                on
     44    002244 B1C0F8000000         BIC #(GIE+LPM4),0(RSP) ; clear SR on
                                                               return stack -
                                                               turn CPU on.    
                                                                  
     45    00224A 0013                 RETI
     46    00224C              
     47    00224C              ;Z LPM4      --           ; Enter low power mode
                                4, wake on interrupt.
     48    00224C                   HEADER setlpm4,4,'LPM4',DOCODE
     48.1  000000                      PUBLIC  setlpm4
     48.2  00224C ....                 DW      link
     48.3  00224E FF                   DB      0FFh       ; not immediate
     48.4  00224F              link    SET     $
     48.5  00224F 04                   DB      4
     48.6  002250 4C504D34             DB      'LPM4'
     48.7  002254                      EVEN
     48.8  002254                      IF      'DOCODE'='DOCODE'
     48.9  002254 ....         setlpm4: DW     $+2
     48.10 002256                      ELSE
     48.11 002256              setlpm4: DW      DOCODE
     48.12 002256                      ENDIF
     48.13 002256                      ENDM
     49    002256                       ; BIC.B #BIT0,&021h    ; red LED
                                off
     50    002256 0212                  PUSH SR
     51    002258 32D0F800              BIS #(GIE+LPM4),SR   ; CPU stops
                                                              here
     52    00225C 3241                  POP SR
     53    00225E                       ; DINT
     54    00225E                       ; BIS.B #BIT0,&021h    ; red LED
                                on
     55    00225E                       NEXT
     55.1  00225E 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
     55.2  002260 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
     55.3  002262                      ENDM
     56    002262              
     57    002262              ;Z LPM0      --           ; Enter low power mode
                                0, wake on interrupt.
     58    002262                   HEADER setlpm0,4,'LPM0',DOCODE
     58.1  000000                      PUBLIC  setlpm0
     58.2  002262 ....                 DW      link
     58.3  002264 FF                   DB      0FFh       ; not immediate
     58.4  002265              link    SET     $
                                  - 4e-LP430 -                        Page  161

     58.5  002265 04                   DB      4
     58.6  002266 4C504D30             DB      'LPM0'
     58.7  00226A                      EVEN
     58.8  00226A                      IF      'DOCODE'='DOCODE'
     58.9  00226A ....         setlpm0: DW     $+2
     58.10 00226C                      ELSE
     58.11 00226C              setlpm0: DW      DOCODE
     58.12 00226C                      ENDIF
     58.13 00226C                      ENDM
     59    00226C                       ; BIC.B #BIT0,&021h    ; red LED
                                off
     60    00226C 0212                  PUSH SR
     61    00226E 32D01800              BIS #(GIE+LPM0),SR   ; CPU stops
                                                              here
     62    002272 3241                  POP SR
     63    002274                       ; DINT
     64    002274                       ; BIS.B #BIT0,&021h    ; red LED
                                on
     65    002274                       NEXT
     65.1  002274 3645                 MOV @IP+,W     // ; fetch word address
                                                          into W
     65.2  002276 3046                 MOV @W+,PC     // ; fetch code address
                                                          into PC, W=PFA
     65.3  002278                      ENDM
     66    002278              
     67    002278              ;Z SETIRX  --            set IRX vector to wakr
                                up MCU  
     68    002278              ;    lpm_wake-isr_rx FFEE interrrupt ;
     69    002278                   HEADER SETIRX,6,'SETIRX',DOCOLON
     69.1  000000                      PUBLIC  SETIRX
     69.2  002278 ....                 DW      link
     69.3  00227A FF                   DB      0FFh       ; not immediate
     69.4  00227B              link    SET     $
     69.5  00227B 06                   DB      6
     69.6  00227C 534554495258         DB      'SETIRX'
     69.7  002282                      EVEN
     69.8  002282                      IF      'DOCOLON'='DOCODE'
     69.9  002282              SETIRX: DW     $+2
     69.10 002282                      ELSE
     69.11 002282 ....         SETIRX: DW      DOCOLON
     69.12 002284                      ENDIF
     69.13 002284                      ENDM
     70    002284 ............*         DW LPM_WAKE,lit,(intvecs+USCIAB0RX_VECT
                                            OR),INTERRUPT
     71    00228C ....                  DW EXIT
     72    00228E                       
     73    00228E              
     74    00228E              /***********************************************
                               ***************
     75    00228E              ;Z IE2    --  adr     Interrupt enable register
                                for UCA0
     76    00228E                   HEADER IE2CON,3,'IE2',DOCON
     77    00228E                       DW IE2
     78    00228E                       
     79    00228E              ;Z UCA0RXIE    -- adr      Interrupt mask
                                UCA0
     80    00228E                   HEADER UCA0RXIEmask,8,'UCA0RXIE',DOCON
     81    00228E                       DW UCA0RXIE
     82    00228E              ************************************************
                               ***************/
     83    00228E              
     84    00228E              ; finis
     73    00228E              ;   #include "4e-WAS430G2553.s43"
     74    00228E              
     75    00228E              
     76    00228E              /*
     77    00228E              ; DEBUG FORTH EXECUTION 
     78    00228E              ; debug serieal
     79    00228E                PUBLIC DEBUGIP
     80    00228E              DEBUGIP: 
     81    00228E              ;  DW  DOTID
     82    00228E              DEBUG1: 
     83    00228E              ;   DW TASK
     84    00228E                 DW  KEY  ; 1@A0 test 1=rot,@=grün,A=beide,0=a
                               us
     85    00228E                 DW  DUP  ;,DOTS,CR
     86    00228E                 DW  STORELEDS
     87    00228E              ;   DW  COLD
                                  - 4e-LP430 -                        Page  162

     88    00228E                 DW  EMIT 
     89    00228E                 DW  lit,0,qbran
     90    00228E                 DW  DEBUG1-$
     91    00228E                 DW  bran,-2
     92    00228E              
     93    00228E              /*
     94    00228E              ; debugging only
     95    00228E                HEADLESS CREATE,DOCOLON
     96    00228E                HEADLESS ALLOT,DOCOLON
     97    00228E                HEADLESS BUILDS,DOCOLON
     98    00228E                HEADLESS ICOMMA,DOCOLON
     99    00228E                HEADLESS XDOES,DOCOLON
    100    00228E                HEADLESS IHERE,DOCOLON
    101    00228E                HEADLESS IALLOT,DOCOLON
    102    00228E                HEADLESS CELL,DOCOLON
    103    00228E                HEADLESS PJOUT,DOCOLON
    104    00228E              */
    105    00228E              
    106    00228E              
    107    000000              PUBLIC lastword
    108    00228E              lastword equ link
    109    00228E              
    110    00228E              ; for debug map only:
    111    00228E              CamelForthEnd:
    112    00228E              
    113    00228E                      END


ACCVIE               #define, value: (0x20), line:     132:2  
ACCVIFG              #define, value: (0x0004u), line:     448:2  
ADC10AE0_            #define, value: (0x004Au), line:     167:2      168:2
ADC10B1              #define, value: (0x002), line:     271:2  
ADC10BUSY            #define, value: (0x0001u), line:     211:2  
ADC10CT              #define, value: (0x004), line:     272:2  
ADC10CTL0_           #define, value: (0x01B0u), line:     170:2      171:2
ADC10CTL1_           #define, value: (0x01B2u), line:     172:2      173:2
ADC10DF              #define, value: (0x0200u), line:     220:2  
ADC10DISABLE         #define, value: (0x000), line:     274:2  
ADC10DIV0            #define, value: (0x0020u), line:     216:2  
ADC10DIV1            #define, value: (0x0040u), line:     217:2  
ADC10DIV2            #define, value: (0x0080u), line:     218:2  
ADC10DIV_0           #define, value: (0*0x20u), line:     238:2  
ADC10DIV_1           #define, value: (1*0x20u), line:     239:2  
ADC10DIV_2           #define, value: (2*0x20u), line:     240:2  
ADC10DIV_3           #define, value: (3*0x20u), line:     241:2  
ADC10DIV_4           #define, value: (4*0x20u), line:     242:2  
ADC10DIV_5           #define, value: (5*0x20u), line:     243:2  
ADC10DIV_6           #define, value: (6*0x20u), line:     244:2  
ADC10DIV_7           #define, value: (7*0x20u), line:     245:2  
ADC10DTC0_           #define, value: (0x0048u), line:     163:2      164:2
ADC10DTC1_           #define, value: (0x0049u), line:     165:2      166:2
ADC10FETCH           #define, value: (0x001), line:     270:2  
ADC10IE              #define, value: (0x008), line:     183:2  
ADC10IFG             #define, value: (0x004), line:     182:2  
ADC10MEM_            #define, value: (0x01B4u), line:     174:2      175:2
ADC10ON              #define, value: (0x010), line:     184:2  
ADC10SA_             #define, value: (0x01BCu), line:     176:2      177:2
ADC10SC              #define, value: (0x001), line:     180:2  
ADC10SHT0            #define, value: (0x800), line:     191:2  
ADC10SHT1            #define, value: (0x1000u), line:     192:2  
ADC10SHT_0           #define, value: (0*0x800u), line:     196:2  
ADC10SHT_1           #define, value: (1*0x800u), line:     197:2  
ADC10SHT_2           #define, value: (2*0x800u), line:     198:2  
ADC10SHT_3           #define, value: (3*0x800u), line:     199:2  
ADC10SR              #define, value: (0x400), line:     190:2  
ADC10SSEL0           #define, value: (0x0008u), line:     214:2  
ADC10SSEL1           #define, value: (0x0010u), line:     215:2  
ADC10SSEL_0          #define, value: (0*8u), line:     233:2  
ADC10SSEL_1          #define, value: (1*8u), line:     234:2  
ADC10SSEL_2          #define, value: (2*8u), line:     235:2  
ADC10SSEL_3          #define, value: (3*8u), line:     236:2  
ADC10TB              #define, value: (0x008), line:     273:2  
ADC10_VECTOR         #define, value: (5 * 2u), line:     965:2  
BCSCTL1_             #define, value: (0x0057u), line:     283:2      284:2
BCSCTL2_             #define, value: (0x0058u), line:     285:2      286:2
BCSCTL3_             #define, value: (0x0053u), line:     287:2      288:2
BIT0                 #define, value: (0x0001u), line:      57:2  
BIT1                 #define, value: (0x0002u), line:      58:2  
                                  - 4e-LP430 -                        Page  163

BIT2                 #define, value: (0x0004u), line:      59:2  
BIT3                 #define, value: (0x0008u), line:      60:2     120:10   121:10   122:10   128:10
                                                                   137:10   143:10   215:10   216:10
                                                                   224:10   231:10   240:10
BIT4                 #define, value: (0x0010u), line:      61:2  
BIT5                 #define, value: (0x0020u), line:      62:2  
BIT6                 #define, value: (0x0040u), line:      63:2  
BIT7                 #define, value: (0x0080u), line:      64:2  
BIT8                 #define, value: (0x0100u), line:      65:2  
BIT9                 #define, value: (0x0200u), line:      66:2  
BITA                 #define, value: (0x0400u), line:      67:2  
BITB                 #define, value: (0x0800u), line:      68:2  
BITC                 #define, value: (0x1000u), line:      69:2  
BITD                 #define, value: (0x2000u), line:      70:2  
BITE                 #define, value: (0x4000u), line:      71:2  
BITF                 #define, value: (0x8000u), line:      72:2  
BLKWRT               #define, value: (0x0080u), line:     423:2  
BUSY                 #define, value: (0x0001u), line:     446:2  
C                    #define, value: (0x0001u), line:      78:2  
CACTL1_              #define, value: (0x0059u), line:     365:2      366:2
CACTL2_              #define, value: (0x005Au), line:     367:2      368:2
CAEX                 #define, value: (0x80), line:     379:2  
CAF                  #define, value: (0x02), line:     387:2  
CAIE                 #define, value: (0x02), line:     373:2  
CAIES                #define, value: (0x04), line:     374:2  
CAIFG                #define, value: (0x01), line:     372:2  
CALBC1_12MHZ_        #define, value: (0x10FBu), line:     946:2      947:2
CALBC1_16MHZ_        #define, value: (0x10F9u), line:     942:2      943:2
CALBC1_1MHZ_         #define, value: (0x10FFu), line:     954:2      955:2
CALBC1_8MHZ_         #define, value: (0x10FDu), line:     950:2      951:2
CALDCO_12MHZ_        #define, value: (0x10FAu), line:     944:2      945:2
CALDCO_16MHZ_        #define, value: (0x10F8u), line:     940:2      941:2
CALDCO_1MHZ_         #define, value: (0x10FEu), line:     952:2      953:2
CALDCO_8MHZ_         #define, value: (0x10FCu), line:     948:2      949:2
CAON                 #define, value: (0x08), line:     375:2  
CAOUT                #define, value: (0x01), line:     386:2  
CAP                  #define, value: (0x0100u), line:     604:2  
CAPD0                #define, value: (0x01), line:     395:2  
CAPD1                #define, value: (0x02), line:     396:2  
CAPD2                #define, value: (0x04), line:     397:2  
CAPD3                #define, value: (0x08), line:     398:2  
CAPD4                #define, value: (0x10), line:     399:2  
CAPD5                #define, value: (0x20), line:     400:2  
CAPD6                #define, value: (0x40), line:     401:2  
CAPD7                #define, value: (0x80), line:     402:2  
CAPD_                #define, value: (0x005Bu), line:     369:2      370:2
CAREF0               #define, value: (0x10), line:     376:2  
CAREF1               #define, value: (0x20), line:     377:2  
CAREF_0              #define, value: (0x00), line:     381:2  
CAREF_1              #define, value: (0x10), line:     382:2  
CAREF_2              #define, value: (0x20), line:     383:2  
CAREF_3              #define, value: (0x30), line:     384:2  
CARSEL               #define, value: (0x40), line:     378:2  
CASHORT              #define, value: (0x80), line:     393:2  
CCI                  #define, value: (0x0008u), line:     609:2  
CCIE                 #define, value: (0x0010u), line:     608:2  
CCIFG                #define, value: (0x0001u), line:     612:2  
CCIS0                #define, value: (0x1000u), line:     601:2  
CCIS1                #define, value: (0x2000u), line:     600:2  
CCIS_0               #define, value: (0*0x1000u), line:     622:2  
CCIS_1               #define, value: (1*0x1000u), line:     623:2  
CCIS_2               #define, value: (2*0x1000u), line:     624:2  
CCIS_3               #define, value: (3*0x1000u), line:     625:2  
CCR0                 #define, value: TACCR0, line:     565:2  
CCR0_                #define, value: TACCR0_, line:     571:2  
CCR1                 #define, value: TACCR1, line:     566:2  
CCR1_                #define, value: TACCR1_, line:     572:2  
CCR2                 #define, value: TACCR2, line:     567:2  
CCR2_                #define, value: TACCR2_, line:     573:2  
CCTL0                #define, value: TACCTL0, line:     562:2  
CCTL0_               #define, value: TACCTL0_, line:     568:2  
CCTL1                #define, value: TACCTL1, line:     563:2  
CCTL1_               #define, value: TACCTL1_, line:     569:2  
CCTL2                #define, value: TACCTL2, line:     564:2  
CCTL2_               #define, value: TACCTL2_, line:     570:2  
CM0                  #define, value: (0x4000u), line:     599:2  
CM1                  #define, value: (0x8000u), line:     598:2  
CM_0                 #define, value: (0*0x4000u), line:     626:2  
                                  - 4e-LP430 -                        Page  164

CM_1                 #define, value: (1*0x4000u), line:     627:2  
CM_2                 #define, value: (2*0x4000u), line:     628:2  
CM_3                 #define, value: (3*0x4000u), line:     629:2  
COMPARATORA_VECTOR   #define, value: (11 * 2u), line:     971:2  
CONSEQ0              #define, value: (0x0002u), line:     212:2  
CONSEQ1              #define, value: (0x0004u), line:     213:2  
CONSEQ_0             #define, value: (0*2u), line:     228:2  
CONSEQ_1             #define, value: (1*2u), line:     229:2  
CONSEQ_2             #define, value: (2*2u), line:     230:2  
CONSEQ_3             #define, value: (3*2u), line:     231:2  
COV                  #define, value: (0x0002u), line:     611:2  
CPUOFF               #define, value: (0x0010u), line:      83:2      44:11    51:11    61:11
DCO0                 #define, value: (0x20), line:     295:2  
DCO1                 #define, value: (0x40), line:     296:2  
DCO2                 #define, value: (0x80), line:     297:2  
DCOCTL_              #define, value: (0x0056u), line:     281:2      282:2
DEFC                 #define,            line:      42:2      128:2    135:2    143:2    151:2
                                                                    164:2    166:2    168:2    282:2
                                                                    284:2    286:2    288:2    366:2
                                                                    368:2    370:2    462:2    464:2
                                                                    466:2    468:2    470:2    472:2
                                                                    474:2    476:2    478:2    481:2
                                                                    483:2    485:2    487:2    489:2
                                                                    491:2    493:2    495:2    497:2
                                                                    505:2    507:2    509:2    511:2
                                                                    513:2    515:2    677:2    679:2
                                                                    681:2    683:2    685:2    687:2
                                                                    689:2    691:2    693:2    695:2
                                                                    697:2    702:2    704:2    706:2
                                                                    708:2    710:2    712:2    714:2
                                                                    716:2    941:2    943:2    945:2
                                                                    947:2    949:2    951:2    953:2
                                                                    955:2
DEFW                 #define,            line:      43:2      171:2    173:2    175:2    177:2
                                                                    410:2    412:2    414:2    523:2
                                                                    525:2    527:2    529:2    531:2
                                                                    533:2    535:2    537:2    539:2
                                                                    645:2    647:2    649:2    651:2
                                                                    653:2    655:2    657:2    659:2
                                                                    661:2    718:2    720:2    893:2
DIVA0                #define, value: (0x10), line:     303:2  
DIVA1                #define, value: (0x20), line:     304:2  
DIVA_0               #define, value: (0x00), line:     308:2  
DIVA_1               #define, value: (0x10), line:     309:2  
DIVA_2               #define, value: (0x20), line:     310:2  
DIVA_3               #define, value: (0x30), line:     311:2  
DIVM0                #define, value: (0x10), line:     316:2  
DIVM1                #define, value: (0x20), line:     317:2  
DIVM_0               #define, value: (0x00), line:     326:2  
DIVM_1               #define, value: (0x10), line:     327:2  
DIVM_2               #define, value: (0x20), line:     328:2  
DIVM_3               #define, value: (0x30), line:     329:2  
DIVS0                #define, value: (0x02), line:     313:2  
DIVS1                #define, value: (0x04), line:     314:2  
DIVS_0               #define, value: (0x00), line:     321:2  
DIVS_1               #define, value: (0x02), line:     322:2  
DIVS_2               #define, value: (0x04), line:     323:2  
DIVS_3               #define, value: (0x06), line:     324:2  
EMEX                 #define, value: (0x0020u), line:     451:2  
ENC                  #define, value: (0x002), line:     181:2  
ERASE                #define, value: (0x0002u), line:     420:2      351:4     33:8
FAIL                 #define, value: (0x0080u), line:     453:2  
FCTL1_               #define, value: (0x0128u), line:     409:2      410:2
FCTL2_               #define, value: (0x012Au), line:     411:2      412:2
FCTL3_               #define, value: (0x012Cu), line:     413:2      414:2
FN0                  #define, value: (0x0001u), line:     426:2  
FN1                  #define, value: (0x0002u), line:     427:2  
FN2                  #define, value: (0x0004u), line:     429:2  
FN3                  #define, value: (0x0008u), line:     432:2  
FN4                  #define, value: (0x0010u), line:     435:2  
FN5                  #define, value: (0x0020u), line:     437:2  
FRKEY                #define, value: (0x9600u), line:     416:2  
FSSEL0               #define, value: (0x0040u), line:     438:2  
FSSEL1               #define, value: (0x0080u), line:     439:2  
FSSEL_0              #define, value: (0x0000u), line:     441:2  
FSSEL_1              #define, value: (0x0040u), line:     442:2  
FSSEL_2              #define, value: (0x0080u), line:     443:2  
FSSEL_3              #define, value: (0x00C0u), line:     444:2  
                                  - 4e-LP430 -                        Page  165

FWKEY                #define, value: (0xA500u), line:     417:2      350:4    351:4    353:4    354:4
                                                                    395:4    396:4    399:4    400:4
                                                                    428:4    429:4    432:4    433:4
                                                                    463:4    464:4    482:4    483:4
                                                                     15:8     16:8     18:8     19:8
                                                                     32:8     33:8     35:8     36:8
FXKEY                #define, value: (0x3300u), line:     418:2  
GIE                  #define, value: (0x0008u), line:      82:2      44:11    51:11    61:11
HALLOT               #define, value: IALLOT, line:     830:6     1244:6
HCCOMMA              #define, value: ICCOMMA, line:     832:6     1242:6
HCFETCH              #define, value: ICFETCH, line:     833:6      941:6   1244:6
HCOMMA               #define, value: ICOMMA, line:     831:6     1241:6
HCOUNT               #define, value: ICOUNT, line:     677:6      935:6   1567:6
HCSTORE              #define, value: ICSTORE, line:     835:6     1313:6
HFETCH               #define, value: IFETCH, line:     834:6      964:6   1303:6   1568:6
HHERE                #define, value: IHERE, line:     829:6     1243:6
HSTORE               #define, value: ISTORE, line:     836:6  
HTYPE                #define, value: ITYPE, line:     678:6     1567:6
HWORD                #define, value: IWORDC, line:     679:6     1244:6
ICFETCH              #define, value: CFETCH, line:     446:4      598:6    941:6   1244:6
ICOUNT               #define, value: COUNT, line:     553:6      585:6    935:6   1567:6
ID0                  #define, value: (0x0040u), line:     578:2  
ID1                  #define, value: (0x0080u), line:     577:2  
ID_0                 #define, value: (0*0x40u), line:     589:2  
ID_1                 #define, value: (1*0x40u), line:     590:2  
ID_2                 #define, value: (2*0x40u), line:     591:2  
ID_3                 #define, value: (3*0x40u), line:     592:2  
IE1_                 #define, value: (0x0000u), line:     127:2      128:2
IE2_                 #define, value: (0x0001u), line:     142:2      143:2
IFETCH               #define, value: FETCH, line:     445:4      597:6    964:6   1303:6   1531:6
                                                                   1532:6   1533:6   1568:6     37:7
IFG1_                #define, value: (0x0002u), line:     134:2      135:2
IFG2_                #define, value: (0x0003u), line:     150:2      151:2
INCH0                #define, value: (0x1000u), line:     223:2  
INCH1                #define, value: (0x2000u), line:     224:2  
INCH2                #define, value: (0x4000u), line:     225:2  
INCH3                #define, value: (0x8000u), line:     226:2  
INCH_0               #define, value: (0*0x1000u), line:     252:2  
INCH_1               #define, value: (1*0x1000u), line:     253:2  
INCH_10              #define, value: (10*0x1000u), line:     262:2  
INCH_11              #define, value: (11*0x1000u), line:     263:2  
INCH_12              #define, value: (12*0x1000u), line:     264:2  
INCH_13              #define, value: (13*0x1000u), line:     265:2  
INCH_14              #define, value: (14*0x1000u), line:     266:2  
INCH_15              #define, value: (15*0x1000u), line:     267:2  
INCH_2               #define, value: (2*0x1000u), line:     254:2  
INCH_3               #define, value: (3*0x1000u), line:     255:2  
INCH_4               #define, value: (4*0x1000u), line:     256:2  
INCH_5               #define, value: (5*0x1000u), line:     257:2  
INCH_6               #define, value: (6*0x1000u), line:     258:2  
INCH_7               #define, value: (7*0x1000u), line:     259:2  
INCH_8               #define, value: (8*0x1000u), line:     260:2  
INCH_9               #define, value: (9*0x1000u), line:     261:2  
INDEX                #define, value: R8, line:      51:3      683:4    686:4    687:4    696:4
                                                                    700:4    708:4    713:4    721:4
                                                                    735:4
INFOEND              #define, value: (0x10FF), line:      28:3      342:4    386:4    419:4
INFOSEG              #define, value: (128), line:      36:3      363:4    364:4
INFOSTART            #define, value: (0x1000), line:      27:3      340:4    384:4    417:4
IP                   #define, value: R5, line:      46:3       76:4     77:4     81:4     82:4
                                                                     91:4     92:4     93:4    121:4
                                                                    131:4    143:4    171:4    172:4
                                                                    173:4    174:4    191:4    197:4
                                                                    202:4    209:4    217:4    225:4
                                                                    230:4    240:4    247:4    254:4
                                                                    261:4    267:4    274:4    280:4
                                                                    292:4    298:4    303:4    310:4
                                                                    367:4    404:4    489:4    497:4
                                                                    503:4    510:4    517:4    522:4
                                                                    527:4    532:4    537:4    543:4
                                                                    548:4    553:4    558:4    563:4
                                                                    568:4    579:4    591:4    600:4
                                                                    607:4    615:4    627:4    662:4
                                                                    662:4    663:4    670:4    671:4
                                                                    689:4    699:4    702:4    712:4
                                                                    715:4    723:4    731:4    737:4
                                                                    766:4    797:4    813:4    830:4
                                                                    847:4    870:4    885:4    905:4
                                  - 4e-LP430 -                        Page  166

                                                                    947:4    958:4   1665:6   1696:6
                                                                   1829:6   1836:6   1843:6   1850:6
                                                                   1857:6   1867:6   1970:6     23:8
                                                                     39:8   154:10   250:10    31:11
                                                                    36:11    55:11    65:11
IRACL                #define, value: R12, line:      67:3      748:4    756:4    764:4    777:4
                                                                    782:4    796:4
IRACM                #define, value: R13, line:      68:3      749:4    757:4    765:4
IRBT                 #define, value: W, line:      69:3      753:4    754:4    761:4    778:4
                                                                    784:4
IROP1                #define, value: TOS, line:      64:3      754:4    779:4    781:4    789:4
IROP2L               #define, value: R10, line:      65:3      745:4    756:4    758:4    772:4
                                                                    786:4
IROP2M               #define, value: R11, line:      66:3      752:4    757:4    759:4    771:4
                                                                    779:4    781:4    787:4    789:4
                                                                    795:4
ISREND               #define, value: (0xFFDF), line:      34:3      335:4
ISRSTART             #define, value: (0xFE00), line:      33:3      333:4
ISSH                 #define, value: (0x0100u), line:     219:2  
ITYPE                #define, value: TYP, line:     552:6      656:6   1158:6   1196:6   1567:6
                                                                   1706:6   1707:6   1755:6      9:7
                                                                     81:7     90:7    148:7
KEYV                 #define, value: (0x0002u), line:     447:2  
LFXT1OF              #define, value: (0x01), line:     336:2  
LFXT1S0              #define, value: (0x10), line:     340:2  
LFXT1S1              #define, value: (0x20), line:     341:2  
LFXT1S_0             #define, value: (0x00), line:     350:2  
LFXT1S_1             #define, value: (0x10), line:     351:2  
LFXT1S_2             #define, value: (0x20), line:     352:2  
LFXT1S_3             #define, value: (0x30), line:     353:2  
LIMIT                #define, value: R9, line:      52:3      682:4    684:4    685:4    687:4
                                                                    701:4    714:4    722:4    736:4
LOCK                 #define, value: (0x0010u), line:     450:2      354:4    400:4    433:4    483:4
                                                                     19:8     36:8
LOCKA                #define, value: (0x0040u), line:     452:2  
LPM0                 #define, value: (CPUOFF), line:      91:2      61:11
LPM1                 #define, value: (SCG0+CPUOFF), line:      92:2  
LPM2                 #define, value: (SCG1+CPUOFF), line:      93:2  
LPM3                 #define, value: (SCG1+SCG0+CPUOFF), line:      94:2  
LPM4                 #define, value: (SCG1+SCG0+OSCOFF+CPUOFF), line:      95:2      44:11    51:11
MAINSEG              #define, value: (512), line:      35:3      363:4
MC0                  #define, value: (0x0010u), line:     580:2  
MC1                  #define, value: (0x0020u), line:     579:2  
MC_0                 #define, value: (0*0x10u), line:     585:2  
MC_1                 #define, value: (1*0x10u), line:     586:2  
MC_2                 #define, value: (2*0x10u), line:     587:2  
MC_3                 #define, value: (3*0x10u), line:     588:2  
MERAS                #define, value: (0x0004u), line:     421:2  
MOD0                 #define, value: (0x01), line:     290:2  
MOD1                 #define, value: (0x02), line:     291:2  
MOD2                 #define, value: (0x04), line:     292:2  
MOD3                 #define, value: (0x08), line:     293:2  
MOD4                 #define, value: (0x10), line:     294:2  
MSC                  #define, value: (0x080), line:     187:2  
N                    #define, value: (0x0004u), line:      80:2  
NMIIE                #define, value: (0x10), line:     131:2  
NMIIFG               #define, value: (0x10), line:     140:2  
NMI_VECTOR           #define, value: (14 * 2u), line:     974:2  
OFIE                 #define, value: (0x02), line:     130:2  
OFIFG                #define, value: (0x02), line:     137:2  
OSCOFF               #define, value: (0x0020u), line:      84:2      44:11    51:11
OUT                  #define, value: (0x0004u), line:     610:2  
OUTMOD0              #define, value: (0x0020u), line:     607:2  
OUTMOD1              #define, value: (0x0040u), line:     606:2  
OUTMOD2              #define, value: (0x0080u), line:     605:2  
OUTMOD_0             #define, value: (0*0x20u), line:     614:2  
OUTMOD_1             #define, value: (1*0x20u), line:     615:2  
OUTMOD_2             #define, value: (2*0x20u), line:     616:2  
OUTMOD_3             #define, value: (3*0x20u), line:     617:2  
OUTMOD_4             #define, value: (4*0x20u), line:     618:2  
OUTMOD_5             #define, value: (5*0x20u), line:     619:2  
OUTMOD_6             #define, value: (6*0x20u), line:     620:2  
OUTMOD_7             #define, value: (7*0x20u), line:     621:2  
OWBIT                #define, value: BIT3, line:     73:10     120:10   121:10   122:10   128:10
                                                                   137:10   143:10   215:10   216:10
                                                                   224:10   231:10   240:10
OWDIR                #define, value: P2DIR, line:     71:10     120:10   128:10   137:10   215:10
                                                                   224:10   240:10
                                  - 4e-LP430 -                        Page  167

OWIN                 #define, value: P2IN, line:     69:10     143:10   231:10
OWOUT                #define, value: P2OUT, line:     70:10     121:10   216:10
OWREN                #define, value: P2REN, line:     72:10     122:10
P1DIR_               #define, value: (0x0022u), line:     465:2      466:2
P1IES_               #define, value: (0x0024u), line:     469:2      470:2
P1IE_                #define, value: (0x0025u), line:     471:2      472:2
P1IFG_               #define, value: (0x0023u), line:     467:2      468:2
P1IN_                #define, value: (0x0020u), line:     461:2      462:2
P1OUT_               #define, value: (0x0021u), line:     463:2      464:2
P1REN_               #define, value: (0x0027u), line:     477:2      478:2
P1SEL2_              #define, value: (0x0041u), line:     475:2      476:2
P1SEL_               #define, value: (0x0026u), line:     473:2      474:2
P2CA0                #define, value: (0x04), line:     388:2  
P2CA1                #define, value: (0x08), line:     389:2  
P2CA2                #define, value: (0x10), line:     390:2  
P2CA3                #define, value: (0x20), line:     391:2  
P2CA4                #define, value: (0x40), line:     392:2  
P2DIR_               #define, value: (0x002Au), line:     484:2      485:2
P2IES_               #define, value: (0x002Cu), line:     488:2      489:2
P2IE_                #define, value: (0x002Du), line:     490:2      491:2
P2IFG_               #define, value: (0x002Bu), line:     486:2      487:2
P2IN_                #define, value: (0x0028u), line:     480:2      481:2
P2OUT_               #define, value: (0x0029u), line:     482:2      483:2
P2REN_               #define, value: (0x002Fu), line:     496:2      497:2
P2SEL2_              #define, value: (0x0042u), line:     494:2      495:2
P2SEL_               #define, value: (0x002Eu), line:     492:2      493:2
P3DIR_               #define, value: (0x001Au), line:     508:2      509:2
P3IN_                #define, value: (0x0018u), line:     504:2      505:2
P3OUT_               #define, value: (0x0019u), line:     506:2      507:2
P3REN_               #define, value: (0x0010u), line:     514:2      515:2
P3SEL2_              #define, value: (0x0043u), line:     512:2      513:2
P3SEL_               #define, value: (0x001Bu), line:     510:2      511:2
PORIFG               #define, value: (0x04), line:     138:2  
PORT1_VECTOR         #define, value: (2 * 2u), line:     963:2  
PORT2_VECTOR         #define, value: (3 * 2u), line:     964:2  
PREFIXPROMPT         #define, value: 0, line:    1136:6     1142:6   1151:6
PSP                  #define, value: R4, line:      45:3       68:4     74:4     75:4    118:4
                                                                    119:4    128:4    129:4    139:4
                                                                    140:4    168:4    169:4    189:4
                                                                    190:4    201:4    206:4    207:4
                                                                    213:4    214:4    215:4    221:4
                                                                    222:4    223:4    224:4    229:4
                                                                    239:4    244:4    245:4    251:4
                                                                    252:4    258:4    259:4    260:4
                                                                    265:4    266:4    271:4    272:4
                                                                    279:4    296:4    297:4    307:4
                                                                    309:4    319:4    366:4    373:4
                                                                    403:4    408:4    456:4    457:4
                                                                    488:4    496:4    501:4    502:4
                                                                    507:4    508:4    509:4    514:4
                                                                    521:4    526:4    531:4    572:4
                                                                    583:4    611:4    623:4    635:4
                                                                    648:4    649:4    668:4    685:4
                                                                    688:4    709:4    719:4    720:4
                                                                    727:4    728:4    745:4    764:4
                                                                    771:4    772:4    795:4    804:4
                                                                    805:4    812:4    821:4    822:4
                                                                    829:4    835:4    836:4    846:4
                                                                    859:4    860:4    868:4    874:4
                                                                    875:4    883:4    890:4    891:4
                                                                    946:4    954:4    955:4    972:4
                                                                    973:4   1658:6   1692:6   1693:6
                                                                   1695:6   1826:6   1827:6   1828:6
                                                                   1833:6   1834:6   1835:6   1840:6
                                                                   1841:6   1842:6   1847:6   1848:6
                                                                   1849:6   1854:6   1855:6   1856:6
                                                                   1861:6   1866:6      8:8     22:8
                                                                   113:10   114:10
Q                    #define, value: R12, line:      57:3      472:4    473:4    474:4
RAMEND               #define, value: (0x0400), line:      30:3     1905:6
RAMSTART             #define, value: (0x0200), line:      29:3  
READ_ONLY            #define, value: const, line:      50:2      462:2    481:2    505:2    523:2
                                                                    645:2    689:2    714:2    941:2
                                                                    943:2    945:2    947:2    949:2
                                                                    951:2    953:2    955:2
REF2_5V              #define, value: (0x040), line:     186:2  
REFBURST             #define, value: (0x100), line:     188:2  
REFON                #define, value: (0x020), line:     185:2  
                                  - 4e-LP430 -                        Page  168

REFOUT               #define, value: (0x200), line:     189:2  
RESET_VECTOR         #define, value: (15 * 2u), line:     975:2  
RSEL0                #define, value: (0x01), line:     299:2  
RSEL1                #define, value: (0x02), line:     300:2  
RSEL2                #define, value: (0x04), line:     301:2  
RSEL3                #define, value: (0x08), line:     302:2  
RSP                  #define, value: SP, line:      42:3       81:4    246:4    253:4    273:4
                                                                    278:4    681:4    682:4    683:4
                                                                    700:4    701:4    713:4    714:4
                                                                    729:4    730:4    735:4    736:4
                                                                    44:11
RSTIFG               #define, value: (0x08), line:     139:2  
SCCI                 #define, value: (0x0400u), line:     603:2  
SCG0                 #define, value: (0x0040u), line:      85:2      44:11    51:11
SCG1                 #define, value: (0x0080u), line:      86:2      44:11    51:11
SCS                  #define, value: (0x0800u), line:     602:2  
SEGWRT               #define, value: (0x0080u), line:     424:2  
SELM0                #define, value: (0x40), line:     318:2  
SELM1                #define, value: (0x80), line:     319:2  
SELM_0               #define, value: (0x00), line:     331:2  
SELM_1               #define, value: (0x40), line:     332:2  
SELM_2               #define, value: (0x80), line:     333:2  
SELM_3               #define, value: (0xC0), line:     334:2  
SELS                 #define, value: (0x08), line:     315:2  
SHS0                 #define, value: (0x0400u), line:     221:2  
SHS1                 #define, value: (0x0800u), line:     222:2  
SHS_0                #define, value: (0*0x400u), line:     247:2  
SHS_1                #define, value: (1*0x400u), line:     248:2  
SHS_2                #define, value: (2*0x400u), line:     249:2  
SHS_3                #define, value: (3*0x400u), line:     250:2  
SREF0                #define, value: (0x2000u), line:     193:2  
SREF1                #define, value: (0x4000u), line:     194:2  
SREF2                #define, value: (0x8000u), line:     195:2  
SREF_0               #define, value: (0*0x2000u), line:     201:2  
SREF_1               #define, value: (1*0x2000u), line:     202:2  
SREF_2               #define, value: (2*0x2000u), line:     203:2  
SREF_3               #define, value: (3*0x2000u), line:     204:2  
SREF_4               #define, value: (4*0x2000u), line:     205:2  
SREF_5               #define, value: (5*0x2000u), line:     206:2  
SREF_6               #define, value: (6*0x2000u), line:     207:2  
SREF_7               #define, value: (7*0x2000u), line:     208:2  
T                    #define, value: R13, line:      58:3  
TA0CCR0_             #define, value: (0x0172u), line:     534:2      535:2
TA0CCR1_             #define, value: (0x0174u), line:     536:2      537:2
TA0CCR2_             #define, value: (0x0176u), line:     538:2      539:2
TA0CCTL0_            #define, value: (0x0162u), line:     526:2      527:2
TA0CCTL1_            #define, value: (0x0164u), line:     528:2      529:2
TA0CCTL2_            #define, value: (0x0166u), line:     530:2      531:2
TA0CTL_              #define, value: (0x0160u), line:     524:2      525:2
TA0IV_               #define, value: (0x012Eu), line:     522:2      523:2
TA0IV_6              #define, value: (0x0006u), line:     635:2  
TA0IV_8              #define, value: (0x0008u), line:     636:2  
TA0IV_NONE           #define, value: (0x0000u), line:     632:2  
TA0IV_TACCR1         #define, value: (0x0002u), line:     633:2  
TA0IV_TACCR2         #define, value: (0x0004u), line:     634:2  
TA0IV_TAIFG          #define, value: (0x000Au), line:     637:2  
TA0R_                #define, value: (0x0170u), line:     532:2      533:2
TA1CCR0_             #define, value: (0x0192u), line:     656:2      657:2
TA1CCR1_             #define, value: (0x0194u), line:     658:2      659:2
TA1CCR2_             #define, value: (0x0196u), line:     660:2      661:2
TA1CCTL0_            #define, value: (0x0182u), line:     648:2      649:2
TA1CCTL1_            #define, value: (0x0184u), line:     650:2      651:2
TA1CCTL2_            #define, value: (0x0186u), line:     652:2      653:2
TA1CTL_              #define, value: (0x0180u), line:     646:2      647:2
TA1IV_               #define, value: (0x011Eu), line:     644:2      645:2
TA1IV_NONE           #define, value: (0x0000u), line:     666:2  
TA1IV_TACCR1         #define, value: (0x0002u), line:     667:2  
TA1IV_TACCR2         #define, value: (0x0004u), line:     668:2  
TA1IV_TAIFG          #define, value: (0x000Au), line:     669:2  
TA1R_                #define, value: (0x0190u), line:     654:2      655:2
TACCR0               #define, value: TA0CCR0, line:     548:2  
TACCR0_              #define, value: TA0CCR0_, line:     557:2  
TACCR1               #define, value: TA0CCR1, line:     549:2  
TACCR1_              #define, value: TA0CCR1_, line:     558:2  
TACCR2               #define, value: TA0CCR2, line:     550:2  
TACCR2_              #define, value: TA0CCR2_, line:     559:2  
TACCTL0              #define, value: TA0CCTL0, line:     544:2  
TACCTL0_             #define, value: TA0CCTL0_, line:     553:2  
                                  - 4e-LP430 -                        Page  169

TACCTL1              #define, value: TA0CCTL1, line:     545:2  
TACCTL1_             #define, value: TA0CCTL1_, line:     554:2  
TACCTL2              #define, value: TA0CCTL2, line:     546:2  
TACCTL2_             #define, value: TA0CCTL2_, line:     555:2  
TACLR                #define, value: (0x0004u), line:     581:2  
TACTL                #define, value: TA0CTL, line:     543:2  
TACTL_               #define, value: TA0CTL_, line:     552:2  
TAIE                 #define, value: (0x0002u), line:     582:2  
TAIFG                #define, value: (0x0001u), line:     583:2  
TAIV                 #define, value: TA0IV, line:     542:2  
TAIV_                #define, value: TA0IV_, line:     551:2  
TAR                  #define, value: TA0R, line:     547:2  
TAR_                 #define, value: TA0R_, line:     556:2  
TASSEL0              #define, value: (0x0100u), line:     576:2  
TASSEL1              #define, value: (0x0200u), line:     575:2  
TASSEL_0             #define, value: (0*0x100u), line:     593:2  
TASSEL_1             #define, value: (1*0x100u), line:     594:2  
TASSEL_2             #define, value: (2*0x100u), line:     595:2  
TASSEL_3             #define, value: (3*0x100u), line:     596:2  
TIMER0_A0_VECTOR     #define, value: (9 * 2u), line:     969:2  
TIMER0_A1_VECTOR     #define, value: (8 * 2u), line:     968:2  
TIMER1_A0_VECTOR     #define, value: (13 * 2u), line:     973:2  
TIMER1_A1_VECTOR     #define, value: (12 * 2u), line:     972:2  
TOS                  #define, value: R7, line:      48:3       67:4     68:4     75:4     76:4
                                                                    119:4    120:4    129:4    130:4
                                                                    140:4    141:4    142:4    169:4
                                                                    170:4    190:4    195:4    201:4
                                                                    207:4    208:4    215:4    216:4
                                                                    222:4    223:4    238:4    239:4
                                                                    245:4    246:4    252:4    253:4
                                                                    259:4    260:4    265:4    266:4
                                                                    272:4    273:4    278:4    279:4
                                                                    291:4    291:4    296:4    297:4
                                                                    302:4    302:4    308:4    309:4
                                                                    320:4    322:4    366:4    374:4
                                                                    376:4    379:4    381:4    384:4
                                                                    386:4    398:4    403:4    409:4
                                                                    412:4    414:4    417:4    419:4
                                                                    431:4    458:4    467:4    477:4
                                                                    486:4    488:4    496:4    501:4
                                                                    502:4    507:4    509:4    515:4
                                                                    516:4    521:4    526:4    531:4
                                                                    536:4    541:4    542:4    547:4
                                                                    552:4    557:4    562:4    562:4
                                                                    567:4    573:4    576:4    578:4
                                                                    584:4    588:4    590:4    598:4
                                                                    599:4    599:4    604:4    604:4
                                                                    605:4    605:4    606:4    612:4
                                                                    614:4    624:4    626:4    636:4
                                                                    646:4    649:4    667:4    668:4
                                                                    686:4    688:4    708:4    709:4
                                                                    720:4    721:4    722:4    728:4
                                                                    729:4    730:4    754:4    765:4
                                                                    779:4    781:4    789:4    796:4
                                                                    808:4    812:4    823:4    827:4
                                                                    829:4    837:4    839:4    840:4
                                                                    844:4    846:4    863:4    869:4
                                                                    878:4    884:4    892:4    897:4
                                                                    902:4    902:4    903:4    903:4
                                                                    904:4    945:4    946:4    955:4
                                                                    956:4    973:4     57:5   1656:6
                                                                   1657:6   1658:6   1660:6   1662:6
                                                                   1693:6   1694:6   1826:6   1828:6
                                                                   1833:6   1835:6   1840:6   1842:6
                                                                   1847:6   1849:6   1854:6   1856:6
                                                                   1861:6   1863:6   1865:6   1969:6
                                                                      9:8     11:8     17:8     22:8
                                                                   114:10   117:10   145:10   209:10
                                                                   222:10   233:10   234:10
UC0IE                #define, value: IE2, line:     144:2  
UC0IFG               #define, value: IFG2, line:     152:2  
UC7BIT               #define, value: (0x10), line:     726:2  
UCA0ABCTL_           #define, value: (0x005Du), line:     692:2      693:2
UCA0BR0_             #define, value: (0x0062u), line:     680:2      681:2
UCA0BR1_             #define, value: (0x0063u), line:     682:2      683:2
UCA0CTL0_            #define, value: (0x0060u), line:     676:2      677:2
UCA0CTL1_            #define, value: (0x0061u), line:     678:2      679:2
UCA0IRRCTL_          #define, value: (0x005Fu), line:     696:2      697:2
                                  - 4e-LP430 -                        Page  170

UCA0IRTCTL_          #define, value: (0x005Eu), line:     694:2      695:2
UCA0MCTL_            #define, value: (0x0064u), line:     684:2      685:2
UCA0RXBUF_           #define, value: (0x0066u), line:     688:2      689:2
UCA0RXIE             #define, value: (0x01), line:     145:2      30:11    35:11
UCA0RXIFG            #define, value: (0x01), line:     153:2      952:4    974:4
UCA0STAT_            #define, value: (0x0065u), line:     686:2      687:2
UCA0TXBUF_           #define, value: (0x0067u), line:     690:2      691:2
UCA0TXIE             #define, value: (0x02), line:     146:2  
UCA0TXIFG            #define, value: (0x02), line:     154:2      943:4
UCA10                #define, value: (0x80), line:     738:2  
UCABDEN              #define, value: (0x01), line:     862:2  
UCADDR               #define, value: (0x02), line:     816:2  
UCALIE               #define, value: (0x01), line:     827:2  
UCALIFG              #define, value: (0x01), line:     835:2  
UCB0BR0_             #define, value: (0x006Au), line:     705:2      706:2
UCB0BR1_             #define, value: (0x006Bu), line:     707:2      708:2
UCB0CTL0_            #define, value: (0x0068u), line:     701:2      702:2
UCB0CTL1_            #define, value: (0x0069u), line:     703:2      704:2
UCB0I2CIE_           #define, value: (0x006Cu), line:     709:2      710:2
UCB0I2COA_           #define, value: (0x0118u), line:     717:2      718:2
UCB0I2CSA_           #define, value: (0x011Au), line:     719:2      720:2
UCB0RXBUF_           #define, value: (0x006Eu), line:     713:2      714:2
UCB0RXIE             #define, value: (0x04), line:     147:2  
UCB0RXIFG            #define, value: (0x04), line:     155:2  
UCB0STAT_            #define, value: (0x006Du), line:     711:2      712:2
UCB0TXBUF_           #define, value: (0x006Fu), line:     715:2      716:2
UCB0TXIE             #define, value: (0x08), line:     148:2  
UCB0TXIFG            #define, value: (0x08), line:     156:2  
UCBBUSY              #define, value: (0x10), line:     831:2  
UCBRF0               #define, value: (0x10), line:     778:2  
UCBRF1               #define, value: (0x20), line:     777:2  
UCBRF2               #define, value: (0x40), line:     776:2  
UCBRF3               #define, value: (0x80), line:     775:2  
UCBRF_0              #define, value: (0x00), line:     784:2  
UCBRF_1              #define, value: (0x10), line:     785:2  
UCBRF_10             #define, value: (0xA0), line:     794:2  
UCBRF_11             #define, value: (0xB0), line:     795:2  
UCBRF_12             #define, value: (0xC0), line:     796:2  
UCBRF_13             #define, value: (0xD0), line:     797:2  
UCBRF_14             #define, value: (0xE0), line:     798:2  
UCBRF_15             #define, value: (0xF0), line:     799:2  
UCBRF_2              #define, value: (0x20), line:     786:2  
UCBRF_3              #define, value: (0x30), line:     787:2  
UCBRF_4              #define, value: (0x40), line:     788:2  
UCBRF_5              #define, value: (0x50), line:     789:2  
UCBRF_6              #define, value: (0x60), line:     790:2  
UCBRF_7              #define, value: (0x70), line:     791:2  
UCBRF_8              #define, value: (0x80), line:     792:2  
UCBRF_9              #define, value: (0x90), line:     793:2  
UCBRK                #define, value: (0x08), line:     814:2  
UCBRKIE              #define, value: (0x10), line:     751:2  
UCBRS0               #define, value: (0x02), line:     781:2  
UCBRS1               #define, value: (0x04), line:     780:2  
UCBRS2               #define, value: (0x08), line:     779:2  
UCBRS_0              #define, value: (0x00), line:     801:2  
UCBRS_1              #define, value: (0x02), line:     802:2  
UCBRS_2              #define, value: (0x04), line:     803:2  
UCBRS_3              #define, value: (0x06), line:     804:2  
UCBRS_4              #define, value: (0x08), line:     805:2  
UCBRS_5              #define, value: (0x0A), line:     806:2  
UCBRS_6              #define, value: (0x0C), line:     807:2  
UCBRS_7              #define, value: (0x0E), line:     808:2  
UCBTOE               #define, value: (0x04), line:     860:2  
UCBUSY               #define, value: (0x01), line:     817:2  
UCCKPH               #define, value: (0x80), line:     733:2  
UCCKPL               #define, value: (0x40), line:     734:2  
UCDELIM0             #define, value: (0x10), line:     858:2  
UCDELIM1             #define, value: (0x20), line:     857:2  
UCDORM               #define, value: (0x08), line:     752:2  
UCFE                 #define, value: (0x40), line:     811:2  
UCGC                 #define, value: (0x20), line:     830:2  
UCGCEN               #define, value: (0x8000u), line:     864:2  
UCIDLE               #define, value: (0x02), line:     818:2  
UCIREN               #define, value: (0x01), line:     844:2  
UCIRRXFE             #define, value: (0x01), line:     853:2  
UCIRRXFL0            #define, value: (0x04), line:     851:2  
UCIRRXFL1            #define, value: (0x08), line:     850:2  
UCIRRXFL2            #define, value: (0x10), line:     849:2  
                                  - 4e-LP430 -                        Page  171

UCIRRXFL3            #define, value: (0x20), line:     848:2  
UCIRRXFL4            #define, value: (0x40), line:     847:2  
UCIRRXFL5            #define, value: (0x80), line:     846:2  
UCIRRXPL             #define, value: (0x02), line:     852:2  
UCIRTXCLK            #define, value: (0x02), line:     843:2  
UCIRTXPL0            #define, value: (0x04), line:     842:2  
UCIRTXPL1            #define, value: (0x08), line:     841:2  
UCIRTXPL2            #define, value: (0x10), line:     840:2  
UCIRTXPL3            #define, value: (0x20), line:     839:2  
UCIRTXPL4            #define, value: (0x40), line:     838:2  
UCIRTXPL5            #define, value: (0x80), line:     837:2  
UCLISTEN             #define, value: (0x80), line:     810:2  
UCMM                 #define, value: (0x20), line:     740:2  
UCMODE0              #define, value: (0x02), line:     729:2  
UCMODE1              #define, value: (0x04), line:     728:2  
UCMODE_0             #define, value: (0x00), line:     742:2  
UCMODE_1             #define, value: (0x02), line:     743:2  
UCMODE_2             #define, value: (0x04), line:     744:2  
UCMODE_3             #define, value: (0x06), line:     745:2  
UCMSB                #define, value: (0x20), line:     725:2  
UCMST                #define, value: (0x08), line:     735:2  
UCNACKIE             #define, value: (0x08), line:     824:2  
UCNACKIFG            #define, value: (0x08), line:     832:2  
UCOA0                #define, value: (0x0001u), line:     874:2  
UCOA1                #define, value: (0x0002u), line:     873:2  
UCOA2                #define, value: (0x0004u), line:     872:2  
UCOA3                #define, value: (0x0008u), line:     871:2  
UCOA4                #define, value: (0x0010u), line:     870:2  
UCOA5                #define, value: (0x0020u), line:     869:2  
UCOA6                #define, value: (0x0040u), line:     868:2  
UCOA7                #define, value: (0x0080u), line:     867:2  
UCOA8                #define, value: (0x0100u), line:     866:2  
UCOA9                #define, value: (0x0200u), line:     865:2  
UCOE                 #define, value: (0x20), line:     812:2  
UCOS16               #define, value: (0x01), line:     782:2  
UCPAR                #define, value: (0x40), line:     724:2  
UCPE                 #define, value: (0x10), line:     813:2  
UCPEN                #define, value: (0x80), line:     723:2  
UCRXEIE              #define, value: (0x20), line:     750:2  
UCRXERR              #define, value: (0x04), line:     815:2  
UCSA0                #define, value: (0x0001u), line:     885:2  
UCSA1                #define, value: (0x0002u), line:     884:2  
UCSA2                #define, value: (0x0004u), line:     883:2  
UCSA3                #define, value: (0x0008u), line:     882:2  
UCSA4                #define, value: (0x0010u), line:     881:2  
UCSA5                #define, value: (0x0020u), line:     880:2  
UCSA6                #define, value: (0x0040u), line:     879:2  
UCSA7                #define, value: (0x0080u), line:     878:2  
UCSA8                #define, value: (0x0100u), line:     877:2  
UCSA9                #define, value: (0x0200u), line:     876:2  
UCSCLLOW             #define, value: (0x40), line:     829:2  
UCSLA10              #define, value: (0x40), line:     739:2  
UCSPB                #define, value: (0x08), line:     727:2  
UCSSEL0              #define, value: (0x40), line:     749:2  
UCSSEL1              #define, value: (0x80), line:     748:2  
UCSSEL_0             #define, value: (0x00), line:     770:2  
UCSSEL_1             #define, value: (0x40), line:     771:2  
UCSSEL_2             #define, value: (0x80), line:     772:2  
UCSSEL_3             #define, value: (0xC0), line:     773:2  
UCSTOE               #define, value: (0x08), line:     859:2  
UCSTPIE              #define, value: (0x04), line:     825:2  
UCSTPIFG             #define, value: (0x04), line:     833:2  
UCSTTIE              #define, value: (0x02), line:     826:2  
UCSTTIFG             #define, value: (0x02), line:     834:2  
UCSWRST              #define, value: (0x01), line:     755:2  
UCSYNC               #define, value: (0x01), line:     730:2  
UCTR                 #define, value: (0x10), line:     766:2  
UCTXADDR             #define, value: (0x04), line:     753:2  
UCTXBRK              #define, value: (0x02), line:     754:2  
UCTXNACK             #define, value: (0x08), line:     767:2  
UCTXSTP              #define, value: (0x04), line:     768:2  
UCTXSTT              #define, value: (0x02), line:     769:2  
USCIAB0RX_VECTOR     #define, value: (7 * 2u), line:     967:2      70:11
USCIAB0TX_VECTOR     #define, value: (6 * 2u), line:     966:2  
USERFLASHEND         #define, value: (0xD7FF), line:      32:3      327:4    361:4    381:4    414:4
                                                                   1895:6    142:7
USERFLASHSTART       #define, value: (0xC000), line:      31:3      325:4    359:4    379:4    412:4
                                                                    205:6   1891:6    142:7
                                  - 4e-LP430 -                        Page  172

V                    #define, value: (0x0100u), line:      81:2  
W                    #define, value: R6, line:      47:3       67:4     69:4     77:4     77:4
                                                                     82:4     82:4     92:4     93:4
                                                                     93:4    120:4    121:4    121:4
                                                                    130:4    131:4    131:4    141:4
                                                                    143:4    143:4    151:4    151:4
                                                                    152:4    170:4    172:4    174:4
                                                                    174:4    191:4    191:4    197:4
                                                                    197:4    202:4    202:4    206:4
                                                                    208:4    209:4    209:4    213:4
                                                                    216:4    217:4    217:4    221:4
                                                                    224:4    225:4    225:4    230:4
                                                                    230:4    240:4    240:4    247:4
                                                                    247:4    254:4    254:4    261:4
                                                                    261:4    267:4    267:4    274:4
                                                                    274:4    280:4    280:4    292:4
                                                                    292:4    298:4    298:4    303:4
                                                                    303:4    307:4    308:4    310:4
                                                                    310:4    319:4    320:4    322:4
                                                                    325:4    327:4    333:4    335:4
                                                                    340:4    342:4    352:4    359:4
                                                                    361:4    363:4    364:4    367:4
                                                                    367:4    373:4    376:4    398:4
                                                                    404:4    404:4    408:4    409:4
                                                                    431:4    456:4    469:4    475:4
                                                                    476:4    479:4    480:4    489:4
                                                                    489:4    497:4    497:4    503:4
                                                                    503:4    510:4    510:4    514:4
                                                                    515:4    516:4    517:4    517:4
                                                                    522:4    522:4    527:4    527:4
                                                                    532:4    532:4    537:4    537:4
                                                                    543:4    543:4    548:4    548:4
                                                                    553:4    553:4    558:4    558:4
                                                                    563:4    563:4    568:4    568:4
                                                                    572:4    575:4    575:4    578:4
                                                                    579:4    579:4    583:4    587:4
                                                                    590:4    591:4    591:4    600:4
                                                                    600:4    607:4    607:4    611:4
                                                                    612:4    615:4    615:4    623:4
                                                                    624:4    627:4    627:4    635:4
                                                                    636:4    663:4    663:4    671:4
                                                                    671:4    689:4    689:4    702:4
                                                                    702:4    715:4    715:4    723:4
                                                                    723:4    731:4    731:4    737:4
                                                                    737:4    753:4    754:4    761:4
                                                                    766:4    766:4    778:4    784:4
                                                                    797:4    797:4    805:4    808:4
                                                                    809:4    813:4    813:4    821:4
                                                                    825:4    826:4    830:4    830:4
                                                                    835:4    839:4    842:4    843:4
                                                                    847:4    847:4    860:4    863:4
                                                                    865:4    868:4    870:4    870:4
                                                                    875:4    878:4    880:4    883:4
                                                                    885:4    885:4    890:4    894:4
                                                                    905:4    905:4    947:4    947:4
                                                                    958:4    958:4   1659:6   1663:6
                                                                   1665:6   1665:6   1694:6   1695:6
                                                                   1696:6   1696:6   1829:6   1829:6
                                                                   1836:6   1836:6   1843:6   1843:6
                                                                   1850:6   1850:6   1857:6   1857:6
                                                                   1867:6   1867:6   1970:6   1970:6
                                                                      8:8     11:8     17:8     23:8
                                                                     23:8     29:8     34:8     39:8
                                                                     39:8   154:10   154:10   250:10
                                                                   250:10    31:11    31:11    36:11
                                                                    36:11    55:11    55:11    65:11
                                                                    65:11
WAIT                 #define, value: (0x0008u), line:     449:2  
WDTCNTCL             #define, value: (0x0008u), line:     898:2  
WDTCTL_              #define, value: (0x0120u), line:     892:2      893:2
WDTHOLD              #define, value: (0x0080u), line:     902:2  
WDTIE                #define, value: (0x01), line:     129:2  
WDTIFG               #define, value: (0x01), line:     136:2  
WDTIS0               #define, value: (0x0001u), line:     895:2  
WDTIS1               #define, value: (0x0002u), line:     896:2  
WDTNMI               #define, value: (0x0020u), line:     900:2  
WDTNMIES             #define, value: (0x0040u), line:     901:2  
WDTPW                #define, value: (0x5A00u), line:     904:2  
                                  - 4e-LP430 -                        Page  173

WDTSSEL              #define, value: (0x0004u), line:     897:2  
WDTTMSEL             #define, value: (0x0010u), line:     899:2  
WDT_ADLY_1000        #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL), line:     913:2  
WDT_ADLY_16          #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1), line:     915:2  
WDT_ADLY_1_9         #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0), line:     916:2  
WDT_ADLY_250         #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0), line:     914:2  
WDT_ARST_1000        #define, value: (WDTPW+WDTCNTCL+WDTSSEL), line:     924:2  
WDT_ARST_16          #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1), line:     926:2  
WDT_ARST_1_9         #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0), line:     927:2  
WDT_ARST_250         #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0), line:     925:2  
WDT_MDLY_0_064       #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0), line:     911:2  
WDT_MDLY_0_5         #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1), line:     910:2  
WDT_MDLY_32          #define, value: (WDTPW+WDTTMSEL+WDTCNTCL), line:     908:2  
WDT_MDLY_8           #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0), line:     909:2  
WDT_MRST_0_064       #define, value: (WDTPW+WDTCNTCL+WDTIS1+WDTIS0), line:     922:2  
WDT_MRST_0_5         #define, value: (WDTPW+WDTCNTCL+WDTIS1), line:     921:2  
WDT_MRST_32          #define, value: (WDTPW+WDTCNTCL), line:     919:2  
WDT_MRST_8           #define, value: (WDTPW+WDTCNTCL+WDTIS0), line:     920:2  
WDT_VECTOR           #define, value: (10 * 2u), line:     970:2  
WRT                  #define, value: (0x0040u), line:     422:2      396:4    429:4    464:4     16:8
X                    #define, value: R10, line:      55:3      457:4    471:4    472:4    479:4
                                                                    804:4    806:4    810:4    822:4
                                                                    825:4    836:4    840:4    841:4
                                                                    843:4    859:4    861:4    866:4
                                                                    869:4    874:4    876:4    881:4
                                                                    884:4    891:4    894:4    896:4
                                                                   125:10   125:10   131:10   131:10
                                                                   140:10   140:10   151:10   151:10
                                                                   219:10   219:10   228:10   228:10
                                                                   237:10   237:10   246:10   246:10
XCAP0                #define, value: (0x04), line:     338:2  
XCAP1                #define, value: (0x08), line:     339:2  
XCAP_0               #define, value: (0x00), line:     345:2  
XCAP_1               #define, value: (0x04), line:     346:2  
XCAP_2               #define, value: (0x08), line:     347:2  
XCAP_3               #define, value: (0x0C), line:     348:2  
XT2OF                #define, value: (0x02), line:     337:2  
XT2OFF               #define, value: (0x80), line:     306:2  
XT2S0                #define, value: (0x40), line:     342:2  
XT2S1                #define, value: (0x80), line:     343:2  
XT2S_0               #define, value: (0x00), line:     355:2  
XT2S_1               #define, value: (0x40), line:     356:2  
XT2S_2               #define, value: (0x80), line:     357:2  
XT2S_3               #define, value: (0xC0), line:     358:2  
XTS                  #define, value: (0x40), line:     305:2  
Y                    #define, value: R11, line:      56:3      471:4    474:4    475:4
Z                    #define, value: (0x0002u), line:      79:2  
__430X_CORE__        #define, value: 1, line:         0  
__430_CORE__         #define, value: 0, line:         0  
__A430__             #define, value: 1, line:         0  
__BUILD_NUMBER__     #define,            line:         0  
__CORE__             #define, value: 0, line:         0  
__DATE__             #define,            line:         0         51
__FILE__             #define,            line:         0  
__IAR_SYSTEMS_ASM    #define,            line:         0  
__IAR_SYSTEMS_ASM__  #define,            line:         0  
__LINE__             #define,            line:         0  
__MSP430G2553        #define, value: , line:      16:2  
__MSP430G2553__      #define, value: 1, line:         0  
__MSP430_HAS_ADC10__ #define, value: , line:     161:2  
__MSP430_HAS_BC2__   #define, value: , line:     279:2  
__MSP430_HAS_CAPLUS__ #define, value: , line:     363:2  
__MSP430_HAS_FLASH2__ #define, value: , line:     407:2  
__MSP430_HAS_PORT1_R__ #define, value: , line:     458:2  
__MSP430_HAS_PORT2_R__ #define, value: , line:     459:2  
__MSP430_HAS_PORT3_R__ #define, value: , line:     502:2  
__MSP430_HAS_T1A3__  #define, value: , line:     642:2  
__MSP430_HAS_TA3__   #define, value: , line:     520:2  
__MSP430_HAS_USCI__  #define, value: , line:     674:2  
__MSP430_HAS_WDT__   #define, value: , line:     890:2  
__SUBVERSION__       #define,            line:         0  
__TID__              #define,            line:         0       24:2
__TIME__             #define,            line:         0         51
__VER__              #define,            line:         0  
__msp430             #define, value: , line:       9:1  

Segment             Type 	Mode
----------------------------------------
                                  - 4e-LP430 -                        Page  174

CODE                UNTYPED  	REL 

Label               Mode   Type                   Segment    Value/Offset
------------------------------------------------------------------------------
ABBS                REL    CONST PUB UNTYP.       CODE       B5C 
ABORT               REL    CONST PUB UNTYP.       CODE       1550 
ABORTQUOTE          REL    CONST PUB UNTYP.       CODE       157C 
ACC1                REL    CONST UNTYP.           CODE       E2A 
ACC3                REL    CONST UNTYP.           CODE       E60 
ACC4                REL    CONST UNTYP.           CODE       E6C 
ACC5                REL    CONST UNTYP.           CODE       E70 
ACCEPT              REL    CONST PUB UNTYP.       CODE       E20 
ADC10AE0            ABS    CONST UNTYP.           ASEG       4A 
ADC10CTL0           ABS    CONST UNTYP.           ASEG       1B0 
ADC10CTL1           ABS    CONST UNTYP.           ASEG       1B2 
ADC10DTC0           ABS    CONST UNTYP.           ASEG       48 
ADC10DTC1           ABS    CONST UNTYP.           ASEG       49 
ADC10MEM            ABS    CONST UNTYP.           ASEG       1B4 
ADC10SA             ABS    CONST UNTYP.           ASEG       1BC 
ADRTOIN             REL    CONST PUB UNTYP.       CODE       11D0 
AGAIN               REL    CONST PUB UNTYP.       CODE       17E0 
ALIGNED             REL    CONST PUB UNTYP.       CODE       85E 
ALIGNN              REL    CONST PUB UNTYP.       CODE       844 
ALLOT               REL    CONST PUB UNTYP.       CODE       10DE 
ANDD                REL    CONST PUB UNTYP.       CODE       412 
APP                 REL    CONST PUB UNTYP.       CODE       A1C 
APPCRC              REL    CONST PUB UNTYP.       CODE       1E84 
APPU0               REL    CONST PUB UNTYP.       CODE       B28 
ATXY                REL    CONST PUB UNTYP.       CODE       1C0A 
AppU0               ABS    CONST EXT [013] UNTYP. __EXTERNS  Solved Extern 
BACKSLASH           REL    CONST PUB UNTYP.       CODE       1B7C 
BASE                REL    CONST PUB UNTYP.       CODE       9AC 
BCSCTL1             ABS    CONST UNTYP.           ASEG       57 
BCSCTL2             ABS    CONST UNTYP.           ASEG       58 
BCSCTL3             ABS    CONST UNTYP.           ASEG       53 
BEGIN               REL    CONST PUB UNTYP.       CODE       17BA 
BELL                REL    CONST PUB UNTYP.       CODE       1BC6 
BIN                 REL    CONST PUB UNTYP.       CODE       1C46 
BLANK               REL    CONST PUB UNTYP.       CODE       AA8 
BOOT                REL    CONST PUB UNTYP.       CODE       1EF0 
BOOTIP              REL    CONST PUB UNTYP.       CODE       1EF2 
BRACCHAR            REL    CONST PUB UNTYP.       CODE       15C0 
BRACTICK            REL    CONST PUB UNTYP.       CODE       1728 
BUILDS              REL    CONST PUB UNTYP.       CODE       1618 
CACTL1              ABS    CONST UNTYP.           ASEG       59 
CACTL2              ABS    CONST UNTYP.           ASEG       5A 
CALBC1_12MHZ        ABS    CONST UNTYP.           ASEG       10FB 
CALBC1_16MHZ        ABS    CONST UNTYP.           ASEG       10F9 
CALBC1_1MHZ         ABS    CONST UNTYP.           ASEG       10FF 
CALBC1_8MHZ         ABS    CONST UNTYP.           ASEG       10FD 
CALDCO_12MHZ        ABS    CONST UNTYP.           ASEG       10FA 
CALDCO_16MHZ        ABS    CONST UNTYP.           ASEG       10F8 
CALDCO_1MHZ         ABS    CONST UNTYP.           ASEG       10FE 
CALDCO_8MHZ         ABS    CONST UNTYP.           ASEG       10FC 
CALLL               REL    CONST PUB UNTYP.       CODE       1E32 
CAPD                ABS    CONST UNTYP.           ASEG       5B 
CAPITALIZE          REL    CONST PUB UNTYP.       CODE       12FC 
CAPS                REL    CONST PUB UNTYP.       CODE       A28 
CAPS1               REL    CONST UNTYP.           CODE       1312 
CAPS2               REL    CONST UNTYP.           CODE       1320 
CCOMMA              REL    CONST PUB UNTYP.       CODE       1102 
CCRC                REL    CONST PUB UNTYP.       CODE       1B08 
CELL                REL    CONST PUB UNTYP.       CODE       874 
CELLPLUS            REL    CONST PUB UNTYP.       CODE       882 
CELLS               REL    CONST PUB UNTYP.       CODE       892 
CEXIT               REL    CONST PUB UNTYP.       CODE       938 
CFETCH              REL    CONST PUB UNTYP.       CODE       236 
CHARPLUS            REL    CONST PUB UNTYP.       CODE       89E 
CHARR               REL    CONST PUB UNTYP.       CODE       15AA 
CHARS               REL    CONST PUB UNTYP.       CODE       8AA 
CMOVE               REL    CONST PUB UNTYP.       CODE       6EC 
CMOVEUP             REL    CONST PUB UNTYP.       CODE       710 
CMOVE_1             REL    CONST UNTYP.           CODE       6F6 
CMOVE_X             REL    CONST UNTYP.           CODE       700 
CMOVU_1             REL    CONST UNTYP.           CODE       71E 
CMOVU_X             REL    CONST UNTYP.           CODE       72A 
CODEADR             REL    CONST PUB UNTYP.       CODE       1E20 
CODEE               REL    CONST PUB UNTYP.       CODE       1E02 
                                  - 4e-LP430 -                        Page  175

COLD                REL    CONST PUB UNTYP.       CODE       1F4E 
COLDIP              REL    CONST PUB UNTYP.       CODE       1F50 
COLON               REL    CONST PUB UNTYP.       CODE       1704 
COMMA               REL    CONST PUB UNTYP.       CODE       10EC 
COMMABRANCH         REL    CONST PUB UNTYP.       CODE       94E 
COMMACALL           REL    CONST PUB UNTYP.       CODE       8F4 
COMMACF             REL    CONST PUB UNTYP.       CODE       8DC 
COMMADEST           REL    CONST PUB UNTYP.       CODE       95C 
COMMAJMP            REL    CONST PUB UNTYP.       CODE       908 
COMMANONE           REL    CONST PUB UNTYP.       CODE       986 
COMMAXT             REL    CONST PUB UNTYP.       CODE       8C4 
CONSTANT            REL    CONST PUB UNTYP.       CODE       90 
COR                 REL    CONST PUB UNTYP.       CODE       AF0 
CORPOWERON          ABS    CONST UNTYP.           CODE       186 
CORREST             ABS    CONST UNTYP.           CODE       18E 
COUNT               REL    CONST PUB UNTYP.       CODE       D44 
CR                  REL    CONST PUB UNTYP.       CODE       D6E 
CRC                 REL    CONST PUB UNTYP.       CODE       1B2C 
CREATE              REL    CONST PUB UNTYP.       CODE       162E 
CSTORE              REL    CONST PUB UNTYP.       CODE       244 
CamelForthEnd       REL    CONST UNTYP.           CODE       228E 
DABS                REL    CONST PUB UNTYP.       CODE       BA2 
DCOCTL              ABS    CONST UNTYP.           ASEG       56 
DDP                 REL    CONST PUB UNTYP.       CODE       9C4 
DECIMAL             REL    CONST PUB UNTYP.       CODE       10A4 
DEPTH               REL    CONST PUB UNTYP.       CODE       190A 
DIGITQ              REL    CONST PUB UNTYP.       CODE       134C 
DIV1                REL    CONST UNTYP.           CODE       69A 
DIV2                REL    CONST UNTYP.           CODE       6A0 
DIV3                REL    CONST UNTYP.           CODE       6B4 
DIV4                REL    CONST UNTYP.           CODE       6B6 
DIVIDE              REL    CONST UNTYP.           CODE       694 
DNEG1               REL    CONST UNTYP.           CODE       B98 
DNEGATE             REL    CONST PUB UNTYP.       CODE       B70 
DO                  REL    CONST PUB UNTYP.       CODE       1844 
DOALIAS             REL    CONST PUB UNTYP.       CODE       D0 
DOCODE              REL    CONST UNTYP.           CODE       Not solved 
DOCOLON             REL    CONST PUB UNTYP.       CODE       66 
DOCON               REL    CONST PUB UNTYP.       CODE       98 
DOCR                REL    CONST PUB UNTYP.       CODE       D58 
DOEMIT              REL    CONST PUB UNTYP.       CODE       7C0 
DOES                REL    CONST PUB UNTYP.       CODE       1662 
DOKEY               REL    CONST PUB UNTYP.       CODE       7DC 
DOROM               REL    CONST PUB UNTYP.       CODE       A4 
DOT                 REL    CONST PUB UNTYP.       CODE       1080 
DOTBOOTVERSION      REL    CONST PUB UNTYP.       CODE       1E4A 
DOTCOLD             REL    CONST PUB UNTYP.       CODE       1F38 
DOTERRN             REL    CONST PUB UNTYP.       CODE       DE2 
DOTQUOTE            REL    CONST PUB UNTYP.       CODE       F4C 
DOTS                REL    CONST PUB UNTYP.       CODE       1AC8 
DOTS1               REL    CONST UNTYP.           CODE       1AF8 
DOTS2               REL    CONST UNTYP.           CODE       1B06 
DOTSTATUS           REL    CONST PUB UNTYP.       CODE       14D8 
DOTVER              REL    CONST PUB UNTYP.       CODE       1B90 
DOTWOCON            REL    CONST PUB UNTYP.       CODE       1B66 
DOUSER              REL    CONST PUB UNTYP.       CODE       C0 
DOVAR               REL    CONST PUB UNTYP.       CODE       98 
DROP                REL    CONST PUB UNTYP.       CODE       116 
DTOI                REL    CONST PUB UNTYP.       CODE       370 
DTOI_BYTE           REL    CONST UNTYP.           CODE       3A4 
DTOI_END            REL    CONST UNTYP.           CODE       3AA 
DTOI_LOOP           REL    CONST UNTYP.           CODE       37A 
DTOI_WORD           REL    CONST UNTYP.           CODE       392 
DTOI_X              REL    CONST UNTYP.           CODE       3BC 
DUMP                REL    CONST PUB UNTYP.       CODE       1A5C 
DUP                 REL    CONST PUB UNTYP.       CODE       F0 
ELSS                REL    CONST PUB UNTYP.       CODE       179E 
EMIT                REL    CONST PUB UNTYP.       CODE       80C 
EMITLOOPx           REL    CONST UNTYP.           CODE       7C2 
ENDCODE             REL    CONST PUB UNTYP.       CODE       1E46 
ENDLOOP             REL    CONST PUB UNTYP.       CODE       1860 
ENVIRONMENTQ        REL    CONST PUB UNTYP.       CODE       1928 
EQUAL               REL    CONST PUB UNTYP.       CODE       50E 
ESC0                REL    CONST UNTYP.           CODE       1C31 
ESC1                REL    CONST UNTYP.           CODE       1C34 
ESCPAR              REL    CONST PUB UNTYP.       CODE       1BD0 
EVALUATE            REL    CONST PUB UNTYP.       CODE       14B6 
EXECUTE             REL    CONST PUB UNTYP.       CODE       38 
                                  - 4e-LP430 -                        Page  176

EXIT                REL    CONST PUB UNTYP.       CODE       5E 
FACTORY             REL    CONST PUB UNTYP.       CODE       1F76 
FACTORYIP           REL    CONST PUB UNTYP.       CODE       1F78 
FALSE               REL    CONST PUB UNTYP.       CODE       1C68 
FCTL1               ABS    CONST UNTYP.           ASEG       128 
FCTL2               ABS    CONST UNTYP.           ASEG       12A 
FCTL3               ABS    CONST UNTYP.           ASEG       12C 
FETCH               REL    CONST PUB UNTYP.       CODE       216 
FILL                REL    CONST PUB UNTYP.       CODE       6C8 
FILL_1              REL    CONST UNTYP.           CODE       6D2 
FILL_X              REL    CONST UNTYP.           CODE       6DC 
FIND                REL    CONST PUB UNTYP.       CODE       129C 
FIND1               REL    CONST UNTYP.           CODE       12A2 
FIND2               REL    CONST UNTYP.           CODE       12BA 
FIND3               REL    CONST UNTYP.           CODE       12D8 
FLALIGNED           REL    CONST PUB UNTYP.       CODE       194A 
FLERASE             REL    CONST PUB UNTYP.       CODE       25E 
FLE_1               REL    CONST UNTYP.           CODE       264 
FLE_INFO            REL    CONST UNTYP.           CODE       280 
FLE_OK              REL    CONST UNTYP.           CODE       28C 
FLE_VEC             REL    CONST UNTYP.           CODE       274 
FLE_X               REL    CONST UNTYP.           CODE       2C4 
FL_INFO             REL    CONST UNTYP.           CODE       2BE 
FMMOD1              REL    CONST UNTYP.           CODE       C26 
FMSLASHMOD          REL    CONST PUB UNTYP.       CODE       C00 
FORTHPRO            REL    CONST PUB UNTYP.       CODE       1FAC 
GREATER             REL    CONST PUB UNTYP.       CODE       544 
HEADR               REL    CONST PUB UNTYP.       CODE       15EA 
HERE                REL    CONST PUB UNTYP.       CODE       10CC 
HEX                 REL    CONST PUB UNTYP.       CODE       10B8 
HIDE                REL    CONST PUB UNTYP.       CODE       16B4 
HOLD                REL    CONST PUB UNTYP.       CODE       FC4 
HP                  REL    CONST PUB UNTYP.       CODE       9EC 
IALLOT              REL    CONST PUB UNTYP.       CODE       112E 
ICCOMMA             REL    CONST PUB UNTYP.       CODE       1154 
ICOMMA              REL    CONST PUB UNTYP.       CODE       113C 
ICSTORE             REL    CONST PUB UNTYP.       CODE       324 
ICST_INFO           REL    CONST UNTYP.           CODE       338 
ICST_OK             REL    CONST UNTYP.           CODE       344 
ICST_RAM            REL    CONST UNTYP.           CODE       354 
IDP                 REL    CONST PUB UNTYP.       CODE       A02 
IE1                 ABS    CONST UNTYP.           ASEG       0 
IE2                 ABS    CONST UNTYP.           ASEG       1 
IFF                 REL    CONST PUB UNTYP.       CODE       1776 
IFG1                ABS    CONST UNTYP.           ASEG       2 
IFG2                ABS    CONST UNTYP.           ASEG       3 
IHERE               REL    CONST PUB UNTYP.       CODE       111C 
II                  REL    CONST PUB UNTYP.       CODE       61A 
IMMEDIATE           REL    CONST PUB UNTYP.       CODE       16EE 
IMMEDQ              REL    CONST PUB UNTYP.       CODE       1284 
INFOB               REL    CONST PUB UNTYP.       CODE       AFE 
INFOC               REL    CONST PUB UNTYP.       CODE       B0C 
INFOD               REL    CONST PUB UNTYP.       CODE       B1A 
INTER1              REL    CONST UNTYP.           CODE       1450 
INTER2              REL    CONST UNTYP.           CODE       147C 
INTER3              REL    CONST UNTYP.           CODE       147E 
INTER4              REL    CONST UNTYP.           CODE       1482 
INTER5              REL    CONST UNTYP.           CODE       148E 
INTER6              REL    CONST UNTYP.           CODE       14A2 
INTER8              REL    CONST UNTYP.           CODE       14A2 
INTER9              REL    CONST UNTYP.           CODE       14A6 
INTERPRET           REL    CONST PUB UNTYP.       CODE       1444 
INTERRUPT           REL    CONST PUB UNTYP.       CODE       2114 
INVERT              REL    CONST PUB UNTYP.       CODE       442 
IRXOFF              REL    CONST PUB UNTYP.       CODE       222A 
IRXON               REL    CONST PUB UNTYP.       CODE       2216 
ISQUOTE             REL    CONST PUB UNTYP.       CODE       EF2 
ISTORE              REL    CONST PUB UNTYP.       CODE       2D0 
IST_INFO            REL    CONST UNTYP.           CODE       2E8 
IST_OK              REL    CONST UNTYP.           CODE       2F4 
IST_RAM             REL    CONST UNTYP.           CODE       304 
IST_X               REL    CONST UNTYP.           CODE       316 
IST_X2              REL    CONST UNTYP.           CODE       2028 
ITHERE              REL    CONST PUB UNTYP.       CODE       1E64 
ITOD                REL    CONST PUB UNTYP.       CODE       738 
IWORD               REL    CONST PUB UNTYP.       CODE       F62 
IWORD1              REL    CONST UNTYP.           CODE       F66 
IWORDC              REL    CONST PUB UNTYP.       CODE       F74 
                                  - 4e-LP430 -                        Page  177

JJ                  REL    CONST PUB UNTYP.       CODE       630 
KEY                 REL    CONST PUB UNTYP.       CODE       7FA 
KEYLOOPx            REL    CONST UNTYP.           CODE       7DE 
KEYQ                REL    CONST PUB UNTYP.       CODE       81E 
L$002               REL    CONST UNTYP.           CODE       66A 
L$01                REL    CONST UNTYP.           CODE       672 
L0                  REL    CONST PUB UNTYP.       CODE       A6E 
LATEST              REL    CONST PUB UNTYP.       CODE       9E2 
LDUMP1              REL    CONST UNTYP.           CODE       1A66 
LDUMP2              REL    CONST UNTYP.           CODE       1A80 
LDUMP3              REL    CONST UNTYP.           CODE       1A9E 
LEAV                REL    CONST PUB UNTYP.       CODE       18A6 
LEFTBRACKET         REL    CONST PUB UNTYP.       CODE       1690 
LESS                REL    CONST PUB UNTYP.       CODE       530 
LESSNUM             REL    CONST PUB UNTYP.       CODE       FDC 
LFROM               REL    CONST PUB UNTYP.       CODE       182C 
LITER1              REL    CONST UNTYP.           CODE       1340 
LITERAL             REL    CONST PUB UNTYP.       CODE       132E 
LOO                 REL    CONST PUB UNTYP.       CODE       187E 
LOOP1               REL    CONST UNTYP.           CODE       1866 
LOOP2               REL    CONST UNTYP.           CODE       1874 
LP                  REL    CONST PUB UNTYP.       CODE       9F6 
LPM_WAKE            REL    CONST PUB UNTYP.       CODE       2240 
LSHIFT              REL    CONST PUB UNTYP.       CODE       4AE 
LSH_1               REL    CONST UNTYP.           CODE       4B8 
LSH_X               REL    CONST UNTYP.           CODE       4BE 
LSTACK              ABS    CONST EXT [003] UNTYP. __EXTERNS  Solved Extern 
MACU                REL    CONST UNTYP.           CODE       666 
MARKER              REL    CONST PUB UNTYP.       CODE       1968 
MAX                 REL    CONST PUB UNTYP.       CODE       C98 
MAX1                REL    CONST UNTYP.           CODE       CA4 
MCLK                ABS    CONST UNTYP.           CODE       8 
MEM                 REL    CONST PUB UNTYP.       CODE       1D84 
MEMBOT              REL    CONST PUB UNTYP.       CODE       1D6A 
MEMTOP              REL    CONST PUB UNTYP.       CODE       1D78 
MIN                 REL    CONST PUB UNTYP.       CODE       CB0 
MIN1                REL    CONST UNTYP.           CODE       CBC 
MINUS               REL    CONST PUB UNTYP.       CODE       3FE 
MODD                REL    CONST PUB UNTYP.       CODE       C64 
MOVE                REL    CONST PUB UNTYP.       CODE       18DE 
MOVE1               REL    CONST UNTYP.           CODE       18FA 
MOVE2               REL    CONST UNTYP.           CODE       18FE 
MPLUS               REL    CONST PUB UNTYP.       CODE       3E8 
MPYU                REL    CONST UNTYP.           CODE       662 
MS                  REL    CONST PUB UNTYP.       CODE       1CB4 
MSTAR               REL    CONST PUB UNTYP.       CODE       BB0 
NEGATE              REL    CONST PUB UNTYP.       CODE       454 
NEQUAL              REL    CONST PUB UNTYP.       CODE       7B4 
NEWEST              REL    CONST PUB UNTYP.       CODE       A10 
NEWLINE             REL    CONST PUB UNTYP.       CODE       A58 
NFATOCFA            REL    CONST PUB UNTYP.       CODE       126A 
NFATOLFA            REL    CONST PUB UNTYP.       CODE       1254 
NINIT               REL    CONST PUB UNTYP.       CODE       AE4 
NIP                 REL    CONST PUB UNTYP.       CODE       170 
NODUP               REL    CONST UNTYP.           CODE       10A 
NOOP                REL    CONST PUB UNTYP.       CODE       1938 
NOTEQUAL            REL    CONST PUB UNTYP.       CODE       522 
NUM                 REL    CONST PUB UNTYP.       CODE       1010 
NUMGREATER          REL    CONST PUB UNTYP.       CODE       103C 
NUMS                REL    CONST PUB UNTYP.       CODE       1026 
NUMS1               REL    CONST UNTYP.           CODE       1028 
ONEMINUS            REL    CONST PUB UNTYP.       CODE       472 
ONEMS               REL    CONST PUB UNTYP.       CODE       1C92 
ONEPLUS             REL    CONST PUB UNTYP.       CODE       464 
ORR                 REL    CONST PUB UNTYP.       CODE       420 
OVER                REL    CONST PUB UNTYP.       CODE       13C 
OWNONE              REL    CONST UNTYP.           CODE       21A8 
OWRECV0             REL    CONST UNTYP.           CODE       21F2 
OWRESET             REL    CONST PUB UNTYP.       CODE       2168 
OWSEND0             REL    CONST UNTYP.           CODE       21E0 
OWSLOT              REL    CONST PUB UNTYP.       CODE       21C0 
P1                  REL    CONST PUB UNTYP.       CODE       1DE2 
P1DIR               ABS    CONST UNTYP.           ASEG       22 
P1IE                ABS    CONST UNTYP.           ASEG       25 
P1IES               ABS    CONST UNTYP.           ASEG       24 
P1IFG               ABS    CONST UNTYP.           ASEG       23 
P1IN                ABS    CONST UNTYP.           ASEG       20 
P1OUT               ABS    CONST UNTYP.           ASEG       21 
                                  - 4e-LP430 -                        Page  178

P1REN               ABS    CONST UNTYP.           ASEG       27 
P1SEL               ABS    CONST UNTYP.           ASEG       26 
P1SEL2              ABS    CONST UNTYP.           ASEG       41 
P2                  REL    CONST PUB UNTYP.       CODE       1DEC 
P2DIR               ABS    CONST UNTYP.           ASEG       2A 
P2IE                ABS    CONST UNTYP.           ASEG       2D 
P2IES               ABS    CONST UNTYP.           ASEG       2C 
P2IFG               ABS    CONST UNTYP.           ASEG       2B 
P2IN                ABS    CONST UNTYP.           ASEG       28 
P2OUT               ABS    CONST UNTYP.           ASEG       29 
P2REN               ABS    CONST UNTYP.           ASEG       2F 
P2SEL               ABS    CONST UNTYP.           ASEG       2E 
P2SEL2              ABS    CONST UNTYP.           ASEG       42 
P3                  REL    CONST PUB UNTYP.       CODE       1DF6 
P3DIR               ABS    CONST UNTYP.           ASEG       1A 
P3IN                ABS    CONST UNTYP.           ASEG       18 
P3OUT               ABS    CONST UNTYP.           ASEG       19 
P3REN               ABS    CONST UNTYP.           ASEG       10 
P3SEL               ABS    CONST UNTYP.           ASEG       1B 
P3SEL2              ABS    CONST UNTYP.           ASEG       43 
PAD                 REL    CONST PUB UNTYP.       CODE       A64 
PADAREA             ABS    CONST EXT [002] UNTYP. __EXTERNS  Solved Extern 
PAGEE               REL    CONST PUB UNTYP.       CODE       1C2A 
PAREN               REL    CONST PUB UNTYP.       CODE       15D4 
PARENUDOTR          REL    CONST PUB UNTYP.       CODE       19F6 
PARENVECWIPE        REL    CONST PUB UNTYP.       CODE       203C 
PARENWIPE           REL    CONST PUB UNTYP.       CODE       1FD8 
PARSE               REL    CONST PUB UNTYP.       CODE       11F2 
PARSE1              REL    CONST UNTYP.           CODE       120E 
PLUS                REL    CONST PUB UNTYP.       CODE       3C8 
PLUSLOOP            REL    CONST PUB UNTYP.       CODE       1892 
PLUSSTORE           REL    CONST PUB UNTYP.       CODE       3D6 
PN                  REL    CONST PUB UNTYP.       CODE       1BE0 
POST1               REL    CONST UNTYP.           CODE       176C 
POST2               REL    CONST UNTYP.           CODE       176E 
POSTPONE            REL    CONST PUB UNTYP.       CODE       1742 
PROFUSE             REL    CONST UNTYP.           CODE       0 
PROFUSEADR          REL    CONST PUB UNTYP.       CODE       1F9C 
PROMPT              REL    CONST PUB UNTYP.       CODE       14E4 
PROMPT1             REL    CONST UNTYP.           CODE       1516 
PSTACK              ABS    CONST EXT [004] UNTYP. __EXTERNS  Solved Extern 
PUSHTOS             REL    CONST UNTYP.           CODE       F2 
QABO1               REL    CONST UNTYP.           CODE       156E 
QABORT              REL    CONST PUB UNTYP.       CODE       1562 
QDNEGATE            REL    CONST PUB UNTYP.       CODE       B8E 
QDUP                REL    CONST PUB UNTYP.       CODE       104 
QNEG1               REL    CONST UNTYP.           CODE       B52 
QNEGATE             REL    CONST PUB UNTYP.       CODE       B48 
QNUM1               REL    CONST UNTYP.           CODE       1424 
QNUM2               REL    CONST UNTYP.           CODE       1430 
QNUM3               REL    CONST UNTYP.           CODE       1434 
QNUMBER             REL    CONST PUB UNTYP.       CODE       1400 
QQ                  REL    CONST PUB UNTYP.       CODE       1DD4 
QSIGN               REL    CONST PUB UNTYP.       CODE       1388 
QSIGN1              REL    CONST UNTYP.           CODE       13B2 
QSTACK              REL    CONST PUB UNTYP.       CODE       116E 
QTIB                REL    CONST PUB UNTYP.       CODE       E02 
QTIB1               REL    CONST UNTYP.           CODE       E14 
QUIT                REL    CONST PUB UNTYP.       CODE       1520 
QUIT1               REL    CONST UNTYP.           CODE       1532 
QUITIP              REL    CONST PUB UNTYP.       CODE       1522 
RAMDICT             ABS    CONST EXT [007] UNTYP. __EXTERNS  Solved Extern 
RECURSE             REL    CONST PUB UNTYP.       CODE       167E 
REPEAT              REL    CONST PUB UNTYP.       CODE       1808 
RESETADR            REL    CONST PUB UNTYP.       CODE       1D5C 
REVEAL              REL    CONST PUB UNTYP.       CODE       16D4 
RFETCH              REL    CONST PUB UNTYP.       CODE       1A2 
RFROM               REL    CONST PUB UNTYP.       CODE       18E 
RIGHTBRACKET        REL    CONST PUB UNTYP.       CODE       16A0 
RLAA                REL    CONST PUB UNTYP.       CODE       572 
ROMDICT             ABS    CONST EXT [-001] UNTYP. __EXTERNS  Solved Extern 
ROT                 REL    CONST PUB UNTYP.       CODE       154 
RPFETCH             REL    CONST PUB UNTYP.       CODE       1E0 
RPSTORE             REL    CONST PUB UNTYP.       CODE       1F6 
RSHIFT              REL    CONST PUB UNTYP.       CODE       4CE 
RSH_1               REL    CONST UNTYP.           CODE       4D8 
RSH_X               REL    CONST UNTYP.           CODE       4E0 
RSTACK              ABS    CONST EXT [005] UNTYP. __EXTERNS  Solved Extern 
                                  - 4e-LP430 -                        Page  179

RZERO               REL    CONST PUB UNTYP.       CODE       A78 
S0                  REL    CONST PUB UNTYP.       CODE       A82 
S2                  REL    CONST PUB UNTYP.       CODE       2144 
SAVE                REL    CONST PUB UNTYP.       CODE       1EB2 
SCAN                REL    CONST PUB UNTYP.       CODE       768 
SCAN_1              REL    CONST UNTYP.           CODE       772 
SCAN_X              REL    CONST UNTYP.           CODE       77C 
SEMICOLON           REL    CONST PUB UNTYP.       CODE       1716 
SEMIPN              REL    CONST PUB UNTYP.       CODE       1BF4 
SEQUAL              REL    CONST PUB UNTYP.       CODE       78C 
SEQU_1              REL    CONST UNTYP.           CODE       796 
SEQU_X              REL    CONST UNTYP.           CODE       7AA 
SETIRX              REL    CONST PUB UNTYP.       CODE       2282 
SIGN                REL    CONST PUB UNTYP.       CODE       1054 
SIGN1               REL    CONST UNTYP.           CODE       1062 
SKIP                REL    CONST PUB UNTYP.       CODE       742 
SKIP_1              REL    CONST UNTYP.           CODE       74C 
SKIP_X              REL    CONST UNTYP.           CODE       756 
SLASH               REL    CONST PUB UNTYP.       CODE       C54 
SLASHMOD            REL    CONST PUB UNTYP.       CODE       C42 
SLASHSTRING         REL    CONST PUB UNTYP.       CODE       119C 
SMISMATCH           REL    CONST UNTYP.           CODE       7A4 
SMSLASHREM          REL    CONST PUB UNTYP.       CODE       BD2 
SOURCE              REL    CONST PUB UNTYP.       CODE       1188 
SPACE               REL    CONST PUB UNTYP.       CODE       D82 
SPACES              REL    CONST PUB UNTYP.       CODE       D94 
SPCS1               REL    CONST UNTYP.           CODE       D96 
SPCS2               REL    CONST UNTYP.           CODE       DA4 
SPFETCH             REL    CONST PUB UNTYP.       CODE       1B8 
SPSTORE             REL    CONST PUB UNTYP.       CODE       1CE 
SQEST               REL    CONST PUB UNTYP.       CODE       2152 
SQUOTE              REL    CONST PUB UNTYP.       CODE       F1A 
SSMOD               REL    CONST PUB UNTYP.       CODE       C76 
STAR                REL    CONST PUB UNTYP.       CODE       C32 
STARSLASH           REL    CONST PUB UNTYP.       CODE       C88 
STATE               REL    CONST PUB UNTYP.       CODE       9BA 
STOD                REL    CONST PUB UNTYP.       CODE       B34 
STORCOLON           REL    CONST PUB UNTYP.       CODE       91E 
STORE               REL    CONST PUB UNTYP.       CODE       224 
STORECF             REL    CONST PUB UNTYP.       CODE       8D0 
STOREDEST           REL    CONST PUB UNTYP.       CODE       970 
SWAP                REL    CONST PUB UNTYP.       CODE       126 
SWAPBYTES           REL    CONST PUB UNTYP.       CODE       480 
TA0CCR0             ABS    CONST UNTYP.           ASEG       172 
TA0CCR1             ABS    CONST UNTYP.           ASEG       174 
TA0CCR2             ABS    CONST UNTYP.           ASEG       176 
TA0CCTL0            ABS    CONST UNTYP.           ASEG       162 
TA0CCTL1            ABS    CONST UNTYP.           ASEG       164 
TA0CCTL2            ABS    CONST UNTYP.           ASEG       166 
TA0CTL              ABS    CONST UNTYP.           ASEG       160 
TA0IV               ABS    CONST UNTYP.           ASEG       12E 
TA0R                ABS    CONST UNTYP.           ASEG       170 
TA1CCR0             ABS    CONST UNTYP.           ASEG       192 
TA1CCR1             ABS    CONST UNTYP.           ASEG       194 
TA1CCR2             ABS    CONST UNTYP.           ASEG       196 
TA1CCTL0            ABS    CONST UNTYP.           ASEG       182 
TA1CCTL1            ABS    CONST UNTYP.           ASEG       184 
TA1CCTL2            ABS    CONST UNTYP.           ASEG       186 
TA1CTL              ABS    CONST UNTYP.           ASEG       180 
TA1IV               ABS    CONST UNTYP.           ASEG       11E 
TA1R                ABS    CONST UNTYP.           ASEG       190 
TABLE               REL    CONST PUB UNTYP.       CODE       1C76 
THEN                REL    CONST PUB UNTYP.       CODE       178C 
TIB                 REL    CONST PUB UNTYP.       CODE       A8E 
TIBAREA             ABS    CONST EXT [006] UNTYP. __EXTERNS  Solved Extern 
TIBSIZE             REL    CONST PUB UNTYP.       CODE       A9E 
TIB_SIZE            ABS    CONST EXT [008] UNTYP. __EXTERNS  Solved Extern 
TICK                REL    CONST PUB UNTYP.       CODE       158E 
TICKSOURCE          REL    CONST PUB UNTYP.       CODE       9D4 
TOBODY              REL    CONST PUB UNTYP.       CODE       8B6 
TOCOUNTED           REL    CONST PUB UNTYP.       CODE       11B8 
TODIGIT             REL    CONST PUB UNTYP.       CODE       FF0 
TOIN                REL    CONST PUB UNTYP.       CODE       9A0 
TOL                 REL    CONST PUB UNTYP.       CODE       1816 
TONUM1              REL    CONST UNTYP.           CODE       13C2 
TONUM2              REL    CONST UNTYP.           CODE       13D8 
TONUM3              REL    CONST UNTYP.           CODE       13F2 
TONUMBER            REL    CONST PUB UNTYP.       CODE       13C0 
                                  - 4e-LP430 -                        Page  180

TOPSEG              REL    CONST PUB UNTYP.       CODE       1DBC 
TOR                 REL    CONST PUB UNTYP.       CODE       17E 
TOSFALSE            REL    CONST UNTYP.           CODE       516 
TOSTRUE             REL    CONST UNTYP.           CODE       538 
TRUE                REL    CONST PUB UNTYP.       CODE       1C5A 
TUCK                REL    CONST PUB UNTYP.       CODE       208 
TWOCONSTANT         REL    CONST PUB UNTYP.       CODE       1B5C 
TWODROP             REL    CONST PUB UNTYP.       CODE       CF2 
TWODUP              REL    CONST PUB UNTYP.       CODE       D02 
TWOFETCH            REL    CONST PUB UNTYP.       CODE       CC6 
TWOOVER             REL    CONST PUB UNTYP.       CODE       D2A 
TWOSLASH            REL    CONST PUB UNTYP.       CODE       49C 
TWOSTAR             REL    CONST PUB UNTYP.       CODE       48E 
TWOSTORE            REL    CONST PUB UNTYP.       CODE       CDA 
TWOSWAP             REL    CONST PUB UNTYP.       CODE       D14 
TYP                 REL    CONST PUB UNTYP.       CODE       E82 
TYP3                REL    CONST UNTYP.           CODE       E92 
TYP4                REL    CONST UNTYP.           CODE       EA0 
TYP5                REL    CONST UNTYP.           CODE       EA2 
U0                  REL    CONST PUB UNTYP.       CODE       994 
UAREA               ABS    CONST EXT [001] UNTYP. __EXTERNS  Solved Extern 
UAREA_SIZE          ABS    CONST EXT [-001] UNTYP. __EXTERNS  Solved Extern 
UCA0ABCTL           ABS    CONST UNTYP.           ASEG       5D 
UCA0BR0             ABS    CONST UNTYP.           ASEG       62 
UCA0BR1             ABS    CONST UNTYP.           ASEG       63 
UCA0CTL0            ABS    CONST UNTYP.           ASEG       60 
UCA0CTL1            ABS    CONST UNTYP.           ASEG       61 
UCA0IRRCTL          ABS    CONST UNTYP.           ASEG       5F 
UCA0IRTCTL          ABS    CONST UNTYP.           ASEG       5E 
UCA0MCTL            ABS    CONST UNTYP.           ASEG       64 
UCA0RXBUF           ABS    CONST UNTYP.           ASEG       66 
UCA0STAT            ABS    CONST UNTYP.           ASEG       65 
UCA0TXBUF           ABS    CONST UNTYP.           ASEG       67 
UCB0BR0             ABS    CONST UNTYP.           ASEG       6A 
UCB0BR1             ABS    CONST UNTYP.           ASEG       6B 
UCB0CTL0            ABS    CONST UNTYP.           ASEG       68 
UCB0CTL1            ABS    CONST UNTYP.           ASEG       69 
UCB0I2CIE           ABS    CONST UNTYP.           ASEG       6C 
UCB0I2COA           ABS    CONST UNTYP.           ASEG       118 
UCB0I2CSA           ABS    CONST UNTYP.           ASEG       11A 
UCB0RXBUF           ABS    CONST UNTYP.           ASEG       6E 
UCB0STAT            ABS    CONST UNTYP.           ASEG       6D 
UCB0TXBUF           ABS    CONST UNTYP.           ASEG       6F 
UDOT                REL    CONST PUB UNTYP.       CODE       106A 
UDOTR               REL    CONST PUB UNTYP.       CODE       1A16 
UDSLASHMOD          REL    CONST PUB UNTYP.       CODE       F88 
UDSTAR              REL    CONST PUB UNTYP.       CODE       FA6 
UGREATER            REL    CONST PUB UNTYP.       CODE       562 
UINIT               REL    CONST PUB UNTYP.       CODE       AB6 
ULESS               REL    CONST PUB UNTYP.       CODE       552 
UMAX                REL    CONST PUB UNTYP.       CODE       DC8 
UMAX1               REL    CONST UNTYP.           CODE       DD4 
UMIN                REL    CONST PUB UNTYP.       CODE       DB0 
UMIN1               REL    CONST UNTYP.           CODE       DBC 
UMSLASHMOD          REL    CONST PUB UNTYP.       CODE       68E 
UMSTAR              REL    CONST PUB UNTYP.       CODE       65E 
UNLOOP              REL    CONST PUB UNTYP.       CODE       64C 
UNTIL               REL    CONST PUB UNTYP.       CODE       17CA 
UNUSED              REL    CONST PUB UNTYP.       CODE       1D98 
UP                  ABS    CONST EXT [000] UNTYP. __EXTERNS  Solved Extern 
UPC                 REL    CONST PUB UNTYP.       CODE       12DA 
UPC1                REL    CONST UNTYP.           CODE       12F4 
USER                REL    CONST PUB UNTYP.       CODE       B8 
USEREMIT            REL    CONST PUB UNTYP.       CODE       A48 
USERKEY             REL    CONST PUB UNTYP.       CODE       A38 
VALIDQ              REL    CONST PUB UNTYP.       CODE       1E9C 
VARAREA             ABS    CONST EXT [009] UNTYP. __EXTERNS  Solved Extern 
VARBOT              REL    CONST PUB UNTYP.       CODE       1DAE 
VARIABLE            REL    CONST PUB UNTYP.       CODE       7A 
VAR_SIZE            ABS    CONST EXT [010] UNTYP. __EXTERNS  Solved Extern 
VECBACK             REL    CONST PUB UNTYP.       CODE       20D0 
VECBOT              REL    CONST PUB UNTYP.       CODE       1DCA 
VECRESTORE          REL    CONST PUB UNTYP.       CODE       20B4 
VECSAVE             REL    CONST PUB UNTYP.       CODE       2090 
VECSTORE            REL    CONST PUB UNTYP.       CODE       1FFA 
VECWIPE             REL    CONST PUB UNTYP.       CODE       2076 
WARM                REL    CONST PUB UNTYP.       CODE       1F2A 
WDS1                REL    CONST UNTYP.           CODE       19C4 
                                  - 4e-LP430 -                        Page  181

WDS2                REL    CONST UNTYP.           CODE       19D8 
WDS3                REL    CONST UNTYP.           CODE       19F2 
WDTCTL              ABS    CONST UNTYP.           ASEG       120 
WHILE               REL    CONST PUB UNTYP.       CODE       17F6 
WIPE                REL    CONST PUB UNTYP.       CODE       1FC0 
WITHIN              REL    CONST PUB UNTYP.       CODE       18C6 
WORDD               REL    CONST PUB UNTYP.       CODE       1220 
WORDS               REL    CONST PUB UNTYP.       CODE       19BE 
XDOES               REL    CONST PUB UNTYP.       CODE       164A 
XISQUOTE            REL    CONST PUB UNTYP.       CODE       EAE 
XORR                REL    CONST PUB UNTYP.       CODE       430 
XSQUOTE             REL    CONST PUB UNTYP.       CODE       EC6 
ZERO                REL    CONST PUB UNTYP.       CODE       836 
ZEROEQUAL           REL    CONST PUB UNTYP.       CODE       4EC 
ZEROLESS            REL    CONST PUB UNTYP.       CODE       4FC 
ZEROS               REL    CONST PUB UNTYP.       CODE       1A3C 
ZEROS1              REL    CONST UNTYP.           CODE       1A3E 
ZEROS2              REL    CONST UNTYP.           CODE       1A50 
ZEROUDOTR           REL    CONST PUB UNTYP.       CODE       1A28 
__MSP430G2203__     ABS    CONST UNTYP.           ASEG       Not solved 
abort1              REL    CONST UNTYP.           CODE       1552 
boot1               REL    CONST UNTYP.           CODE       1F20 
bran                REL    CONST PUB UNTYP.       CODE       58E 
cclr                REL    CONST PUB UNTYP.       CODE       1D0C 
ccrc1               REL    CONST UNTYP.           CODE       1B14 
ccrc2               REL    CONST UNTYP.           CODE       1B1C 
cget                REL    CONST PUB UNTYP.       CODE       1D3C 
cget1               REL    CONST UNTYP.           CODE       1D48 
cget2               REL    CONST UNTYP.           CODE       1D4A 
cor                 ABS    CONST EXT [011] UNTYP. __EXTERNS  Solved Extern 
crcval              ABS    CONST EXT [018] UNTYP. __EXTERNS  Solved Extern 
cset                REL    CONST PUB UNTYP.       CODE       1CE0 
ctoggle             REL    CONST PUB UNTYP.       CODE       1D26 
doboot0             REL    CONST UNTYP.           CODE       1E4F 
doboot1             REL    CONST UNTYP.           CODE       1E56 
dobran              REL    CONST UNTYP.           CODE       590 
docreate            REL    CONST PUB UNTYP.       CODE       98 
dodoes              REL    CONST PUB UNTYP.       CODE       D4 
donext              REL    CONST UNTYP.           CODE       7EE 
donoop              REL    CONST UNTYP.           CODE       7EE 
dotcold0            REL    CONST UNTYP.           CODE       1F3D 
dotcold1            REL    CONST UNTYP.           CODE       1F42 
green               REL    CONST PUB UNTYP.       CODE       2138 
ih1                 REL    CONST UNTYP.           CODE       1E68 
infoB               ABS    CONST EXT [012] UNTYP. __EXTERNS  Solved Extern 
infoC               ABS    CONST EXT [014] UNTYP. __EXTERNS  Solved Extern 
infoD               ABS    CONST EXT [015] UNTYP. __EXTERNS  Solved Extern 
intseg              ABS    CONST EXT [016] UNTYP. __EXTERNS  Solved Extern 
intvecs             ABS    CONST EXT [017] UNTYP. __EXTERNS  Solved Extern 
invalid             REL    CONST UNTYP.           CODE       1F02 
lastword            REL    CONST PUB UNTYP.       CODE       227B 
link                REL    VAR UNTYP.             CODE       227B 
lit                 REL    CONST PUB UNTYP.       CODE       48 
lpm_wake            REL    CONST UNTYP.           CODE       2244 
ms1                 REL    CONST UNTYP.           CODE       1CBA 
nullirq             ABS    CONST EXT [-001] UNTYP. __EXTERNS  Solved Extern 
onems1              REL    CONST UNTYP.           CODE       1C9C 
onems2              REL    CONST UNTYP.           CODE       1CA4 
pcrc1               REL    CONST UNTYP.           CODE       1B3C 
pcrc2               REL    CONST UNTYP.           CODE       1B4A 
pcrc3               REL    CONST UNTYP.           CODE       1B4C 
qbran               REL    CONST PUB UNTYP.       CODE       5A2 
red                 REL    CONST PUB UNTYP.       CODE       2128 
reset               ABS    CONST EXT [020] UNTYP. __EXTERNS  Solved Extern 
reset1              REL    CONST UNTYP.           CODE       1F10 
resetvec            REL    CONST EXT [019] UNTYP. CODE       Solved Extern 
setlpm0             REL    CONST PUB UNTYP.       CODE       226A 
setlpm4             REL    CONST PUB UNTYP.       CODE       2254 
stamp               REL    CONST UNTYP.           CODE       16 
stamp0              REL    CONST UNTYP.           CODE       17 
stampend            REL    CONST UNTYP.           CODE       2D 
uareasize           ABS    CONST UNTYP.           CODE       22 
uinitend            REL    CONST UNTYP.           CODE       ADA 
uinitstart          REL    CONST UNTYP.           CODE       AB8 
valid               REL    CONST UNTYP.           CODE       1F00 
vback1              REL    CONST UNTYP.           CODE       20DA 
vback2              REL    CONST UNTYP.           CODE       20FC 
ver0                REL    CONST UNTYP.           CODE       3 
                                  - 4e-LP430 -                        Page  182

verend              REL    CONST UNTYP.           CODE       16 
version             REL    CONST UNTYP.           CODE       2 
warm0               REL    CONST UNTYP.           CODE       1F2F 
warm1               REL    CONST UNTYP.           CODE       1F34 
wclr                REL    CONST PUB UNTYP.       CODE       1CF6 
wipe1               REL    CONST UNTYP.           CODE       1FCC 
wipmsg0             REL    CONST UNTYP.           CODE       1FE7 
wipmsg1             REL    CONST UNTYP.           CODE       1FEE 
wset                REL    CONST PUB UNTYP.       CODE       1CCA 
xdo                 REL    CONST PUB UNTYP.       CODE       5B8 
xloop               REL    CONST PUB UNTYP.       CODE       5DE 
xplusloop           REL    CONST PUB UNTYP.       CODE       5FE 


##############################
#          CRC:E3DB          #
#        Errors:   0         #
#        Warnings: 0         #
#        Bytes: 8846         #
##############################