From 0e5d64b40c1f3e8811dec8614e6aa1b99ad97802 Mon Sep 17 00:00:00 2001 From: Jean-Michel THOORENS Date: Tue, 11 Jun 2019 14:16:57 +0200 Subject: [PATCH] Ver 301 --- ADDON/ANS_COMPLEMENT.asm | 221 +- ADDON/FixPoint.asm | 5 +- ADDON/SD_TOOLS.asm | 138 +- ADDON/UTILITY.asm | 89 +- MSP430-FORTH/BOOT.4th => BOOT.4th | 0 FastForth.pdf | Bin 103990 -> 103378 bytes FastForthWords.txt | 2 +- MSP430-FORTH/ANS_COMP.f | 355 +- MSP430-FORTH/CHNGBAUD.4th | 211 - MSP430-FORTH/CHNGBAUD.f | 71 + MSP430-FORTH/CORDIC.f | 88 +- MSP430-FORTH/CORETEST.4TH | 18 +- MSP430-FORTH/FF_SPECS.4th | 117 - MSP430-FORTH/FF_SPECS.f | 174 +- MSP430-FORTH/FixPoint.f | 83 +- MSP430-FORTH/MSP_EXP430FR5994/ANS_COMP.4TH | 250 +- MSP430-FORTH/MSP_EXP430FR5994/CHNGBAUD.4TH | 57 + MSP430-FORTH/MSP_EXP430FR5994/CORDIC.4TH | 71 +- MSP430-FORTH/MSP_EXP430FR5994/FF_SPECS.4TH | 158 +- MSP430-FORTH/MSP_EXP430FR5994/FIXPOINT.4TH | 74 +- MSP430-FORTH/MSP_EXP430FR5994/MISC/TESTASM.4TH | 170 +- MSP430-FORTH/MSP_EXP430FR5994/PROG100K.4TH | 29834 +++----------- MSP430-FORTH/MSP_EXP430FR5994/RC5TOLCD.4TH | 146 +- MSP430-FORTH/MSP_EXP430FR5994/RTC.4TH | 70 +- MSP430-FORTH/MSP_EXP430FR5994/SD_TEST.4TH | 83 +- MSP430-FORTH/MSP_EXP430FR5994/SD_TOOLS.4TH | 126 +- MSP430-FORTH/MSP_EXP430FR5994/TESTXASM.4TH | 180 +- MSP430-FORTH/MSP_EXP430FR5994/TSTWORDS.4TH | 18 +- MSP430-FORTH/MSP_EXP430FR5994/UTILITY.4TH | 101 +- MSP430-FORTH/PROG100k.f | 49416 +++++++---------------- MSP430-FORTH/RC5toLCD.f | 252 +- MSP430-FORTH/RTC.f | 59 +- MSP430-FORTH/SD_TEST.f | 100 +- MSP430-FORTH/SD_TOOLS.f | 143 +- MSP430-FORTH/TESTASM.F | 191 +- MSP430-FORTH/TESTXASM.F | 201 +- MSP430-FORTH/TSTWORDS.4th | 90 - MSP430-FORTH/UTILITY.f | 124 +- MSP430-FORTH/lib/I2C_Slave_to_LCD_2x20.f | 14 +- MSP430-FORTH/lib/LCD_2x20.f | 14 +- README.md | 61 +- SciTEDirectory.properties | 10 +- binaries/CHIPSTICK_FR2433_16MHz.txt | 714 +- binaries/CHIPSTICK_FR2433_1MHz.txt | 710 +- binaries/CHIPSTICK_FR2433_4MHz.txt | 403 - binaries/CHIPSTICK_FR2433_8MHz.txt | 712 +- binaries/LP_MSP430FR2476_16MHz.txt | 366 + binaries/LP_MSP430FR2476_1MHz.txt | 365 + binaries/LP_MSP430FR2476_8MHz.txt | 365 + binaries/Log/log.txt | 138 + binaries/MSP_EXP430FR2355_16MHz.txt | 721 +- binaries/MSP_EXP430FR2355_1MHz.txt | 719 +- binaries/MSP_EXP430FR2355_24MHz.txt | 721 +- binaries/MSP_EXP430FR2355_4MHz.txt | 404 - binaries/MSP_EXP430FR2355_8MHz.txt | 719 +- binaries/MSP_EXP430FR2433_16MHz.txt | 721 +- binaries/MSP_EXP430FR2433_1MHz.txt | 719 +- binaries/MSP_EXP430FR2433_4MHz.txt | 403 - binaries/MSP_EXP430FR2433_8MHz.txt | 719 +- binaries/MSP_EXP430FR4133_16MHz.txt | 733 +- binaries/MSP_EXP430FR4133_1MHz.txt | 731 +- binaries/MSP_EXP430FR4133_4MHz.txt | 408 - binaries/MSP_EXP430FR4133_8MHz.txt | 731 +- binaries/MSP_EXP430FR5739_16MHz.txt | 711 +- binaries/MSP_EXP430FR5739_1MHz.txt | 709 +- binaries/MSP_EXP430FR5739_24MHz.txt | 711 +- binaries/MSP_EXP430FR5739_4MHz.txt | 405 - binaries/MSP_EXP430FR5739_8MHz.txt | 713 +- binaries/MSP_EXP430FR5969_16MHz.txt | 880 +- binaries/MSP_EXP430FR5969_1MHz.txt | 880 +- binaries/MSP_EXP430FR5969_4MHz.txt | 524 - binaries/MSP_EXP430FR5969_8MHz.txt | 877 +- binaries/MSP_EXP430FR5994.txt | 671 + binaries/MSP_EXP430FR5994_16MHz.txt | 1367 +- binaries/MSP_EXP430FR5994_1MHz.txt | 1365 +- binaries/MSP_EXP430FR5994_4MHz.txt | 709 - binaries/MSP_EXP430FR5994_8MHz.txt | 1361 +- binaries/MSP_EXP430FR6989_16MHz.txt | 993 +- binaries/MSP_EXP430FR6989_1MHz.txt | 991 +- binaries/MSP_EXP430FR6989_4MHz.txt | 526 - binaries/MSP_EXP430FR6989_8MHz.txt | 991 +- config/Preprocess.bat | 8 +- config/Select.bat | 4 +- config/SendFile.ttl | 8 +- config/SendToSD.ttl | 4 +- forthMSP430FR.asm | 1085 +- forthMSP430FR_ASM.asm | 964 +- forthMSP430FR_CONDCOMP.asm | 10 +- forthMSP430FR_EXTD_ASM.asm | 1433 +- forthMSP430FR_HALFDUPLEX.asm | 75 +- forthMSP430FR_SD_LOAD.asm | 6 +- forthMSP430FR_SD_LowLvl.asm | 9 +- forthMSP430FR_SD_RW.asm | 20 +- inc/CHIPSTICK_FR2433.pat | 10 +- inc/FastForthREGtoTI.pat | 3 + inc/LP_MSP430FR2476.asm | 499 + inc/LP_MSP430FR2476.pat | 347 + inc/MSP430FR2355.pat | 21 +- inc/MSP430FR2433.pat | 21 +- inc/MSP430FR2476.inc | 387 + inc/MSP430FR2476.pat | 766 + inc/MSP430FR2633.pat | 21 +- inc/MSP430FR4133.pat | 21 +- inc/MSP430FR5738.inc | 10 +- inc/MSP430FR5738.pat | 43 +- inc/MSP430FR5739.pat | 22 +- inc/MSP430FR5948.pat | 22 +- inc/MSP430FR5969.inc | 2 +- inc/MSP430FR5969.pat | 21 +- inc/MSP430FR5994.pat | 24 +- inc/MSP430FR6989.pat | 25 +- inc/MSP_EXP430FR2355.asm | 28 +- inc/MSP_EXP430FR2355.pat | 42 +- inc/MSP_EXP430FR2433.asm | 9 +- inc/MSP_EXP430FR2433.pat | 18 +- inc/MSP_EXP430FR4133.asm | 3 +- inc/MSP_EXP430FR4133.pat | 16 +- inc/MSP_EXP430FR5739.asm | 14 +- inc/MSP_EXP430FR5739.pat | 4 +- inc/MSP_EXP430FR5969.asm | 50 +- inc/MSP_EXP430FR5969.pat | 4 +- inc/MSP_EXP430FR5994.asm | 13 +- inc/MSP_EXP430FR5994.pat | 4 +- inc/MSP_EXP430FR6989.asm | 8 +- inc/MSP_EXP430FR6989.pat | 4 +- inc/TargetInit.asm | 3 + inc/ThingsInFirst.inc | 174 +- 127 files changed, 38959 insertions(+), 78517 deletions(-) rename MSP430-FORTH/BOOT.4th => BOOT.4th (100%) delete mode 100644 MSP430-FORTH/CHNGBAUD.4th delete mode 100644 MSP430-FORTH/FF_SPECS.4th delete mode 100644 MSP430-FORTH/TSTWORDS.4th delete mode 100644 binaries/CHIPSTICK_FR2433_4MHz.txt create mode 100644 binaries/LP_MSP430FR2476_16MHz.txt create mode 100644 binaries/LP_MSP430FR2476_1MHz.txt create mode 100644 binaries/LP_MSP430FR2476_8MHz.txt create mode 100644 binaries/Log/log.txt delete mode 100644 binaries/MSP_EXP430FR2355_4MHz.txt delete mode 100644 binaries/MSP_EXP430FR2433_4MHz.txt delete mode 100644 binaries/MSP_EXP430FR4133_4MHz.txt delete mode 100644 binaries/MSP_EXP430FR5739_4MHz.txt delete mode 100644 binaries/MSP_EXP430FR5969_4MHz.txt create mode 100644 binaries/MSP_EXP430FR5994.txt delete mode 100644 binaries/MSP_EXP430FR5994_4MHz.txt delete mode 100644 binaries/MSP_EXP430FR6989_4MHz.txt create mode 100644 inc/LP_MSP430FR2476.asm create mode 100644 inc/LP_MSP430FR2476.pat create mode 100644 inc/MSP430FR2476.inc create mode 100644 inc/MSP430FR2476.pat diff --git a/ADDON/ANS_COMPLEMENT.asm b/ADDON/ANS_COMPLEMENT.asm index 37d54ae..99f21c5 100644 --- a/ADDON/ANS_COMPLEMENT.asm +++ b/ADDON/ANS_COMPLEMENT.asm @@ -21,6 +21,22 @@ FORTHWORD "{ANS_COMP}" mNEXT +;https://forth-standard.org/standard/core/VARIABLE +;C VARIABLE -- define a Forth VARIABLE + FORTHWORD "VARIABLE" +VARIABLE CALL #HEADER ; W = DDP = CFA + 2 words + MOV #DOVAR,-4(W) ; CFA = DOVAR, PFA is undefined + MOV #REVEAL,PC ; to link created VARIABLE in vocabulary + +;https://forth-standard.org/standard/core/CONSTANT +;C CONSTANT n -- define a Forth CONSTANT + FORTHWORD "CONSTANT" +CONSTANT CALL #HEADER ; W = DDP = CFA + 2 words + MOV #DOCON,-4(W) ; CFA = DOCON + MOV TOS,-2(W) ; PFA = n + MOV @PSP+,TOS + MOV #REVEAL,PC ; to link created VARIABLE in vocabulary + ;https://forth-standard.org/standard/core/VALUE ;( x "name" -- ) define a Forth VALUE ;Skip leading space delimiters. Parse name delimited by a space. @@ -53,12 +69,12 @@ BIS #UF10,SR MOV @IP+,PC -;https://forth-standard.org/standard/core/StoD -;C S>D n -- d single -> double prec. +; https://forth-standard.org/standard/core/StoD +; S>D n -- d single -> double prec. FORTHWORD "S>D" -STOD: SUB #2,PSP - MOV TOS,0(PSP) - JMP ZEROLESS +STOD SUB #2,PSP + MOV TOS,0(PSP) + JMP ZEROLESS .IFDEF MPY @@ -85,7 +101,7 @@ MSTAR MOV @PSP,&MPYS ;https://forth-standard.org/standard/core/MTimes ;C M* n1 n2 -- dlo dhi signed 16*16->32 multiply FORTHWORD "M*" -MSTAR: MOV TOS,S ; TOS= n2 +MSTAR MOV TOS,S ; TOS= n2 XOR @PSP,S ; S contains sign of result CMP #0,0(PSP) ; n1 > -1 ? JGE u1n2MSTAR ; yes @@ -110,6 +126,12 @@ MSTARend mNEXT .ENDIF ;MPY +;https://forth-standard.org/standard/core/UMDivMOD +; UM/MOD udlo|udhi u1 -- r q unsigned 32/16->r16 q16 + FORTHWORD "UM/MOD" +UMSLASHMOD PUSH #DROP ;3 as return address for MU/MOD + MOV #MUSMOD,PC + ;https://forth-standard.org/standard/core/SMDivREM ;C SM/REM d1lo d1hi n2 -- n3 n4 symmetric signed div FORTHWORD "SM/REM" @@ -173,34 +195,40 @@ ABBS CMP #0,TOS ; 1 JN NEGAT mNEXT +;https://forth-standard.org/standard/core/Plus +;C + n1/u1 n2/u2 -- n3/u3 add n1+n2 + FORTHWORD "+" +PLUS ADD @PSP+,TOS + mNEXT + ;https://forth-standard.org/standard/core/Times ;C * n1 n2 -- n3 signed multiply FORTHWORD "*" -STAR: mDOCOL +STAR mDOCOL .word MSTAR,DROP,EXIT ;https://forth-standard.org/standard/core/DivMOD ;C /MOD n1 n2 -- n3 n4 signed divide/rem'dr FORTHWORD "/MOD" -SLASHMOD: mDOCOL +SLASHMOD mDOCOL .word TOR,STOD,RFROM,FMSLASHMOD,EXIT ;https://forth-standard.org/standard/core/Div ;C / n1 n2 -- n3 signed divide FORTHWORD "/" -SLASH: mDOCOL +SLASH mDOCOL .word TOR,STOD,RFROM,FMSLASHMOD,NIP,EXIT ;https://forth-standard.org/standard/core/MOD ;C MOD n1 n2 -- n3 signed remainder FORTHWORD "MOD" -MODD: mDOCOL +MODD mDOCOL .word TOR,STOD,RFROM,FMSLASHMOD,DROP,EXIT ;https://forth-standard.org/standard/core/TimesDivMOD ;C */MOD n1 n2 n3 -- n4 n5 n1*n2/n3, rem" FORTHWORD "*/MOD" -SSMOD: mDOCOL +SSMOD mDOCOL .word TOR,MSTAR,RFROM,FMSLASHMOD,EXIT ;https://forth-standard.org/standard/core/TimesDiv @@ -248,12 +276,38 @@ ALIGNN BIT #1,&DDP ; 3 ADD #2,TOS mNEXT -; https://forth-standard.org/standard/core/StoD -; S>D n -- d single -> double prec. - FORTHWORD "S>D" +;------------------------------------------------------------------------------- +; STACK OPERATIONS +;------------------------------------------------------------------------------- + +;https://forth-standard.org/standard/core/OVER +;C OVER x1 x2 -- x1 x2 x1 + FORTHWORD "OVER" +OVER MOV TOS,-2(PSP) ; 3 -- x1 (x2) x2 + MOV @PSP,TOS ; 2 -- x1 (x2) x1 + SUB #2,PSP ; 1 -- x1 x2 x1 + mNEXT ; 4 + +;https://forth-standard.org/standard/core/ROT +;C ROT x1 x2 x3 -- x2 x3 x1 + FORTHWORD "ROT" +ROT MOV @PSP,W ; 2 fetch x2 + MOV TOS,0(PSP) ; 3 store x3 + MOV 2(PSP),TOS ; 3 fetch x1 + MOV W,2(PSP) ; 3 store x2 + mNEXT ; 4 + +;https://forth-standard.org/standard/core/RFetch +;C R@ -- x R: x -- x fetch from rtn stk + FORTHWORD "R@" SUB #2,PSP MOV TOS,0(PSP) - JMP ZEROLESS + MOV @RSP,TOS + mNEXT + +;---------------------------------------------------------------------- +; DOUBLE OPERATORS +;---------------------------------------------------------------------- ; https://forth-standard.org/standard/core/TwoFetch ; 2@ a-addr -- x1 x2 fetch 2 cells ; the lower address will appear on top of stack @@ -284,14 +338,6 @@ TWOSTORE MOV @PSP+,0(TOS) BIC #UF10,SR JMP TWOSTORE -; https://forth-standard.org/standard/core/TwoDUP -; 2DUP x1 x2 -- x1 x2 x1 x2 dup top 2 cells - FORTHWORD "2DUP" - SUB #4,PSP ; -- x1 x x x2 - MOV TOS,2(PSP) ; -- x1 x2 x x2 - MOV 4(PSP),0(PSP) ; -- x1 x2 x1 x2 - mNEXT - ; https://forth-standard.org/standard/core/TwoDROP ; 2DROP x1 x2 -- drop 2 cells FORTHWORD "2DROP" @@ -319,6 +365,29 @@ TWOSTORE MOV @PSP+,0(TOS) MOV 6(PSP),TOS ; -- x1 x2 x3 x4 x1 x2 mNEXT +;https://forth-standard.org/standard/core/CFetch +; C@ c-addr -- char fetch char from memory + FORTHWORD "C@" +CFETCH MOV.B @TOS,TOS ;2 + mNEXT ;4 + +;https://forth-standard.org/standard/core/CStore +; C! char c-addr -- store char in memory + FORTHWORD "C!" +CSTORE MOV.B @PSP+,0(TOS) ;4 + ADD #1,PSP ;1 + MOV @PSP+,TOS ;2 + mNEXT + +;https://forth-standard.org/standard/core/CComma +; C, char -- append char + FORTHWORD "C," +CCOMMA MOV &DDP,W + MOV.B TOS,0(W) + ADD #1,&DDP + MOV @PSP+,TOS + mNEXT + ;https://forth-standard.org/standard/core/AND ;C AND x1 x2 -- x3 logical AND FORTHWORD "AND" @@ -340,19 +409,36 @@ XORR XOR @PSP+,TOS ;https://forth-standard.org/standard/core/INVERT ;C INVERT x1 -- x2 bitwise inversion FORTHWORD "INVERT" -INVERT XOR #-1,TOS + XOR #-1,TOS mNEXT +;https://forth-standard.org/standard/core/less +;C < n1 n2 -- flag test n1 n1 n2 -- flag test n1>n2, signed + FORTHWORD ">" +GREATER SUB @PSP+,TOS ;2 TOS=n2-n1 + JL TRUETOS ;2 --> +5 +FALSETOS AND #0,TOS ;1 flag Z = 1 + mNEXT ;4 + ;https://forth-standard.org/standard/core/LSHIFT ;C LSHIFT x1 u -- x2 logical L shift u places FORTHWORD "LSHIFT" LSHIFT MOV @PSP+,W AND #1Fh,TOS ; no need to shift more than 16 JZ LSH_X -LSH_1: ADD W,W +LSH_1 ADD W,W SUB #1,TOS JNZ LSH_1 -LSH_X: MOV W,TOS +LSH_X MOV W,TOS mNEXT ;https://forth-standard.org/standard/core/RSHIFT @@ -361,11 +447,11 @@ LSH_X: MOV W,TOS RSHIFT MOV @PSP+,W AND #1Fh,TOS ; no need to shift more than 16 JZ RSH_X -RSH_1: BIC #1,SR ; CLRC +RSH_1 BIC #1,SR ; CLRC RRC W SUB #1,TOS JNZ RSH_1 -RSH_X: MOV W,TOS +RSH_X MOV W,TOS mNEXT ;https://forth-standard.org/standard/core/TwoTimes @@ -383,17 +469,17 @@ TWODIV RRA TOS ;https://forth-standard.org/standard/core/MAX ;C MAX n1 n2 -- n3 signed maximum FORTHWORD "MAX" -MAX: CMP @PSP,TOS ; n2-n1 +MAX CMP @PSP,TOS ; n2-n1 JL SELn1 ; n2 27~ by space ==> 2.963 MBds @ 8 MHz + MOV @RSP+,IP ; +SPACESNEXT2 MOV @PSP+,TOS ; -- drop n + mNEXT ; + +;https://forth-standard.org/standard/core/UNLOOP +;UNLOOP -- R: sys1 sys2 -- drop loop parms + FORTHWORD "UNLOOP" +UNLOOP ADD #4,RSP + MOV @IP+,PC + +;https://forth-standard.org/standard/core/LEAVE +;C LEAVE -- L: -- adrs + FORTHWORDIMM "LEAVE" ; immediate +LEAV MOV &DDP,W ; compile three words + MOV #UNLOOP,0(W) ; [HERE] = UNLOOP + MOV #BRAN,2(W) ; [HERE+2] = BRAN + ADD #6,&DDP ; [HERE+4] = After LOOP adr + ADD #2,&LEAVEPTR + ADD #4,W + MOV &LEAVEPTR,X + MOV W,0(X) ; leave HERE+4 on LEAVEPTR stack + mNEXT + +;https://forth-standard.org/standard/core/RECURSE +;C RECURSE -- recurse to current definition (compile current definition) + FORTHWORDIMM "RECURSE" ; immediate +RECURSE MOV &DDP,X ; + MOV &LAST_CFA,0(X) ; + ADD #2,&DDP ; + mNEXT + ;https://forth-standard.org/standard/core/SOURCE ;C SOURCE -- adr u current input buffer FORTHWORD "SOURCE" @@ -466,6 +613,12 @@ DOTPAREN MOV #0,&CAPS MOV &SOURCE_ORG,0(PSP) mNEXT +;https://forth-standard.org/standard/core/BASE +;C BASE -- a-addr holds conversion radix + FORTHWORD "BASE" + mDOCON + .word BASE ; VARIABLE address in RAM space + ;https://forth-standard.org/standard/core/toIN ;C >IN -- a-addr holds offset in input stream FORTHWORD ">IN" diff --git a/ADDON/FixPoint.asm b/ADDON/FixPoint.asm index 8fab492..03262b9 100644 --- a/ADDON/FixPoint.asm +++ b/ADDON/FixPoint.asm @@ -326,7 +326,8 @@ FSTAR1 mDOCOL mDOCOL .word LESSNUM,DUP,TOR,DABBS .word lit,4,FNUMS,lit,',',HOLD,NUMS - .word RFROM,SIGN,NUMGREATER,TYPE,SPACE,EXIT + .word RFROM,SIGN,NUMGREATER,TYPE + .word lit,20h,EMIT,EXIT FORTHWORD "S>F" ; convert a signed number to a Q15.16 (signed) number SUB #2,PSP @@ -356,4 +357,4 @@ TWOCONSTANT .word DOES .word TWOFETCH .word EXIT - .ENDIF \ No newline at end of file + .ENDIF diff --git a/ADDON/SD_TOOLS.asm b/ADDON/SD_TOOLS.asm index 0b8c4d9..becf133 100644 --- a/ADDON/SD_TOOLS.asm +++ b/ADDON/SD_TOOLS.asm @@ -18,9 +18,7 @@ ; along with this program. If not, see . - .IFNDEF UTILITY - - .IFNDEF ANS_CORE_COMPLEMENT + .IFNDEF MAX ;https://forth-standard.org/standard/core/MAX ;C MAX n1 n2 -- n3 signed maximum @@ -38,8 +36,46 @@ MIN: CMP @PSP,TOS ; n2-n1 SELn1: MOV @PSP+,TOS mNEXT - .ENDIF ; ANS_CORE_COMPLIANT - + .ENDIF + + .IFNDEF SPACE +;https://forth-standard.org/standard/core/SPACE +;C SPACE -- output a space + FORTHWORD "SPACE" +SPACE SUB #2,PSP ;1 + MOV TOS,0(PSP) ;3 + MOV #20h,TOS ;2 + MOV #EMIT,PC ;17~ 23~ + +;https://forth-standard.org/standard/core/SPACES +;C SPACES n -- output n spaces + FORTHWORD "SPACES" +SPACES CMP #0,TOS + JZ SPACESNEXT2 + PUSH IP + MOV #SPACESNEXT,IP + JMP SPACE ;25~ +SPACESNEXT FORTHtoASM + SUB #2,IP ;1 + SUB #1,TOS ;1 + JNZ SPACE ;25~ ==> 27~ by space ==> 2.963 MBds @ 8 MHz + MOV @RSP+,IP ; +SPACESNEXT2 MOV @PSP+,TOS ; -- drop n + mNEXT ; + + .ENDIF + + .IFNDEF OVER +;https://forth-standard.org/standard/core/OVER +;C OVER x1 x2 -- x1 x2 x1 + FORTHWORD "OVER" +OVER MOV TOS,-2(PSP) ; 3 -- x1 (x2) x2 + MOV @PSP,TOS ; 2 -- x1 (x2) x1 + SUB #2,PSP ; 1 -- x1 x2 x1 + mNEXT ; 4 + .ENDIF + + .IFNDEF UDOTR ;https://forth-standard.org/standard/core/UDotR ;X U.R u n -- display u unsigned in n width FORTHWORD "U.R" @@ -47,31 +83,54 @@ UDOTR mDOCOL .word TOR,LESSNUM,lit,0,NUM,NUMS,NUMGREATER .word RFROM,OVER,MINUS,lit,0,MAX,SPACES,TYPE .word EXIT + .ENDIF + + .IFNDEF CFETCH +;https://forth-standard.org/standard/core/CFetch +;C C@ c-addr -- char fetch char from memory + FORTHWORD "C@" +CFETCH MOV.B @TOS,TOS ;2 + mNEXT ;4 + .ENDIF + + .IFNDEF PLUS +;https://forth-standard.org/standard/core/Plus +;C + n1/u1 n2/u2 -- n3/u3 add n1+n2 + FORTHWORD "+" +PLUS ADD @PSP+,TOS + mNEXT + .ENDIF + .IFNDEF DUMP ;https://forth-standard.org/standard/tools/DUMP FORTHWORD "DUMP" DUMP PUSH IP - PUSH &BASE - MOV #10h,&BASE - ADD @PSP,TOS ; compute end address - AND #0FFF0h,0(PSP) ; compute start address + PUSH &BASE ; save current base + MOV #10h,&BASE ; HEX base + ADD @PSP,TOS ; -- ORG END ASMtoFORTH - .word SWAP,xdo ; generate line + .word SWAP ; -- END ORG + .word xdo ; -- DUMP1 .word CR - .word II,lit,7,UDOTR,SPACE ; generate address - .word II,lit,10h,PLUS,II,xdo ; display 16 bytes + .word II,lit,4,UDOTR,SPACE ; generate address + + .word II,lit,8,PLUS,II,xdo ; display first 8 bytes DUMP2 .word II,CFETCH,lit,3,UDOTR - .word xloop,DUMP2 + .word xloop,DUMP2 ; bytes display loop + .word SPACE + .word II,lit,10h,PLUS,II,lit,8,PLUS,xdo ; display last 8 bytes +DUMP3 .word II,CFETCH,lit,3,UDOTR + .word xloop,DUMP3 ; bytes display loop .word SPACE,SPACE .word II,lit,10h,PLUS,II,xdo ; display 16 chars -DUMP3 .word II,CFETCH +DUMP4 .word II,CFETCH .word lit,7Eh,MIN,FBLANK,MAX,EMIT - .word xloop,DUMP3 - .word lit,10h,xploop,DUMP1 - .word RFROM,FBASE,STORE + .word xloop,DUMP4 ; chars display loop + .word lit,10h,xploop,DUMP1 ; line loop + .word RFROM,lit,BASE,STORE ; restore current base .word EXIT - .ENDIF ; UTILITY + .ENDIF FORTHWORD "{SD_TOOLS}" mNEXT @@ -92,24 +151,28 @@ DisplaySector .word EXIT ; ; ----------------------------------; -; TIP : How to identify FAT16 or FAT32 SD_Card ? -; 1 CLUSTER <==> FAT16 RootDIR -; 2 CLUSTER <==> FAT32 RootDIR ; ----------------------------------; ; read first sector of Cluster and dump it ; ----------------------------------; FORTHWORD "CLUSTER" ; cluster. -- don't forget to add decimal point to your sector number (if < 65536) ; ----------------------------------; - MOV TOS,&ClusterH ; - MOV @PSP,&ClusterL ; -Clust_ClustProcess - CALL #ComputeClusFrstSect ; - MOV &SectorL,0(PSP) ; - MOV &SectorH,TOS ; - JMP SECTOR ; +CLUSTER + MOV.B &SecPerClus,W ; SecPerClus(54321) = multiplicator + MOV @PSP,X ; X = ClusterL + JMP CLUSTER1 ; +CLUSTERLOOP + ADD X,X ; (RLA) shift one left MULTIPLICANDlo16 + ADDC TOS,TOS ; (RLC) shift one left MULTIPLICANDhi8 +CLUSTER1 + RRA W ; shift one right multiplicator + JNC CLUSTERLOOP ; if not carry + ADD &OrgClusters,X ; add OrgClusters = sector of virtual cluster 0 (word size) + MOV X,0(PSP) + ADDC #0,TOS ; don't forget carry + JMP SECTOR ; jump to a defined word ; ----------------------------------; -; dump FAT1 sector of last entry +; dump FAT1 first sector ; ----------------------------------; FORTHWORD "FAT" ;VWXY Display first FATsector ; ----------------------------------; @@ -121,14 +184,19 @@ Clust_ClustProcess ; ----------------------------------; -; dump DIR sector of opened file or first sector of current DIR by default +; dump current DIR first sector ; ----------------------------------; - FORTHWORD "DIR" ; Display DIR sector of CurrentHdl or CurrentDir sector by default + FORTHWORD "DIR" ; ; ----------------------------------; - SUB #4,PSP ; Make room for result + SUB #4,PSP ; MOV TOS,2(PSP) ; save TOS - MOV &DIRClusterL,&ClusterL ; - MOV &DIRClusterH,&ClusterH ; - JMP Clust_ClustProcess ; + MOV &DIRclusterL,0(PSP) ; + MOV &DIRclusterH,TOS ; + CMP #0,TOS + JNZ CLUSTER + CMP #1,0(PSP) ; cluster 1 ? + JNZ CLUSTER + MOV &OrgRootDir,0(PSP) ; if yes, special case of FAT16 OrgRootDir + JMP SECTOR ; ----------------------------------; diff --git a/ADDON/UTILITY.asm b/ADDON/UTILITY.asm index ff39c4a..3a218b3 100644 --- a/ADDON/UTILITY.asm +++ b/ADDON/UTILITY.asm @@ -21,11 +21,48 @@ FORTHWORD "{TOOLS}" mNEXT - .IFNDEF ANDD - FORTHWORD "AND" ; -- + .IFNDEF ANDD +;https://forth-standard.org/standard/core/AND +;C AND x1 x2 -- x3 logical AND + FORTHWORD "AND" ANDD AND @PSP+,TOS mNEXT - .ENDIF + .ENDIF + + .IFNDEF CFETCH +;https://forth-standard.org/standard/core/CFetch +;C C@ c-addr -- char fetch char from memory + FORTHWORD "C@" +CFETCH MOV.B @TOS,TOS ;2 + mNEXT ;4 + .ENDIF + + .IFNDEF SPACE +;https://forth-standard.org/standard/core/SPACE +;C SPACE -- output a space + FORTHWORD "SPACE" +SPACE SUB #2,PSP ;1 + MOV TOS,0(PSP) ;3 + MOV #20h,TOS ;2 + MOV #EMIT,PC ;17~ 23~ + +;https://forth-standard.org/standard/core/SPACES +;C SPACES n -- output n spaces + FORTHWORD "SPACES" +SPACES CMP #0,TOS + JZ SPACESNEXT2 + PUSH IP + MOV #SPACESNEXT,IP + JMP SPACE ;25~ +SPACESNEXT FORTHtoASM + SUB #2,IP ;1 + SUB #1,TOS ;1 + JNZ SPACE ;25~ ==> 27~ by space ==> 2.963 MBds @ 8 MHz + MOV @RSP+,IP ; +SPACESNEXT2 MOV @PSP+,TOS ; -- drop n + mNEXT ; + + .ENDIF ;https://forth-standard.org/standard/tools/DotS FORTHWORD ".S" ; -- print of Param Stack and stack contents if not empty @@ -44,8 +81,8 @@ DOTS1 MOV TOS,-4(PSP) ; -- S0 ( tos S0 SP ) .word DOT ; display #cells .word lit,08h,EMIT ; backspace .word lit,'>',EMIT,SPACE - .word OVER,OVER,GREATER - .word QTBRAN,STKDISPL1 + .word TWODUP,ONEPLUS,ULESS + .word QFBRAN,STKDISPL1 .word DROP,DROP,EXIT STKDISPL1 .word xdo STKDISPL2 .word II,FETCH,UDOT @@ -73,7 +110,6 @@ QUESTION MOV @TOS,TOS FORTHWORD "WORDS" WORDS mDOCOL .word CR - .word lit,3,SPACES .word LIT,CONTEXT,FETCH ; -- VOC_BODY WORDS1 .word FETCH ; -- NFA .word QDUP ; -- 0 | -- NFA NFA @@ -98,6 +134,17 @@ PAD mDOCON .WORD PAD_ORG .ENDIF + .IFNDEF ROT +;https://forth-standard.org/standard/core/ROT +;C ROT x1 x2 x3 -- x2 x3 x1 + FORTHWORD "ROT" +ROT MOV @PSP,W ; 2 fetch x2 + MOV TOS,0(PSP) ; 3 store x3 + MOV 2(PSP),TOS ; 3 fetch x1 + MOV W,2(PSP) ; 3 store x2 + mNEXT ; 4 + .ENDIF + ;https://forth-standard.org/standard/tools/WORDS ;X WORDS -- list all words in first vocabulary in CONTEXT. 38 words FORTHWORD "WORDS" @@ -133,7 +180,7 @@ WORDS5 .word DROP .ENDCASE - .IFNDEF ANS_CORE_COMPLEMENT + .IFNDEF MAX ;https://forth-standard.org/standard/core/MAX ;C MAX n1 n2 -- n3 signed maximum @@ -153,6 +200,25 @@ SELn1: MOV @PSP+,TOS .ENDIF + .IFNDEF PLUS +;https://forth-standard.org/standard/core/Plus +;C + n1/u1 n2/u2 -- n3/u3 add n1+n2 + FORTHWORD "+" +PLUS ADD @PSP+,TOS + mNEXT + .ENDIF + + .IFNDEF OVER +;https://forth-standard.org/standard/core/OVER +;C OVER x1 x2 -- x1 x2 x1 + FORTHWORD "OVER" +OVER MOV TOS,-2(PSP) ; 3 -- x1 (x2) x2 + MOV @PSP,TOS ; 2 -- x1 (x2) x1 + SUB #2,PSP ; 1 -- x1 x2 x1 + mNEXT ; 4 + .ENDIF + + .IFNDEF UDOTR ;https://forth-standard.org/standard/core/UDotR ;X U.R u n -- display u unsigned in n width FORTHWORD "U.R" @@ -160,7 +226,7 @@ UDOTR mDOCOL .word TOR,LESSNUM,lit,0,NUM,NUMS,NUMGREATER .word RFROM,OVER,MINUS,lit,0,MAX,SPACES,TYPE .word EXIT - + .ENDIF ;https://forth-standard.org/standard/tools/DUMP FORTHWORD "DUMP" @@ -169,9 +235,8 @@ DUMP PUSH IP MOV #10h,&BASE ; HEX base ADD @PSP,TOS ; -- ORG END ASMtoFORTH - .word SWAP,OVER,OVER ; -- END ORG END ORG - .word UDOT,UDOT ; -- END ORG display org end - .word LIT,0FFFEh,ANDD,xdo ; -- END ORG_modulo_2 + .word SWAP ; -- END ORG + .word xdo ; -- DUMP1 .word CR .word II,lit,4,UDOTR,SPACE ; generate address @@ -188,6 +253,6 @@ DUMP4 .word II,CFETCH .word lit,7Eh,MIN,FBLANK,MAX,EMIT .word xloop,DUMP4 ; chars display loop .word lit,10h,xploop,DUMP1 ; line loop - .word RFROM,FBASE,STORE ; restore current base + .word RFROM,lit,BASE,STORE ; restore current base .word EXIT diff --git a/MSP430-FORTH/BOOT.4th b/BOOT.4th similarity index 100% rename from MSP430-FORTH/BOOT.4th rename to BOOT.4th diff --git a/FastForth.pdf b/FastForth.pdf index 8a13e89e291d895193766de129d3ddae7209b638..703ece57d614ac9380224b242dd989e105b995d3 100644 GIT binary patch literal 103378 zcma&NQ;aXp6Sp}w&hU(F+qP}n_RJaEwr$(CZQJ&Du)qIilf8KNV(%)|sZOdZm9Bn1 zX;K9dFE5pO#yUK#km560hO0hpuIIa{)n)7 zHg_PQYyM}AetSyyNQ6ujj349EqtkHl<*CC8=f)!UN7U;*k!gK?fW9=lZ$FJt^$(`E zLs#FAo4(%fE&lGWx{jruuh%tueEvT8BQNXQ-RUR`M zxxl^_UdY$jUaxE2($t=N-DjHL=W37l-z#Cie~M36<-b39X?~(5(Og2Y)|P5{2SlZ9 zcEBOKU2(Tf*qs#sN5?&YE9Pz|_4ZzEQl4`Jts&L+`gZd@;MN;+P!rl9L_u0VPQts|=`tS*rIlA|H`Y6!C=8Wj zPyEtMRm1LIyG`~*wZ6a#@i z(L{BFpQ<~bbWf?GfKaxdskaRSChIHx-x@RzcNp*U%*|UHSDIG8po*+0prg3<@4+eH zk%7YV`z-aZ(;LcnfZI^YquS8QxZGyKKwOS%WYrIH$7ges9(>=Ap7GO_kDyH^R)f!k znx37Mgs$G}>?wb>uhYE!<8j|sn#Fhc+c{U~?e@rc<6fZFzu3PN5n?ZvQ&(YR>OFa2 z{4Njj?)p|7g1;t3+iQDR&E20#qYUa6`(dFNpF{dFyMMc&=5_69=l1qY1XrZ);Zo}I z0KnhHjVrW!ti5u*uWGJE-t+Q71kEZJCV}1wMSkVf-({iyMm4gYzY9wD`2&`j|D4wZ zvYE#JDHY~kv4u%L4^s<;^)G(58`=WTtzoAM2iO24GeYDLgKh7dr>#^&0kFQ zC<0=d&039_-G-ZB0VWDa-KflAOZ{Lst zC7X|7>}@RtZsm*X^r7auR5{wFv4h&|x6ZtrqdyYMs6-fZn3T=Ei-{+M?@#Aw#>Q>M zrFR}KlI+Y1F6&%t4h(;;gxWkY;s>93d6->AX_4v73vH1}=a?Vh)4`X(U|i?i%$uKx zl6uKi4{7fLcKH zB8FYbSfe1yyX-Fm+sW=RBilRjp^jB)b(GuoR2NWj=%N!f*22+mfOTr+=OVzKGnh;v z3Z7TQc5?6C(fO4eq0PAvDL|&lVv!-X?2;Wj;6cF33P!msYa3o+JE_EUjNA>TapW5@+XVv zT8c%~##r5E$|vmI#6tOum~og=Z7tQvbGCUc6tb?7CBGN)>G_*>J7Xbk*0NoX&(UqPg#l6(M)*-H(8#7B{>^< zDB-VK6{`tBmcPG)B&?3RojL|lEx+BWL{!@r&X&y?)=*G5LUYo#8q)mHcL#i!rYKl#J$co%`i-?FpyAz&M zsaMnL0krYGaWR>+u0Uw;PCr>ALZzSyO97C>J9_R1Pc}=YT81}c@EHEDYT>dwNr$HE zD8_~iP{2R!!yjOjJ1(kUwEJjHHIC7;?BbMYsFuv)j6(cm%M~;f3ss#(q11o&jsNZp zW>}y6EhU8g7AMEbgv})lA>wEEirWw|Jm@_cZ^Jd)8re86n>?MM6)Vx)oo88 z?Jt(W?o+Yi7`+JawIqur3V)ayx5#h?|*0In;1>$88xrC3tr(w zH#XGn)>n)|3@X;r7$xY>FExg(!pnlQglTL9GF5mWVeFKcDu`Do(`r=?Fp}Jx>BV3# zLTqznCS>5+cZO^7rc`LygZTa|%CUgwZOrRj6Bhn= z?~Q`356p;JqCQcY8j@b3&Q7EzQ}>k}kTo$pTDPc#VHT$^y7-qbBnz__wK5z#_67`W znr$Sk3HeFD3?4N~)x!_$_`7@hzE}ZG!(afBW}Zp5LzP>a`b@3BZn79F+PNw<+|uqP zIUKWdn1fWN;*d#g72ongOt^To;{=QveQcYl9Ll8FrHF7*uYYmaim)1M2!{32 z5DxEk)mN0Ts03S6lV4CC5K%oHEyfrR4;{a-7*lO?j=0mvHlbu_w#f`vuTzBi;i&yG zX`yy%KGH0hRIEU&W9wTl6`E?-f&oV*7MwLc7FC^RrNM48p9K2Bpb5kM&$OvFfd`&p83mTptWA`;VQ-M5(`1V;mnff`%jW&Htpc`mT>YMViv#W6L?vtLf zy&oBCK^9!J_PAQ%>oC1@e}mNKPsii_`yQ*G*DZ~p3;LeZA(7dgMFvy0(Z8drWNwg? z1UTywL(Fq2e92i8&fZszbg^ zGQ@VObT{@*o>?~p_iS@>etcM)%bXDkYIF~H)uD;=)TRq<(V{Eq|{m0{qm zfwCwX)#TC{iN&kRqEOQq6^N{uJX(XIw8I~zGU0)@4N{0yGwU%lIxgeQ#84G}TuJL@ ze%y(xcRO>Eh*=t+2@Vp=ctNa@U0TtWs^bEo$F>^_{W1{5>1(!+SAiDRX_^p-E8p@2h0#2{y6 zIC9#GiFHO0(^MQ1>AJ%S!P!rkR2!${wRuGP^%6zNlP4O^=~l42;FCgK(Y&ukkO$|= z;bQtK>k41KQ~u0llb1X7mp=U|mQ1zE-@^}rQ91BL&!inhI)r7V-Ad$NttpFISL32v#LYjqLQrAB~E{uxtOS>3mhQ`-S+=AQ&o;a zz2|jCwT%6*5ew19Xc~n{v&)bP*PMwl7p@!}!whM_{RI*h9y?X>0VYlu@QvAVsz~uwl#9ijAhOU5^D<;xuzv{w&5y&_0g8a{lg43?JFi8 zYRp2V)Ri#iR^%o0Mr#R)j#O%Uj2XPC1y*^Z>R#T>4@{G3{ROcymh0t>0sG=Og_>@>$rjfB+ zMWr)d6oH*f;bRFTa2)g+x-3%}OtET8nZC z^T0(>Au2qu#0g__>q}LzN8kpf>8zsJ8FYfWB%$gu!hOuISR^z#(!?ne+I*}z3pWYn z$ni%v*P$ie7;U%eG%nF7bq~Q6B0D|O5EErN)(%s1>(eM@-~TU(osK=0RLoY_Am&t* z8V1TlZ9qj^YKE$YBY-dvD<-VA5xnfO$1~_a8af`gzJ?@QsuYnLST!t*j;l2|KETGI z20ZYYNrk=5@`_~4h!7{0$><|8)Stes8>ii+G4(*llG2D=E^MzE{N9MTKpXyTsfq1-;EZsYAGh`4=B z*(Td_Il2krjoC;y@6ivzM$k9|p5B0yZMd=8Rh6*`032E7BFbQyJX#odwllQjPkYwu zFf;(4ZeaMx9{Bd9$tx#=>4kqDmEP9nSmYp?F5*M5Il4ZQ%lGcS(7OvUlm+fE-#wF0 zDDX{uyFU&v$vg-#F@uM~e|GE)^&}PVeFQwZz9tML^>tajygdyER~`x9}xvKIn1^Do6?f?|t}@_(}eV68V-GCalvXtLLYgsp`k zB??89?PT?2{Afik%UW9f@I&HdN~md6^#NwXzAr zQRx~FLHXh_61TEYcTbuMADMycC@~&)zS$DhlpS^Ca1bM`tiiB14Q$vG1~ zlg3b25}_al8D@rm0X%nOmrQH6|;{gX5wTkFJJ|2}+hx*(P zE6RubJm|j+XJm);eu(c=VTbfXj_%QxXh(5+_h7o_^ZJQW4$bsR(Cf(aQvGx!N({Zo z`;u|#(G)A81w3CMT6+wR+ssF46TYGxyK(QT&%b43@}~!DqKWdV@^9`8z1Jh;Of1p5 z3_fVW*jcm9V-7Q?7koLf2IAw-H9%+=3>#y6T}-MO*zG5Sd8PGJ<4~&mooIb?k@Azu z71+D^_E$LUi)|qQx_{5K0Yh1R^L3*KP5I2C=JfSV*IvU3y-&Sc*snQ?iEr^20z*FC z0^IYOY~12*XiMIC{&EK-zjby^2{h%=Ge1NFRxs=wtdf(TRqEd1lfJ3)g7r=zRTe~@r4%4rTJ?ywkV%OZtU-^ zSppLNDC02Xrpvokv**dJ^53yLSafU+;&*{8;#k?gwjAH?QD6I)`@Jtdkc)OV;Po0! z4O~;=U(K_t>B%IY!&Ru~rxOGl4$m+tDN`7@hG_*Njb3GUCSDhKn`2a@d{ zK)o<79cJ1!{1dX6Y35ia=NsCi<@hkG=0?twZ4;XP;|`oJcoK&|kF3RP9GJOCx(zt+j1xF52tC3d%vP88Z1%XOhv`b{+6isT8&~z~%{s~cK$`7nuKSONIP|#?a2+(-HHg6v*21`=eRaqr=HjNfjD_(XxYyDq_>0OTl=XyyiHZlflVoIlV1 z-S`QVld<~>@Na)144uo)&MJ90z^;lgGDW>oN9=H zNCY~nohKY|(e6<8%si2q9im37acO_EJTxfMYN|0Bk;ZI;5)d;E^=vhA0M+=pE70;x zQtJuM)i~`73t@z!_!xKzQ5ssw@wR{HFzz@oE0V@ zz?@g{oc-(kPd#Ifc}p|>P!pbwVSk*`zSMyx?Ew?d6-(fMu@35fKw{bE5vM%V3U>!Q z)L=G#Sn7uiYFKWbtHht+UmYMGXdY@H2IRM5q%DPThx41aA{aF6QvTQenk8PQr-o}O z29<1yBUZ<_4sLSN6~$&a(gN7;7Sv5Ll)%l#T2jZ&h44n2C45|owqF(!pfrQEp{+3| zsq8JtGA-*NCbT=;D7V!$B9t+ntBejKG*OzvSU`?qoQeulI4{wa?y+*A_$319=IWLl zDaVR6U@Eeuu230!4V+Rcd&|@Qmb}}OaOzS4*Y)tlPMfi2BZOUZ`_ZT3l>Q?ds*T!a z%>k9_Ee4g#5Lmu0U>On@j7prgo~uE&(+nl3{c>8;R22u|=v&QuoQc5VQUNrhby}?{ zTb=@K0V>li={@LXHJvWxao20JI5;rHC9Ijy+VB#NpS$!zn61emnvdIt(!>EOXEwKurM}ti{Qx?I4kdVPa>r1rLk45b z5|r9(^B_qNFovViN=q&`+{(Z7CQU0B2#rM>UbNM8^Atjj0CQ3xw;`_g)c6e7d&lwH zRs_C{Ndzc0ECtf5{VGp$@L054XM|W`S&S0GL9C7SR2#tjs8(0Wi6pdtNjoXp8dRem zRX#bQi}X~yQq8r$39E~=kJ*!QdkJ6JCr*9v#t`;2b(Zx@SveXrE!lwpkm%wUA(R!D zA4a9uS!`2*_> z*#nN8!`wA8#w^&YUh*oOM=Vk-vppG*P?JvEHbc~W!E%tx7nk`V`UBr{dJ?QHcu-2L zRp5mfB^yf4h;=jcaiC(zWW>olr$DZo4w_MV>A*pm)^EaKe#wA%0jJDfHoEu`#-SQ0 z;!*2#2q_N(;FwXsn79~B9}>pc z$qxQ0zR>m-Q(H^+^ZfYRB#klwV`^ve|Hx?nS^rbsVE!k#{m)?IWM}%{^8f8*{XcX$ zw*OzcoMaSD2hxAK+! zV&vsyGU_KP(kJR>C;7ws)Q}&3*NGqhoBX5W;-RJ2*T)^A-{;Jc-&fM@17hDl2Yuh4 zv!QQ5koVWmlkr<|YV&t}H=pa!iKqRw|+(WrLqi*rL$2&godhhLC+?13uFuZ{ z@N<8(z!kgHTwBC)60wkK1j{0nh~MS@^d=L9+zR#}(fD;GkGP}!`wokC6lUl7wN#`g zzv=V)c7(6ET-J;71Ox)$CvGUw`UyBM^2!W4FGAD3AgE)2Cqy?1c_+K6WBRhnt0JWD zn^~Kz3;I%N6@4_U2+7=TD@VX=587@zJ#mxG_Qp6EdUGAh6_A$bVUa+uZS$7{%Vw$9 ze2xVYk6IU%L#+LtGbA6qwd4WTgEweeU!=$VGie~GbZ0~uJ(@ErFMC$dbVb~Qn$kw&4I+;>OPTJwNniPn=Q~+Xduh~u6_D&ifVw4QChHjHev;<6 z1z!w-GVfMr*>V+D?T8PIT;x2b78 zDoX^dB(4ef5~S~GZnw^PqI_nxpec(~$95@??w71^?9QHaC}?R24gi$BhL)Gax&R&j zQ6{Agk)!sip79_LzM=9B8JudDQsL%HTj45;T!4%=ZO_(+oUfzMH)Ts_D*S`iDiV=N zz$8OHvzD3=!PvmF&&mFAZWjzyd4AEqT5VrMSHzuZF~SF8VBBtH_PJ<;va>u$eR@oF z`hg{Fs)Wx^VhZj(O4CAcNmm=fr;V==9QZqF*nWoK7?kk8VPWuM+e5^0fvw>hk0#0) ze?nlz+Rp|d=ty|NIK%`x5HUkl2)m%QfiW|&<%A$hZlQo6_=c$|_l~J{BbE~rph+M%ql6QtHA5Me{>dOL8xriCQ ziwUE=LxyvHy4d8b>AFd=}{n`3- zG4Q?y?<1qF77PI?g2lb|v`G<|j+Cgn8G9firBPKw%9df_uV)t{@pdw~Nmb1|u-qC~ zImIu!Vy1q0@W}~p&bqL{q7Ll|@)<5!e8@S7p@GJiCrQ@oO%k?R*B$81w+I}Zz##C% zW8@mLbR z${z~;3oloK;6-}l$A%yqL{MN5ANr*UO8DrLoASZ9c7@Qu)Y30Mf*6v%7i6qiW~6I0 z@qREO>|B$s(3aQ_T9!1xJ*YfzVL+}JNmwIZydV4vK+CAfYG_v=1 zRQyZxVM>KGa>hP)%x1f5D1?3iWd<80X@o#5j?JQvp>v~zc#^wJS=#9RVKsO0baPze zrP_`(BP@(UeIpd$gEL3(oW#jMm#WsX?dA@o24;0VNg^PI(ZV%}AuS^cv3;<$)OmU{ z`qNa;D>q5Ca4~|c$W%vh#Yw4a8>_~v8AT_$yDTPEhO8)1pyZpQi5fQS(q%dx-MmXu z%RmwzTnAcK@UsCadT5*jCA_EIxH$Hi5ytxuW?2HJ=Uq1=a=Ha{W#3)U99BA>ijl#c zfdL(r#v!^$C?MG+xNlRm9Ry#K?W{TSbzLUv+0AT%dNjJXYz3Q}BM4+FM!{v}Wpb!?#v z!tSHWQu{=)Brz9h!DgI35-MuJtqX6;*|Y;DC8k(3)1W_foJ1K>n&LtRF%iU~?kq?T zjk?U{gDz@d@0oyFp;dHH(RA+1{ZKPXjp%S(WZe#wi}ICglDZ~6-IGId+Rr8l< zZIlZ<@u#A_V+uk(a4^^c?@`{kX42`ba*vRI1nP8zBx#4CJ`||O*w~Z##J%O4#hF!s zLK0wB$5R|TK*o93>@8LVwzf5n`x3mHQIv+V+V4mcO4Trm`d3msUFa7yuByVDoYMn4 zMyUs z2`dfm^Njp^X&d1Tc%wBI;$d6Wo*k8{_N&JPLvn3F_B3`ZQQwBe9>}C!EZn>3FpgEb z)O*=p*3KKe@cd$n$ie4N~Pg`xA{Cl{ir|h11 z!sk^QJvH2N4hYxEmqx-ne6k~K_PksHKlHv!XM*L=N@q_B@RM+!bW5Z^p1f01;4VnD zXYgXKDnl^k0ZQMkp(}%GlFb+!aB3By3u#*x>6vA=_Nvy=YxOj0W8-j1C8cbgLBtZP zJqy!XNK2YJ`93c+QH)X?8Dcx^7AuSnlSUjpvo4Y|%VP_~IdoePIgVKXO;^GQ><}z5 zXC)Bg-Lj0VGKmV2TN2u-8h@*fn+oi+DBR)N=rkDKtbrx8{T1;hB}%30$A#)ts?#D( zeTgw|ipYTJ;RDw;q+Tuv6--9lQQK_3gmkaP;qh1Bt!SpD;F!W`shRGvcA&P;cr^$n z>qKvM2^6+V2-mcW6gq?Q7vLHdnwz)PQ(_JH8>P6Nzb#Vo=}aCkUO^_T!&T}8LjiJ%Qk>+Pr4hM&$GKE~N+ciY_DUqK8r>B%kRFIr@RtUE~pbVMv+Lb9`*Tfa8 zS}@EjnFzTTQ??LuMr^Ri^ovEMGSs5itSIw|vPjIpv_3IdEtuTcox_)$xe~Z$&IWkV z>{6M^O%cM5IX^4RH7W?;XE+Z*_?h)coUAfYj+l9}a`4ud8@o(#=(0;>4ptdz+(*^M zS~Oa?8l>{11e!x0tEFDLw+p=7QmrmsHS{*aIV6@v?85dR;$GzkXVh~0Vmx}@nbXiZ0E zZTCY>)ikd0J#-E@I%Dh+oPLwRn{y~YSb~ox}W!GK+HOnb%w~T zzIHTBg_MzNG7jhgPw6SY`GryDD2BGXC5a7NQ|BWPV*5Zd5f zR)Jc)T}D9Mg4GCxYAz`Oi*6Tgcx`crfQ}Hg3K2tE%39`Y!6NebDVL(}O zc1E|rx<5@dD>Q@WnC=u>r7o^QH#L@skuRa zDOyDS?YE~=o&vwu^%~@)kcU8!S$jUNR%x8O0poQw0&3D$c@mFV2)31wT`=T{RC~BCuqoF6%SbCWkw^;vlbymd!v$fuvY`2wO6S{77^3-rY@%RzVPUTx zmAwz|ryh$+m8Fiu#nrdg7s63`ZmmnUVc>AFXF=00f~{<5_G9PZXwS$n;a7#bUi2DUE?di zFB9XXp4VsRFrAX?V*888q4qPIYL6cCPzCxVki& zPSW$hj4ycR=n8TgO~SvU)P0z#cWch3ywa==I+X#zDYjN9^pHvyTCW|Bgce3rRCGu(DgSi zi>X72^cBigeJJo5D%cfAm!3hK4lMJ~^h8iw{{8YM%%I*lQi63x(JH#ERPE98@g!)j z7V#hGmQitWI;7}w*00PCl6#sKHL^?J@($DO^|Jpiqqka!xEAZc$3~VFvyOq{7N>!u zKtCgpO&$c4c0J)H@=rfVb$*pp=Jb4^cI4 zoY>8PU$o<5WUbT#=EsBOaXH59%5cM+XG*ubl$zjgwj{+z$FY89Ot{x>knGwoxMvFe z2H!sa#HFpweX||~z8VKb0NeyxyREn0Cf^Se!;OWsedFy+RuAdGRaX>o07G{DnhO(I zfrlZkEygf=r>bQPJq(SpW6hW8-$!UOm$YXD3w$2>jkt$gguBcRF}YTK%<^vkfXfGq zrMozOn7}TxvcXRfdTWbUJ(hpI30)cn!T4`>=T4e>v(h0f)_cUBKI8xxT6gl?LUKLk zTd;|F-x5z1-g|_l01DS?Opj2f;AC4Y4tnW*pOYVU01jPWRCrwqD*}AGoc|~!L34h= zTzKvKsMO*FoP+Jc$a>;A$9A~+Hf|4moN7%IqbIZC@NEsgKp#nH7Q#$LqW9YwB&->v z`OK70dDf6BPGR(E!yNc?{t63|nMY5rNUv(`B{T9#q`;^$PF@x@gP zHLiF5-s{zKx8n)?#ky6`qit|>GOO*I*U^6u;4I_6I$UnIi#3(Yjdidg+k#D!arKcF zTinV+@OkmO-;s9T3Llc!sN^j^>#VmjL<=Ols#psosACVN#7XA~0&fg94kMmcrc-a~ zH>oU(*>-j~^~YB>pB~;_#8t3LJS6!67|J{*xLDo|MXzU;ox*f8WIW+PZ?60YkTCeZ5}?>Ro;#sdjH&d)>kMzMp`pldY&7AHaXGcIUYU zzjO^TXUhjLb-Tvi#jL!w_w(MuoqMhB%<1!>-}Ufw<@&k6`Tno{_uK1tYxg&IH`Di~ z;^L=>d(Y3q!fz<-{^z+e2GRa`A!U>P0&rnyg@{&yP&^B}tb>XnhVhkx?MmV+m*2_Fb7;D&RXVk(pE}~d?^8;GSl%OlrN=5{_j^roKebB&+7t3-ZJcE9H`Zzl-E z5P_Fvz=7fcf{*jC#GZY@>Ts5sxmZn{u#~mV=hLrY;U8f(hWU1euMZT6=?7e{-}&7R za5T@^Lp+G{yY1z2nPH7cR>01Wk++9xXMS{ss%|gt?Uw%nD}b0FE0N$$ zm_K~G&nKqaoG+d!mY22bC)@pHl`PF1Q1&o3k0rM{WA#j}~G@9IvFlkP^3o>SQ_u zvakLQ91I6jLJ6=PCrf9{A7i)OXc3K|?=LiQJu)!qoG^nl!eHR_*^9%hPZ#kd4uJEOtKdbxYCM(t$-q^us}6=s``g2&=`&z3J!)y* znn^Q+^x=SDL;OM&Ka=d_gbtR|326?v@SBLjwr%4l`xHNYc8Ks{Bx3;PNrX1Q7H{my zO0R|!ol-m9-`I~>#}jMaSKZFq{%*sgp=B5p=$gQVxf=4e)FjbIHM9%16m;f@K-`js z=OWrS%DXSMKI*;zKMN~1gYY}!7ifV$!V>|7x8p5I9agKBxIR;TEX zn|Oq9#KGh!(eKH$9(s5m&}l-F+!q?E^n;Qo4)4U)43B|Z2`2_S%jREuaePWL8=lI0xe9XtsEe+ zU&am@gq6!R;$6(Q7^?X0KNi;+kP{#0(tQHtcl5BKoe=8is)6EBLHK9ng+x-JSmhM*LCQ zx;e_TiFMR)&Uqs3h0e=A_wJD~paCi&UCMfi=poE8B7kA$QTQxPilx~l4@Fa`v1MAI zaXK0v4fb2WUjy=qmu1zUub|Ul#t04!(FW$BED1X;e zh#Up_8L{V*h|unmsK8B^#9wqX8i^?4nYExH&GFNTF9rv0`K5j)G{F9_Gw_tO*`ED* zflW#YU74#`Jbe+GW!M3fQ5wiOjyP2y1qcl^ZiywR2^s+&zivkpCS{zUEz zcve3i*@~s`$Z7ICgbGkY0B-y^Gz@R9$N46eE2q6vx6Z%{9*>9skicx-qXx?~_PU3p zKNPo>&fkj}qq=XYasz6J14MS6Y0$+#X3n)1J^hJQ;K|uYS{U=2?@Ceq$)2zQwz`h} zwn)5t(4Vh}u2j3~rGdaMN`OIp+Eya*RNX=#nmuGTP6RY=0nWNw2EntzVG~2lfCw7| z(0>QvjNzmFSq5viv%a?eJJ=h*SAWdufa~KFu^zo~50fd^WJSWk7VaU)ftlvb&Dt3i zbI_Z+cMNgxx5rv>QT>u55?FT)>NOVFkm@{!kt}OJL$tdGH1geet|4tFQ#g=)touuZ zi7$lPl_QiDzxD|iX9Y4Fdx@iN{`*6t%;z$5SZa8eRG3Wv0AygMde#+B+2UYAwNvW* zQ_tzw*wKSeEfOqar@~*&4E@+ue0O$0ScZ?BVzR1Z>F5a|kfGArrR^PAU&fSS!bqH) zX~HmB^QLMwapM^KK*Qpz5Rd-Bx89>#rlWsh<|Kj{oAnoozuC6jj|B208UDl&Ak*-n zj3A|UBTykAJ)L9BhuPZ(b~h?3cDMC1 zVsuVI%U-AP*D8U-)Q0(MqqbY<5h0abrn$olk(%CL!Uubq3{Gj=k|0);Ap0|_MbSGa zeU5)z{FdBwfK3zc1&#{hSJ+?lH_aEQMBT&#df)Z7SP072{~juugB~u-sETPwQ0*U0 zuaUr{&uFk2kx6ML%;(v?9m>V&_f1)p3T>tidIgC|kpwRDkdTmQY}zU^9pRVnE)Xm9 zq}}d}9({Ry)J2p?X0;voIP`-iYA#g%$NSS^(y^pI_Qup=?e9MHux5FUmP|%1v86N{f(gqJm)_v{RA?3OL_;FWoGvUyu)hOY73GYYgNz zP*5pACc#oe&G6vWY+`eJ*EG`yk;<@c-Y}n)IB#MS0lr9{2zD*ooy6P$%u4tx(lzxG zLscN+rZel5oKO#>ImHG<`*ybF2Znv|OghD}4~+e>v*A8L zn}qraPJ45JWQU3JO0XTdwwzbUbs*DTNf7@vhKbB1lJWwa_9IkKMjC7518J_sqR?}- zw|^v`$fedC|I(KZC$*5CUHf7+&1?jDAx#}{c$Eu^!swX|C4I}A#?eq!6IBPARMk7! z9OfwIEc2J1S;JY3?4D-~XKbqvV;3-_9X7S|_I-BGitCrTB`sI@!nl5AfY7gK+o)_} zyp2~k30|_TWul0Vf`cZU+-VYNLS#`*HHq2QSnLGcT1#{7?4%6Ca{v?b>djcr)5MFkGA50N+o@1_DsMFz!-=*BbRQyOf7$&y{}u_1G9OdR>UZ4WB>GVm zcasW=suzEu%1-G=*!u0{HYU}e08qO(WF0(YZDxAK{(ek)DQ!+hc*-n3;bFBCa1N-N zwnk_f+U=tB*L%P#?B4k72eH+Lk)%Pv?=lEq+O3i!5~)OTjLpE znYzUERD)2vf4G)2OB7_tTTuM6mWr(4R1jP3kqi&sFIkngxhuQ4{EFi4D8HI6j5wI! z4#-4f0{~gVuch`%yRu*zk}2LT1aCJJ-ieTk9OoVP)No~{{9mQIYE-6XuaF^8{qo}G zr1uuEI@4*anORyhFUH|!XcNpw7w2ghwPO`jpxc=Y?LDF7Var6@`xvK0q{leR?NEAW zoGSrq|7sbn5NNed_|TVQlomk zKmbjN`pQ)%z!6f3T-M5N&Q)yg5!@s!{>wt3tWIj326IdjbuRYSy9i;jOvq(bNsn{K zR-P4i23-xW0gQ`CQ?f;MQ5IC7W6eZKB^KLHxu;JO>4)VNnS^K`3$C*jzz^+?XW0JL z(lGoqX5~$yeH1n_$Cr^ksfR7?Oz!CFA zrV&IWjlSlH)~;d4(lscvgMKUJ5lf}@VDa3P>|#opOxie!(C%$k{B30b+U%GqIp)__ zpnhxAAoZrKV(XJP+3#K>Shb-*s6tj8Zg5dt!J=2W+Gbvi3bC)=f}+hmlGJ!MXui_! z*i9Qd#vx@`1VyGG-*oD7GWG%oK?8&*n9@b-UlThCi{5$JZZ$CWt;bb8N*T)HS`;3e zYU%jhpabZ~N`mtajL1jGi0$N>n-jUC8l7oQiu3$dXx6cUc=^hsOD4u5JZ)IkGyh6l zuL1P`L{76tFgkTr0)(C0wECZ0m?ch1Z(ef_pe_nB;TP5;wm?#j@~;SMqPqr4C_P#) z94^ZoEQ#K}E0aah6_MU5x?kM1G6v=$hJ*D_`m4gTBXvsd?_SUb4!s1dg$cFUd`oEB zVy0>{ku*=8+T9fDz0gKe9QiXhEFPMefVMHIA&}MgtGS*_qEmOWMHxTE0I?J(!XEvP1Ysk*(jS!92?#-w_kGuv-8xa&YDw?qW zsFCv1z89rmZ2Lcs*tf@p0UNC>c`?ZlgkPy}lI;WCm-|D}ST zWTwpA6KRr04OwpG{uGGli3|M3`mg7g{a=Kg1Cu6Dx1FbLP209@+qR8q+qP}noVNY8 zZQHgpUn)0ARc=-O!>QWOS$nOuSP6&+41Y;M>~6+SR8*fHwIUKqoofWg#=Zjg+7A;1?A}iF_&(eP(5K1N-0uJ!;*jMOJNfMSXcNP5TnE z+f$;4%%vKepZ!L{QGkabY6aUFIX!!U3?03B{vDKVavCzJ-eKQa*=ze;i$x>qV<~sT z>@H%dCe}V;Zo+^er_2(JJbm|t9@7E4x&3^h2$w1eG2k&TLnY!##c-HScP+!q*03t* zu~MZLGKShq3|u#jzZ89qiLkNVg!<_XD$7LMu7kb1tMOwj^Z3>s;|D?k1Ja@WSY4Fn zh<@Q}I%13Ar^NVzxLJAbbF$ZLFO@-@G_xU9K_ew|GNV}a9fnkIesQw7T$KcjuqX8s zTb>fJEw^o2o0LC#-7?Ze2F#YrP2_X#>O_nL|9a&mOAq{ud6|7B9pCi_4ERme^}i9i z{-a?1N9bZX5-3 z?bcWPH+|LJSpCciVvF}Yr&RZt%Go1K1pZ2E89%sj8Q*;U2n|66Vn4H@>!*MsjuhiO z#Q6w$(!99AL6YPxgp(Y!zkoKXIGRUe&hfzt0>bf}TOO0E-|Kb1v)$yutk3C)?;A|- z&(@bl`4ruRvMfp9{-i>zyD)3RwnTfhc_LXQTPAhECvMPtwe{Ul{k6wMxdI>KGkxT@ z(*Rxdg)i?=-40G>K^gDs;bb+hohG*<>)MSbfN@OcE)AA4c!U8L#FR8i5X>>3f$6sj z0mOJmZhj&qiU?dADB&6KUdG?hNA+4B@St2)2I{(L-4UlDARENLzvfq-1>f64fVEJ6 zBrjfRY@0zY#Kl#3E(R`)-^)ZoVpI|m$-kKb*fh%9(wMdj+}eBe@&0tE^HhfCW*F-R zklfe`{eHuzkmX@qJ~5HIHzBtKTT(TGUx~UU=@XJ(j%Ls^q)a#M6(!n#2kFOM84l+w zlfP(d267WInqERuO27d_nMV+`lY1rqD)2SxOY9=z!<-|3yBiSVVI*gym99QoCu9t` zkBcyzkRbaA3w|WaM-mS6f0h=46!#A;gid@-2R(R|w4cAz&OIVgKvN(j1Oll|MqYbE zS4#_i(BJ^PXC%OmaY=Itxn;aeKxu>9Ptiyb;zZeD5DH3jW5P_S1#e0HDz2ZY2PCV` zEPQw{%^u(oBt=9f{#8KQ7j*{PnivI>-c99~7K9sYBcNH>62Q3APD{A|^QOVur#8`N zYPlj)8XjwEl*aR`nxVH$5Wq;gUB%d4VKVe_a%GoYrc2}ITEv&mTB8D573MPtQMHON z(3WscRxeY@Ru-P|hi?+vWM9amBH=SWi1z;Ejqob0GS)c0>|vw1c6rF~78oS1_IKBK z^g4q2vYF}<_#J|jTI?78SCjhpfgG2o>ASfM>!Uu5VYL=NfQz&>yJx*T5l#&0sgq}Q?>}C;9p^`m1$q?$)Z>q;tx|} zJ^b<5D;LI_NV!&_!(+LXaw=KiDk=sSksJ?nbL&cAu`~2pa*8s-uT$MiWJ*c45A(!p z#M~A)FE|#O3FRdmH$ZXGhSnZT(RkWHO-|rwg+5{4f<3L`Iy7?Z(14X-6E3X8D7ST? zng_svd#RI&M`uA!Q3_NEGVP)gm%k}1XGvnTfw-Pdxs$aD4wbbGOIDjbA2+YWAJdpn-1kBU>N*4vCfRBU30GgA)gvqz_Vw~paA5FEuIunk-7xva5YV#aERl_M2RSSK2IJs9tCP}{t zHeXU>2J|=x1XZpS>1n8!Qs_$N!$ZV7rFFzI-QXoIDJ~a(Y)EVz9r>K-MUfucSPsGU zC=(+3WdUJiMLo-5tI02Zl!i*Q{=Ekyj~Hln9if57!%WamrD!CVxgSJAoolgj2$);a;v*0GU7 z5|U<^0#r!JY>xFq&?->%YdG%h*i%b{Nt1uM;WwZRla(eTSx}g2GZpISoToBH64gKD zt?@XLZrjZrx2}hO*e#4Ips}#}$jE#v3AfJ0{6+_5Kcl|hY5ogcS!*kXq}U{J?&oW6>jz?t(WCEDqk7CWC7UJos0~)Ff%0bPL~RV7}ve zgiQa73)w9NO+MeC9?th!-mra;c|Bha%Qaa;nPKoKos!= zm|v$*Ljl!X%_mK_<<8+~E3P93-WKm$A6Ca0#7jt&9V>^{4u2rGBPiRYL707~zH}gr z+c3O)Z&1!a%EVjCqFn>AEh8VCix4~0b?WzOs~~?Vg2gs5=jjE*mZXcNZyR>j`}-0~ zqw;4Sy^`*kw!BdQ{fWP^HX8^fQRc7rQ&a_yyT#J@EFS<2WQT=CPocwf@NMO4v6jR- zm9EcNK7jGQ`S&Izz3R5x50Ds69O{3=c>j~#{sVbTEX*AL2l80{U&#AU&f@s z?~o0#XXf8NvmW=twDaFK#mf`8ofH#bI7UeixhC+O*o)sORY_H0(oX*2PYT7tOFLHi zt}-LP{cY0WhxdK`{`6xHPrf0$on3nURfoXuyYz)B{(k*ohj%;iv4c-XkI>@fvGYXU zTMIYH<#X=yaxeYz)O0n;^}MkmeqsJ$QT8V5&SLwuj@jzyw}qEab@SU^^Mnx zknN}0`%WFRvGIHty|ave)v_(~$S!k_>~m#Eb!oTfvGBPt(TdQT7Iq_%S1wjx^)2*j znd0LGn80s7%RlFcxxixlxhlex08(I`w3GR@*zY?A6%KArLa9OA_!esJ>Q@L40wxS;Jt<5P5rLP^pegs>@c z;y>M=$q25?xX)*WgvlzX^F}}c}THe)bSvwHPA_B>`S`q`RNXe6#0Hb3P%&; zufyd+#&c8qgYz(ingWKFmHe0VUT6uzR6o$`>WU`K8X=okWgKCuvod=BI@DjYh7Pd# zP#+HQV$uL9MidPk2NlNUfWjlzrdcaRPsigf*JK%B96fW3A)WGk%0wUpD7F_sz7tF` z*X)plQuy!r43Xn%bQg%%g|o1pyWo^tEP4*vFXs+qAUZBD6ihYE-|J|GZKm+6`HmA? z*e%?7L<;%rW>BV;WTXv5D^@z0O-L%;`XjtNK693Hoi=3$L2jGxojnQ~ zRK|J1H=p1yd5A^7TrKiMa{+KfHzjugE(7Vr=i{m>VNPvQSqeiar)hG^BG$pLT*|!5 z%H3nl(g7go-;xscnS!g5G^SbMaBg4?$r;{E`atnABCgX&Pn9r@iy#f%3>e9`gwzx8 zAbB$!Z;i9qP&5?2>>Aks+;#j&Xze#)#@r9# z2ppw|4Ve5hjOFL&X$Sp{i}<=pQOaM3S=~yijf>i0(-x{~YdtlGG#Al{y{Afou`aer zlXLJzxlCKn$I;Y)-MuutLS&I#Xy;UoDLbT#Ka!S+stYN;CB+F9 z16|0&ED{H69IMnE!^r(sA*Rgxhntx6OXl~?y-5QK7W-`t(Vf`>OmvlTG(oITMZ0El zq^Njd&zPUJGKl4Yq>m#y2oqC5hJ=0bwb8_3$pS(h*tVOX`9cJ~SikZ^*0V`qKPcKj zLzvbsO_Cf&je>*?@Gz8chePI&YlujdGEF?MZ7;=g$k6XG70Fo)fEaK@UCZrhHGZM| zq~p~`ZI&mCkcb26b}GVVn)-D6A9Mp3f&}Tt`-?-ub46dNBX?|C@pTTQ(uT|}6SdaE z1}IcQa-Q;+=+EhgH$bIj1feEjv{VW-B~J!Ad~HI%Ns}qnA2uN-mZaJh$zw~DY-#t_H-vnNI1jyi+3~QTZ4XP< zYW#BOtNjDTI~b6gLMAx=Od_>G7KLzTTutN^vr?zuHQo7pjjGDU-IS0gtJeX@z7$ zSTozTRX`b-8i&Zs_@sNLW0uTm0R>A%FAo>JT1F^01o)yhkK27|Z+E-^6Z z4=e)!Na-0QKq#Xi6rJrgF?I`rZ2kxeg24*#)v##FWDvPWRKY`vT(x=#PU;Rjrlls` z8AnG8G#jQ}9>?(<$yK3iYNtf-93LgIzi#DH+at=!45}qAfW=dD>W)QW=iVsqk!-ee zW$8?o!~2aWmr^f{kccpVuf0rZB`=BLm%67_Th*|c_Pr|Pm-#xgF7sltrpdGLr`q)rAsJybFh~QEJgSyjJITB#5#cwNZt^U;}xqs8)2V_DtA^qP$;eTannOHd3{x=jd zasF5S_WxAiGI9Qg6#qLc{9h%xj0BAA?3`@>cO~wUw}%0W=(-!OkBr;Q+*VS?*kR@v zBjWTg!e9Y{AQGSfRKY-?eXPV^0Rl#Jkgq}_g79__cN*$lx1gvxpj)cJp!7Prpn7UV zfrZzNW=p(7DKZbdOU#_JTVFjdUpLaH*XQTwl_!-aZ@f#WSQlB9@uobWFZQGc}1RDBx_P&a>Y3ld&v zDyZtR=ccuh#)6Uyv(xbrGLD_d%Sp<@JYMAS8SLiw3x}G) zV)GF>nJkxI&T$%#9LHkkp=aAK4Sfa%_=)4U zVD@Cu@=fs z&&vIcQYlKCBXD;MaQL+qURt2_7Y$dSweaDT^KUE<#bHqtN6v5}#1S{2 zQPM9AvYik^lE6xOzhPA;QVBsk6j=BS(rG1$RF`Ny1KRls0FB(Ni(unAv4ByRZi@BM2j+2QLN8;_EZnmi&(3hjHS8pVIzxsIsu7iwkhc z9D$FXdX2FMd!!=8urNC1!lvVqON$jvbv_P8PG@7QjrO(cipv4__xD`fi*3pdb|98x zTBUzfjv?bxGlwO9v+^{4_1K@m74%!O^Qe!+@Oy6m!P%lyuY-#N$*2a&Fo6n+#~m(& z>Ic%xM$D?4)rhWElT9NL**u_VuF{C04bMOpHew+u2S)0W!865eZ!ZKS$A;T5U;@d$*6 z%lYYRI};w+|09ruaJVPl+z&NmCB0Y^5g|IyQ!&1AxJ6`hJHEXN+A8`RWtf)4p0886 zRa)g`P8Rsuw~#a%J>KhI{J=VrIxnKCsfKt`2EbCuq@1EC9JL6GpPF+tZPGE>_thxI zMA$*3^|VKF840wl_px80iqQK!H!L5=cYD1j{>QfCB`-@2i(DVOtE{l=6ulj6_$Cx@ zVwKT#L{;5<8n?ypEU3;u*sUMMIVjkJq`+4&jYA7S$OYC6T|}x!8f~b_tL)0+jbk!q zVMHY}EwyZ+RvHz}mML+U5%st>TO#}kh(gzV@G+pLEbW$o2FE(1RrKmd)25qIF;grd z5>ZtZ#m`4D{1%rjB`{*Lv2qf(PM0O0)mk)TlFhpFa;O}+)L49Ow(Ib3S~pJ(!81lP z-o$-QOk1YqM#3B90RB=Du`v^4I5=7zY#2438FgGe2aj5E4p~RcFrtj4Y@UqL#2VE8 zyN-bqWIY+UwXLT$&_3xsm>Ds*G@#$|VFc@aH zZGaW83V@gAvh)7#zEd}rKUKrQf8Td&dlF__VAs7q^acBUU*N3rd$N?#N~U8FpLv~; zh76-=ys&oQNW=EB3F@i>Bh*-d4HRCV|ys5SHHXb ztzA9#>Swn-z&JbTF>=z&EQU3ema_fq_#;>MXYyto3r+85a*=$S(Gg89G3#qJ=4pYs z4#I{Xem)nft4+a-VY^hDgnaf~?W2NtNn1q@a|EYtWVFNU2s*Zs)@Yk7!}qu_(aSmm z2{7et*y^zDj=!1s^@hH^`S+xozsuoddr=2conh&2H$fgPn|Jg3OoVJ=!|;;`L!Y^s z_mmIrqQfRJMq^VT3d90xRcsB~+R3`gSc_E9Z9QJqY2CjtycC8QB?Gz6Yx;=AdPUiFP9rh&i+6(t_v@geA$m>hnoWbqk%OV zM(`r<1k+7!5aPFeulZV6n?d$I;;Jcl=I_fqCKPQDOCVlaS~QQxRZ9(swA4^zWRnk_ zZOz2^Tpo5Ci2;UY;+Io?$0d8ZY%a&8pe+=$dSs`^+Hw&4P9qTxob(8Lnkw+C6GMBn zAbYjr@bDRhBu*Bm4XZU{-uYVh!=()~I{tSEuSj>-@6RTqNL+qOSZLXdG#=MKd$T|A zaI929?C)m8;)hyk~h8lk5WI6yvj}uc@9pK9HKv~gR(paWU>gL3N-dia2&w4 zJQm@)xfh4hp(JH9veFn#GQ1CY?G9#79j%wP?;jbk&JSjdXoecHd~64NBQjo{OT=|+ zY(>Xk%FiYf?Qah=nu%8<-UlegWNt7F%!KY%5_`)HKItB$fAP~PvCOl<^lCxkmJEoZ zMf;(gERadrsFcB|p$B--Xdv%IN^SQ`fJmh^MeUljtkp!xlF@1585j039MIPT^g!)K z2wT_xs3RuHqWh9^g>$gL_G(q8M*j2p*CLN1U3R=uF!F6#W|Q(Ebpy*gr=JOWzwLy11XL$N#wy#i>I0wVMCPM=geq=ETnLvB2_WD(`Y>HB7h+x z)7afr1qPGhNGJ-|N*I`hCAQQN6Q_v}yLWtW)T|x@z@0>PVWF+{9@t#=MOzbarI0C` zGd1tyZ`{T8+CklDHzDBvFw6VF9zcy?zk*g6H97JtbfT9xgQR+}w0TFtR3%bXMOr;c z`>xf!)(jRK-ZPk{vr>Q^<^TR$nLRXtM=0hvMqE;{?p>p4mCP>H3b>JCgW6W94m25r z--1rUCT@)d151PzEo{_%hSmy2=1v%d$Kz>XFBD<`g1|GJi>63u&zY#@jPBLZaRrfi zl!5z1(7*sd{oNZbMGf4#8jYHn_Hj8FdyP3~!%Mu_ptiF`H{c zzTG;&pLkw3ICIO=mBJE&k1#{*7JLyfuPk86s!*Bl&=0EDilT*hERg%V*aKJJkAfg;N&6I$OVOESHT3R?c#r?n|&->cM-*di!_ zZ}VdHUk&ymI1}Q3Ly$$#n;(4Z%73e!y5Ec4@g}OQkm7+`z zJ51OvKCbOfw{whL*RQNO4Sud)cNCM456BZ%7*8Yt0Txr3N!FZzeFbYJDi{+shB+W9 zR9*l@I_wap7{oqe12i*!_BJ1e#jrn|5_nM{9W7q_dI4;eDQF(aZ%zFj{cLM5p_u5C zA<5g2;*)Z+_bzS5fe-+sL6?A!bLcqK4jda$OEs#bo@CrSu|HpNI!ov=A0O*d)dIhT z*>9Av#!R{29h>IjYK}5}Z9>Ef#%cUZ;6jra2qfXoJ>0PGF2N83A9thE>12ZbX0tu5 z8bZEdvu(wFhr?ILXA_>o zO1MDUt;wOEqW!M)${dVWCCxON2wqQx6JUrE-`>39$6RGjDKbPYRt)dBl71k!EOa&G zb|~?RBU6t6um>EBgdsFAjtpWD)_VZaBFIgbt;|YkiEC5xr&5zVw4*H!*oa~W+YA|b zf)yGCQyv5lq9Fz;n5QQ6-K8_?k1B5m4(E0;7gY~FF4}n5pJjZ9o3dNqn;Qj2-`(t6 zZN3IF0#7~(cAU-=p5BZ0NkR#vM3O;#?1(vlCL#A7s(=kDR}2RD#Ad{z<17+Z;fHH< z0jGgjbP^Ip>S@FhhJl2GelrD9v(gp#Eab%$T`|`hw|&kN0t(In>U$YA6LN{f0>XB+ z2^cDZXS=^9QG~&wPz55yr%;Nx`w51{Fe{E*!@fO$w{whH91t>ci+MQYfc2@M)g%Ro z`rtZ6)ygd}O>>CQHKdO?mrFjGJYqIYwx}l1G=IBS<%bUvWXmtdYm{fUW#o((ZZ9VN znXZ(O*mW%8AVCm6v>dH)Ls_B4;@!mXK~dior4QkUy7m~bfR@#34{mbv5ed^7?|A^v zx962`2fy*hWam3|6NpUjKXS+xUaU#w(X16i9&lfB1kPac$@hLf{n4`Dti1_mb>0)A@b0Q+u$2&U0|$3p z)&O7b+nPjT1?bWnRPn0Eo7{F(>I8Gtu!Agom>IPHaDgm*+dz}SGG(ii8RpM)=hL@j z_BYlS?h=saSP|Pg4f~rK0Jd}d9en2LQ$lcWQ2#oY8JJLq1x+^_WO1cYHsH9U>yjatLB z2+fiuVCYU7^X(9tg^P%o)yJy710z5#n@-u7HXxk>-Eq~~b%jdTS|~c*S+uA*3A-K2 zjjTtwem+APvqdoXuoGyWHU=O(1m_tS{Cm<7yS-?jVdCD>#9LH%i zPL}qn!7^O1kfMo+5j;M;*ur8qrAsgVdaajJRS6(!1-IXZ;x~M zgO6{ufBaL)2}bH&N>Toja<~OMrZmoWha9-;`$@~`^zf0^isY8i4@e)R4z~`~MC?%5 z#cuq*i6@OpiHmw6A-%(+K9MN(Y{V$ywwLD}Z;e&wT^)>*|Mv;#M!`3~(4Mks*ec*Y zF^3_c@l7+7Al5XxAkL-^m6nAvaX?~83kWlEnhXAZLYTq$DerQ*qPk?{`!OrKlc%}t zFn`$>x3l!yogsI1(C2ZRnoyQv21n3vH=K!(49mhEkCGaJ&$>6bs9jMU3UdHr4mD8-tPobAxUlNPmY|tXJZyIHFJTeFj=9~vEmU`$CTfj zN94tYb^(*QQ~@Vu&8h-j>Zf#3yTqZMxHDdZb#zB;hyx1C*#kILJ8hor;sEyX4sLg0 zXSfjV2+o5zAwAX^P(+5y;hPI30*MIuSC8P1J9J(!$+$Gk$%{>SscDIMG7^pgugCD( zp$pYo{^$;NgA9|l(rVRH(_M8Ob?(0-SYr$=8%*czv@~77oYTPhBIioY?YPWM%fe0uiG-K}{XOqyWq!DEIsfTJyB%?iaD*%EZEP?2H5|wB$lEIUSuCUW2d) zxm+G`x#9lRK0u9iE@0`2pB_L!@(*zb`{$YsMR~8Lt{9^tpVnI!eeR?&U?{K+3 zI>@57-()ZAxQ6g{=)HT3YVL*18Qu--F?!67n=c|D@1VliZC88-_NvgTX(`uMowEYQ z<^?8Yg(#Nv|6^1;l(@&I(MS%opQ!nKu%dDAgvbAWMh}l^hneG6)9+^E*AP>7w&MM9 zofeu_-QO@3wd$5T!Me%V5+9dc_bc|0B94PqeM;1d?(rP>;W#!#h|t0k!V>|c8(0gC z#-fD7K!}J6k^M|uEWx8(q@18i5!nW@C11PZNy;LaK-Xxt92?yQgoy3KxKnv054eyT zG2u)2lfd`$pB>k1YOWT4aP|+>W9PrCJ+R`Sx>LeWbPaG(*4lrFu!UghkPA(ocy}^`mc~AY+we$f!BnXK^3DJ;a4+fJ~6H-C~t^2 zlspN^?QRz8l8_4OeQ@4tV|&~7NT4I=uh?_sWQsA(muoO0+xhDXp%w=1b!up8n53Ti>=S#PFGA6tk|?@%&HbW4igg@{NS`5cp-gVA2V#k7@Y^f zAjrJKDzoQuY5KDgBJm8vi*1+As~wLT1M3+$54#p<*4R@s+qx*Vz|mS`hlcy&s#Ck> zXYTA@t+*B+-o6N+XkKPb2#98fMJcMToT~#zk_}3mCE@YPP^$8-xsphJ z_7xp~?$9Rr~`);UCzC-Cpq0G6w;&vBMvx&=o^gDwy9=)B{NXt(mwu9eh z1aZ@xGH}}Gy@+(=s0Hb62aB9|;&)t_&zAIW&xhNSDtM)1@H+`7oBdNv1_8gF5Gb4m z$!vHBJ~j#`gHRr^eONqG=Ufkba~#-S{DzM5wH%FNhd(l2P5gXA|Mm$^DHhervsL}F zvN*>TBpwY>Ba%Q|@%R*A$vD}fqqoMzG$sCWM^VMVrtmqVGfBr3(hjJ))9Mk@B~&F) zWKUKVdTW8~eT&;fHR`|`Y9@{d$&eTnCnO>Fk)YoK z^{bGLmE@gi2t`o^zutFGrzE*(+uIAF%K%2ePO!(lDp1s~g^c&|?tHbp7O=zm`V4Fs z6JuA!YmmDOdpUdUBJh3)Y<)e*{Qm^;{r;>Sylk{0A!oO9`049AGBQn0ZEKxC`MpE; z$vZSTp=Y5D5_vl5CW8XbwJTrTsvMV$*Hp zJZZzOu0C+Fy;W6N{nx}GzW$izR&3mfImhpKQz(SM;bSaI8B#g7yK5cv$UjVPN<^j9 z*ZSY1M+ns%cH3BcM+kj3rxTR=`@)1ckb58_B(A~H3xvizd?wN4q#XXfSWq0%kRky* z;ov$z>|s^=Yyu<(3SvXR+BM@}k|YwT^)QQV$Mcquz+Zq-5%TFAg95^MD=4|$rhpU`KT~I; z6Lo#Vvbi@@r2^HUpY!SHL{r6#-rDXk5AQklTnK6dJ?!RzE8@sn z!&Sf5#&`-vpp_tXNjk1A#gZTP9ujC+>zJpV-%$iY1J_1RidS9jK14q`vKmGz7+A-r zvw?i0{CA8$^%bbFB2z&}4aZU?yd@(t?Fh&JYenN#8+;3AWk7<(lz)?IGvwF@Dp>Sj9hy9=xp`-qr${>mh*10dbq8 zQ-OA*YKY_vGE30alQO}xP&a=5)ovlHyz(!e(NUgOMaaY^(NG&V2kUFc?bBW>^XXz8 zs-f2P*&Qv@faMbNo*mSy7yUv#{kuB!;XgRlHVS)-fh*-r$ZYI6pi^-g+#+cq#L(WS zgeZQis=z7ObjAn`MOMK9aELsfLs515@Fey5J1AnSAKdFNv4f=fY)Ea0GVk^fW#AZj zDrLH}$N8){8;i{7`}x5frG~m~+NH39<9YLf-r!zeNb)m@`RP6|Wv3Raxppf!-^AfD zxzOwRoHiVC;l~K&?twL*8YPg2z6AD=Wy#!{V0)M^JT<5Y6!&=ORePu6iN)LM9(*k& z>%TY+GLY=txgRjwtfE0{jZ|I=1s$tA^VcPKVtrBv)GYd}*8V0ely8HBsfoz@(Kjs) z2}c7lNmst^`_I|;M%E2aw967x zP8}nfeNkIG!2(M@)dgR4w~&xdfE2PzXR)Tzs3v4FPpqX*z>k(~Z14EiE?PDfeYt}# z9HFRc`0rn3PJf$zA7xcH1sWJ{)SD5AyVR zZMt3nK@ei{`o^EH1bp3lv02wzUV|_rEjh|}@hwgq-`bN0k{h;{o~K2~O}3>#pPN4B zJ3iO4h|?+pnprZ*hj3bREJh{jAfRoTB73SRx+O-oNfEUee8}cab|1S=`~4@y1s?s` zB%*2rATOm#yeV;W-BN~1lJne>ep361pqi;*DyMnm$yU-KtOHgyQDpC|gn|p36n!$` zrt}F2N}Q(Z-uO3L-^g!7d{iG&$oqt?drHc5UCK>&5rg#lc}`9f|NQQMTKKDR24U-CGO3`&Zo= zN7y7}njBirEHXKC>(_@W8l|qf4Khj!EGLh^bZ|OvH#rVii*Wb@VWOo+(m3EBMk-j0 z25H?<8%k`(nZ{$fZ@qlbn)C#QswNwl0wvcVN5k)0SRCRxvr$8{Qso?WkS06}P zl&~2c){GZv+VA|JS0E)c+=&wj*c91>V*y81Dn^kOSVT=$g2tt`h;Q^A64#=}jW;-= zK~w$kA9WKk45p?}(2NSSUQ-N~7Niyx^TNMOE%u+iLzbo-Ce>|_uge~*ZOHtO-FLBf zKv0NvicvT4Ka8J@zC#pYkX;ejau2dRyMiA57~E8FTG~%a;fN)I;#F12$D@sP#5oSQ z4hFZ!U^rq5WZ9y}6e;n2pXujgv|un25tkyybeEAfp;6Y&cfn3LoR#U3&tqHKH3OG1CGcA)XBQ2}gb@$CO&}(&FByWs@`qwZK#^%Wj1yzd>9&s>$3+Kt0#==6?N23Ky*x*4j6XsR zX6YmpSILn93Pj8*A&{nIiM}m-NtuCHGc;OX^^C;vlFuQ%!@ziE-d~1EM;TSVUi7)+ z3BohjH6sXly?;J&4fmPl61qzvBH`9&SpZBfsLg@p97~(K8KaFuGH?UdEX_gUaT$;| z^oTHtbJ@ER8AgPHtr|v`wp-K6;Vll+0n>^-ma#-Pz@t2NO?E{H3f)>4x+kQ1dB1wd zOJ>A^f*9nq@pqhNH_bsKNfWy5qKS>@SmyY!P9D=L^|?JCAUc1nK3})p(j4f})PFpO zmu+aPZoWx-Z!*qC1P>lBMt0zRY`vqk9pGw*Km5ARmS&6Wu6jP+UeZZ1WOe+h1>wW- zIQ##)+x6I>l?$kogbg#tmLZ;~T0Nk(9k+!`E7Pw2UNKKHcgyb6s$9kIvvJNM7rRQEnHw#tGITiJ<_>1noHq?vV2vgbHD%!t zq|8Z(b5o>=n`ms}Nf>5GooK>H$(;9HI^N%~W4Ira6((QAx0}s%L})+xf2ueYorH*?U zxym#ASnjgPV(rd_{ruLXCW$QQDPOi%rLJWuMN{l>~AE1Zq zhh1AdS}Udu+slTaUzVXYs&7ZiLU8tE1PwQvV2LwIJ6S_A-U1viG>UQ9=hj!#T3cM( z#F$m(OKXvF4ve)rRFM*r6a8E832!dyMgJNrMm&v)C1foOMSwC3puMN*?B&k##v!s* zps)h=z&*|_APxjj6D$gJ2yeQT6YNRV9&G-B$$RinZpjltRQxC-dh{;Gcb2h4`YNmzJyPYVD4)j5rF4G>_)UcBR5Lz z&~zC_C++}$rws^r@QFGa{;mv|a;O5qK4<}54DiiZpHG+&N0uxo1L*Hl%4W0Hk1OYB z9N0CodaiA~b3iB54>&lJq({Ybm^zHUWv|U`cA7yo;ab{&@YO6)>Y`^)o&-wQZUag1CSJjSB55mL>Ut8x>f~;zsT~Gac16Z@P zw4F9slP@;l4?G~sqc)=-wqVpLU}eAGi!zgWjdR2;rD&FWLUCXBYGXf%Ws01ju2LjN z&CvPgvHw=yI~6MJF`PTxdLJ||WnboOuWTo+j*iFv@fg9)FD&F=e^s>WfzrY?YU|d@ zyyMJZta<4!6vvf|wbz5w=1kidB&Hj7(pz)g_Qz_%mK*;I-ouPp?pnleMgH(@?4TrU z-3wjp59N~H1=JZ*Gl_4K$%4F1Q;J1AZ0W0raG2BNFl!aT2x24E8%Uc^e^^z?x!}F? zv1#~HW^hh z| zW6_=WLEN_2LWh^6kc-?hx6qE)+q~eP*h@b8e$!2?do~RfQTw*awH#ms1DPiJ5KY2c z)m?@Pmv@$ZxrfrSNMB947cWk0$dW9Fy`x7A#PmTvRTJ2A^gRzW^6w~h+pvkEjIkRpQ2m18eZ($2?lw=xs3gGLW@-GQ6ppa z`TTA}=2H06xkJ~c{jGR@*9g}MPSO2Eh?PBcaOUptk1e>!@BKQ}bcWWvgK|cSfj~hC ze2AL0g4aT*c_~CzcmUl@D-b<}U2N#xZ7TZBg3Id<-?tPe-*;oT`=whR{scq{786WP zT8`!>v;~B52KC7D*aR*sif&JtJbp{&Zbi=bh>?Hi>fQrIbPWF&Zg^nfcYgW6VSfl) z5i%mgggy4BYa*cuEvNi~1q|;5s^g2(&aL$8&b=RUW$@Dg%z&vwb(_v6{kKI#vx>H> zc2CNPG=k*GA=v%a{Z7i}+dBhRPt zKJ9qew8$idlygiWoZ2|FPP3(iTE~KM?4lFEhb*n)6GY>J2x1d#o1uJ0MUKfw-X@)z z$C#>z4ox)aPhL}v7R$YcskCNqAWbxa@>7Qk7MMk#T;y7006DwxR7$Gii$YWQ^}pg1 zJdq_Qg{DBmbADnIM3pDmbB!^!`)ui^8FR)B8Kxm~26vgJRhs;LG#gWnshVaVZ>xcNZmhLdQc~Sf(Cr+^V|8A=1tgsYSu~x4`~45{zC50)ulv7w&^#ce zqCp|8MAPrOsm82v?5gKTa3Q3`XqFISj8c0$p{PsC#d!D+- z^Zn#}uKxKw&#RA|&fWKY)>-Sl)?Rzi}gs^=?gS6Sv>y0rel6~D?W zGJZk6nj!A$AC78;s+-!_7%(oKP50BRHx6}m-y0ejxZ}$4q_XGdhbTE!gMLb(njz+a z4%MqexxVT)27%?PL%(m=3$+PhD4*OQWA3TIYk6Q^P0IFg3;QURclC#PSA5g<6QY@< zfV(fUPc|zqu%A8JX?e|weF+yk9+#zVzh1arW=ViQIXEqNLz8G%?9vnRacxO%b4RZ% zIC?bo_{3w+)I&aOj~5FK`Z6H2x;0#X#-dwE5#1UmA6+^fRAQf6c)g=(yVm&N<^k`& zBwoHAKT#)p%d)8%aSy6%_B~i$oF1Dizx@9FxaF&43tG3PpJ&tfMIJ-D)RqWkU1gQjm<7iUJw92OsORN_V0yGn1fookMq9iO{;+6lF# zl_G8P*g=PHX+?S3Y?Q0B-X-^TbKBewtBzrk!{21I1=1%xu1OLLu!s^%o_qK4uEdQF zZ1z#fn2{+N74ytrv*qh9&y?JoWIcGc*+%uxo6lGcyd63}MrMio80+BRwdCd%`Euu( z#TO>7G*mZe(aP10eSXYt=-JgF7D<+#3$`>eWJpNcm(~{wtZ- z@`p3S)Lgm_>-Z_1&D`L>)?ljGft70p$Tht{QhkOv2T zk|HdkUenrZ)b@^LE>2Fq-jH4vvnDL-#IM^Z;h!sgKWsXpBJha+-?|UsTa{c_(hqU zo!zdGpO?Ol7}IU_sJ(raYx~*r&SRPJ@eUJ@?_Ak-hx2AeXCpuAgTvs+y(36buLFEj z>E*Y&W?!<1w{2&-1S;}S$56|Ia5+@rB7If&V`X5n<~ycKbB{8@LA^qinHmn z(6g0W53ih1tm34@KwHU`TqfBm7`W@h(2s?^~d-5Sv&u*@YGK0POH*~6zAz@eAAlORKF`m{cidd<2y=O;cG`) zXK!>+mUOtkZ~7z8>Crc9{n^y&FJr}@F08wIzmq*B(*I3Uw&aPdACe<|NBV9%xh=sc zU3A8THzU>!u+S9?m5-*Q&M*1FhLq-q_wBqxPnIK=wC>tG(3RW0myC zPD~1wOk@30b>CBr5326X0zJ7TEuIHogX`nq?dr+rd85A?+PQN{>Z-{9 zr0V0q_25gf*c=fO@-@gW$OlA7>UN$wTvulo_>ZQ1uDgX48~g(@w3e$Imnwzr5ik(} z_5MBQb5S`x4RimyZGcH(k-!J|TmawAj?dNLI`AC1zitw+xqrvw;F9sfS{51=QWj}A zIr}9=FIc*5($d9kyPDbuO0G!LVQB4_{Mr8MAn&o>qB$KKo`Dv#LCc?XeqR5kvHHQ= zsu``;i5*D?Tfej}&b_ei7O&HIh;07lL!D(^=Nju*WX4^Hc;b7zvD5Qn=7W-^C#~<5 zjLx-wJe7ax^|+Fz^82rj&#W!WpZTQNJ0xIcsqOcKhzpt9Z>7F(bv^$1Eqndq#Ls0; z&zkdJd8s`AxKFlw*t#oG7bfSAJ$81VqHU?e!L<68xE;Rc?qy#*&dIjk?fm*)mGkP$ z{Vrw0^1C^sL9b@FxCL?Vrk`HvF@)2)Uc>NG_KjTb@!ivQ1}^Ek@pIG9t8TtC4h(Lc zbf)?dbzXyWO{m&>yY*VNz-uPiYaM#A{{FZ&?TRsN+V@Adu~s-7v0Xi?t#m3V+{qo@ zF{x(Sn_V-b-}2m)JEN-oyTu-LzEStQQk`@~YkJZZ)#qVdQ=Pn2+|)wVLc_YY#;b)! zE#CUWJ@SX$_>S4N@@?~i#XCo?oeYMV)wV<8&8|1GcMs=iedvyv)4zJgoIjeJ1 zd~}z~*Jr%1Z^bL3+T=UL-Y$PQtCJBlC8XQIrm~ZnxISFr;>_1NSB~(ayRLt{*X=mt zYyCp4uk}`Qo~x{IIBILB)5dC<_q_X?*tYej-h-pk+vF>@tq+&3%+8tHQPT9I`N8Xs zuF@GgwV~`uo#n=oi`SREm{P>~-WVYN*$AM}e|YsP(V4qUiOtK#&P=Z;@B zt9vy>)_*rY|Ht4+roQ%k#QMycA1fxAD)le^i2RGsBH#P}?dNSUzWOhN0@6bFwu_L=c;+6i2or%z2x$rM7{13h zmGi&4eE)a*6N5pe|H^F7g4PC1tImD1iZ*qT+oP#BgI1oRZ-05|=Wd5b(znYel~_pH zPn?@)D!+Th_PM3QR3=*)j>z7>r^WMzZU9}`>ghUJ1J{qL(i``hh-@k1>|4qSvtlcx z$bNKnxpN`h-bL?+>VoHtV6C0+hjbkJ{LI$B;lQKd54r8Df(zOo2PeFr898Z@#HcGyRMhj8+DA7J$ZGpnE$LJv;ytTzHak;l!EuL6f2vrbuDc!>3H@m zS_Gv05j-JiZJm%8H0*mr8Yv-3Wl;7-k1KT7&S{=|^MH>Vt+>E75g z$|U%xN}|g;{*Sd`_oWsEPqEve^0vwWl-^5NlpJTQv@y(DOnQEGn!!+~9o0_$la-uB zFFf58@iTP2*YIuObWi!M8|S?7d0dhxHMVtx^xm1exl8Zx>l?(oNf+*xWk=lH+d${& z)Xuhw-6AzIT9LYS_xpF;R;F5tyhh&cv>PqU`N5kK3jHKVYGZY27ha0a8W(NaV4E5> zan_;+r-oOStuq$P%1%Ds7JX;QQV($WclKfF_wn++B@Ok-o5dEMKGM9mbpPOnHLsN| zW<;-?GP8K^@|*QJV}cD|DvvX~74V&Vs8-XX#Cg)&Ir%yIB#)93+X>Ga4trUg+mmsV zbyKeDkmjdB%7w3wbj9DCH2>Z{*@}Ix_vtwgXm=+ZoBn%%DKegiMhTBS{0pCxMgsVxrLc|CDrR$_1bAQL*Bi!7;do* z%mfzL=ACuAX}%*v-27WvxnAR)gI3C=3!l{I9gMmptwLgHr&XtOM9T-rikgf+Zgi?- z6J^Smn&9Ly+!VEff-_l}XKSZL9t%s~U9@ja*14pOn=VzxjGtiQ^GWp9AZ?Rb_I?#t zCv)|^L?#8;aV!CB-5}k)nXT)vw8lzy1FCFM~v0plI$!KkrzC)cHugc z?3sr5lh5m>i{`Uw-+vBtmJ8sqOSF~jTvr?j^1OG^tnm6;D^qZh*y^%NG>*kp>hDO=Tq99- zRzF(%Qu-5LgOkOw=ARz#KR09UdZ~EO+posA;Mf$>;j-?hZ$FJa7^xOT()SwLu*N-e zsg9S=G98^*gAIPOqep)}yQllY&yI)N23IiR!={q_W`8klKDldtXui^ihZ{F+@|Yhz zCg}oWZjGI4q}&1H>C54Gaa*lh29Y0Awm$kMv>&f{P-)%)(pGx_r$z>g`j5=2> z>%V!}{wlGx;TG3#ZkZ6RyF`eg>Od&H)LeS6gsI&Op!gi$9NjmU`lF^>W=mc7dLL2 zWBGV)viQmZFW$o^vd69&XV6)?%4TKT$>|lMHVmT-?#NLk8p;n7j_VZZ4_%t@sL0@C z(wF0FiX&g=9&oZ-@y_M}eSz;sbEP>qzCWHEt-r$Bo?o>>igQ-nA^U3bQqzbTi)FX( zq4_JuDt*d|8WVhQqkVI-IK~#+lN3CwM)~uUWs9B}Sgj1b=CCTj z-{&1|G&y7T#+I9$hcz9u2a1mo;m%1P5+k?CEIR0Mn5aUDf0xc2$E|rM=5MHZa%Vsi z*?risW1XXC7Y76$xxkl-CO7u?z6K^^s%u^k- zX!Gty%C72xoRkP<&qR$A29wtf+hW+Hkrqh_n{u?G?wP{AEgp}mg7kJ}oY}kB>&OOv z(uIc$mpwY4d4Ck;rm@FJ|FPOdd(KRdKQXLZYG`e2x=gd4qsB?2R{`}K&9Ychg=^;q zoE*J;sppvZ`6~wAj4=M1G+9T?(>-Ijjmi9V&o~vK3tZ(QRk{1Sb4JhI@?%8xpbAy@ zhE3m&RXb9r4ZOd`NAX?GG~GE*o!--^T&>mHqFGd>+b(AB`0M6m-a8xayCB`XDKDpt z|9D`jWXqAkTO@b$msAXt8y>mv#ihZuNuEQrB=5f8pfo(e_iD!2{j(nJlP27t-eyAHm>&j0nvw>O%OH4yzy;kLxzB$A?HzYDKi)_E8*l7w?y=b&FZL3o{dGqRF zwWA#-yACTFMyoI@G&EbLHLi@IZu#hZtLB={Jw-p$saKwx)qmc%+dEXtDs}2xOVcyy zM^~7Lf7^H>>Pybmpcl8=;v?$5h}U(d$*fW-2(|yI$ZiS#7MOeN#Fdcav1Y^kkMYcX z4M*#ZT(CP>M#Y}w8Fef&tVHghU*e7_jS?ZR6i)`$sbwjQ9yO}sc3#f2%&A`s_m8{X zvHJe-`ZmkD!G+q5`FkHv@pj!eMSD_)s?%I%W!Bvsk)KTQZ}Q^Hm&aygWQhHcci$5d z=$xV8Bwo9w`Td2@V>4UDRGtJipId(Rd0uy3yJ&s$j1aHbbM-e4jXUY`JU^88W4lU} zZ}*9z7ZblQBrl${dvfA*>)eB1J*Ed{&FMT`n)Pv8=Hp98@1J}Bc;T$gPEfKe)QD0v%nX6#2sB+WJ>NUPv7Ntk)Ps?l}yW82H$lX*Z;$RVQQzRlY=Yfd3 z#gZdS>R6Fhbqey4ck{wTnJWqnra1o02Pj#qwP>Ri%13n&OoiQ9;SKJe-~sz23CW#)@sL`QBLmv1(57?L$xU zX31;VYcOX_-5ap?N|j@SM6=tLSBnO1S+&V%e%GsJm7mqYSGtQywN7JIr_)nS-&VGj zznx6m)1}+NB2Tj@mh((i(Z6ynK_`^d$?rJcw(Q|{WxL46_`8Y=u4x99#EK>QzvfUX ztUgz0?WGu<^d6<`Wq;OR$ye^s>`Bj}yaQMn`j-Yc57ikVC9>zu58CA**^4HsP7xOT zM-rcMtF}93M@udrZf6Mtvqr5MF0r_R+FXQj+ zx8N3iFeN?xe(%Dh?z&8;sdY8l9*4iZT|X<^=IOwMeS4J^+F!3YsdcEhaLR$BmP)~M z-0oI4G2cA2wn&>Tc{qd1F;ksUs+6hKG{DLJgxn^M=4!=3<`WixR?7C8#`})j&foO; ztlaD<(SbgBBeb?lEgOy*pgYYpcX z$c($Z?-09?ZAi{HBDYVPC(~7b?b@Pwj?!l0hU?0v9Q(TO$=pJ6^(5YrM*~k8bj2-A zl5D+s=i1;Pt&-QTJ*^cV?^Hcp>^XI`>-VXXHB_gK^O&)?uFiEvduz_dh?O%&E9+srW1{j_%eSX|#)sI3pn`k$9tMvI~h;-x;eM zGpusyOOpjU?Spp=yR@VvxmbK((CU}!-PeYXqh#Il9CA6FmZkXfS zvmnpG%_yl`VUGWfX^jWB?{H`CJ!sz8IEf)Ed&qXR9C=Jw$WUYB7u;<-{3%K`uUdmf z4KG?1Q@MnlBvC~kHpYdXslH&SiHJiA*+eAT1j^~Q778xKuB8e(;vzQV@xf63Xly98uWUIySzHLYxHyf zH+OG;EKF*0JkGkiK48qx`q^I>`wt3A?6e#?`SNPfu`{3h@6yWGO`Fm2+J+_mXxBhf z7kw4~7r{>DU*86KK4@rOJuXn(A=;*5?wZ`iyQ&xYDOfFO@SJ_~{QfKr{>IZqi5(|S zbR2m;^ODCh_2OBf1vh1D9fU#E{O^&V_jqu8|Z zjh+6u*+E<149vJU+r93fnO;?TRgPqQ@Tuqw#dg}@)$uK=svV~1GvqX;FP?I;E9&L* z6IRDVziwAulu92vdEXj~=*t5pnT8xrl)dL*f1>fr{{2l~6LROGfFZ%NV!3 zdSZE@Zm29PfnD0I&^i6Yj)~UdGfFQ!ygAtZ*b?6Ichx)9CTX{h4s^G>ezj@A6u(hs z;l|VC!@v;$@?j^`_M47)t;V()Q7TebsP=IAh?}DmNJFk&HXh*+J|$j6+I+<9@ZIyn zjFXhh^UB3aE9`x4K1q#}WE7z-ZUiC?veCT-S(#F7imon|f!F$r2Dcv_{r^0t$qU{ZxB>t{- zYO8m(U$WxzmE$B7Y7SV}IN9f}QE-wOAeKAQIehQbTNN1=2PWTMA~JSgQKq$qO8M>g zvGd=3a#B!HIzQRzk$dggSNx6>ljf0kCv34T9r5+ulz) zuO>NsctuyMlR|})?NXJ4i=%E{-79y%cMY%V+`e%aHXqxnO!_G8bY?b5#kTS8g{PX~ zNuCoZ4kfQggnwZ!9a!v{;AOhMUi&He^_FF<77r#LS*8-0E04z8cru^T0sg%7uG+kEt#T(jG)xlwAy z_gai{Sxa`(>ihiciL+S9q`04BX=Dv!q-~T-O zm=Ys3zD#eM?%4XYN~@^C!k6a)qMXd?&EwW>_!6CWkQeo!>!owzEs`PwRRnKc!P|i4nPvtdnx?T|aXnDQ8RWScR}_YFihC-BlYeR&;MvlDo9qiV+9Cue(({s^Noq z?(;1b7R$dMNr*nTI<7*jVvWzKiaSPKyIzcwD-%1J|0!0x=+is7P|tu;hs)vBoztwc zEW59Y#T;s{E!Ip`dAjUtgMqnb;>GqC3K36v?cdaV8Sh5PmoMj~b}Zb!_Wj`Z<>#+I z*3o;KJnz~uizm~?iX9%T3<$gsGVk40ho-aYi<|cE4Y~hmP0jb4ue9e*(VJ2`FljBElUb)%ZA8pF4POnxm;$O?KtF1 zg@pd7pDUvIy2kq$*1K~Y^IYsVno{IUmatbWE>aCM^<(9lF?Ptgt!gQ?Z`tv|$zxPi z&C!;`mpdoUTObzddU~a0+C7Wi$#U^rU!{bkoMN?#p-%L+L7Qb%Cf}~!K-(MFeSSo{ zsOp~7cXKsGeh$;Gc`iFh|D}<5;pWMM4?f^l{@h)ZokI8C-mNukX9&YNrE6)o&O#-N zArWV`#6Mmz{;5dhz3Ce-Nl!WYcIay{wFxbnyN{YDzBG8UHP7ZP-SPDd-wv7T!yiuW z^IKu&KlHqY{+Xs(yNky8RzIJysH1>qGiikxGyiB_(+*OtPR7`rlRI7yy}eWPQs9}n zpWf8p5?A>e6B}qeZj|x3amgz2H?>Yxq*rcO#XEH(s_i`KFzs~YfyU2jcC|+;8&_|w zICZvi5!>UNztf>px^5kvCR_H6jPf4Te28Ur2$Zen6e(MuKHHjD)|@&x-+#02xu3UQ zo!{_9>Ext=vU+DWCA;OcDg_p}U$tI8uOn{n;MsGqEPTXC>RY5fev zPi~)5$>q(h#ZD><+KVMsR&*X|FK%4VZjSK(*>Yz+`*pjSFCsk9Z_ZTH(e zGw!?UjmT3PGge<4H$jE&e4T7s_Bp0iRb_Nti@mNz{@$v@w9#Z)(80L4K7E*qi>S8i zkB;QT1H+?eotf@at5RYdgj!&L@xYD|8#p~NTmNnDG z-wof96`0|%&gkN++UTN=j+Hw;tyc0pl9KXe=jOM!-b^0qcFfV$+(1{VQ+w_<*F{OU zZkj5riapK@-ytI@;h!|KOLwi(jmv4?djgMb-`X-7D`GY6`}<#)vG{vH_Un6=MG zOf=p%W00Hgd^dU7n{^331#--YTN5ISP8+Xy5fz)1<5lx^K;)1Yg#$(pm6F)7VnF<0 zWAP0q22_mPz!`92K;+ODhXzCr8xXx~SwqOZXs-Um4WkCKjiPN2?Uc;Vyc6$s-$CNo z`%~uor1i(hnn+4-SUP9ApR&~Lxbws&5S*umE4e9wQa!1ubpjX3uZRNem&uxep%0Qll$^VbPKUtrL#4sW$-Pu z?u>0{3;z)C>ViSx$~-&Dika(Iw>-bHup>zQm{X_!<Q#&|Ae8_`iGp$#I zl;8b&*x+!}1wSk22kj$#N-O7$@tMFLguPn{~e8 z`D?FnLPQTfcvdvJ_M(6H?XHj?9x*S;*XLi?xIUp3TgRv|$Gel)Y>pYD0hP zR_S+M1%bmHyvBYUn<&m>d0z;d&CC~@G+yD(YG%=jp$o?^jC>^R7$LH-#cxVl^%=h@ zDGRquSSXoSynFgYzpW2d7dL9|;TjnmZ`~v}KPGL=qqf;GCNjm1+((6Z3!A4r4f%0dIzYu;KeQulM`-6~l5ODn_x>t@ zv5vRp_TM?yJYs)ktxHWtwZ+n%vJ;sN`JWF+GF4R4HmJMihD%s`vFiUw@jGX6)x%E8W;_ zt@n6TC?OU^Gf&iE0>4Zyp2%$@uKV9i$(WZW=orXoap~u`)Wv+k~4@vBW7Mb9dy7?HgSlVYw}itBG%E0Xx( zjeGY=(@k%khtMpZUR>Mdb$p#x&M9vB^x%6BnxBpgVw$X^`D)yKd_Of|!d>=&V-t3g zCtQ!nXiBzcEoF=Do*7;jE;9DD=jzu>N(zULz3tO7c6b_xeZ6q;*gcZ>y;`J(t4nTC zzBo|COUiqL4hO$I(sAy5eSAl$5vVAw*L|>; z=ct})bEcXRmOktT^`q@piRWL_*K2S0n!o9blLsw)={W<<8-8KW!<+AIon5F$*YsXk zRG~knYSK%)9XhnQT`!{+E-~5hbx^yM>s2qkoPyZs=kF$D52=%0@MC;hw71V>k4?{M zrJue^S?+}wPNMYH`W(lappLO+;;i+UD>qu(09&v z|JSzk(bI0r(-J^;e?M+^W2LxfapBLHPUkS)lZtN+?J0gOdtiXQheg@w%H3mADqeOS z)0WK`-{_H25xuT8$HZdN;6M}EwKohJEK@S)IYbnVvv7?gC{epz@X-+INf z2Z!Ih+a;6V5mfGDaYrL#GSg0cOr_)ToV;@dmrkt>w!SVJ|FY9&`oWhAhvg@CW(<2= zUvMhmim^<^wf&aQC7WmNmWzEQD*9@NV(x8?k5k7VRXeRRb;nnYAH4A$N~yG2ZKeMF zF>~rWN4#$mU0HUpEZmqb(QF`6S-bzPvgY}uT;YM{bSFe8%% zl-rR4l^M+?g-1`lY0vtYHK)Bs;=``I1coa&bi>PA6wIp#{1pZ z=d{27aWStUQNy}Y`^x>LM*g!;Tv=}NOsYDYzAZI3s%XoQvUyu8MvAB%-%Yut`D#au zv~i@(wuU9&mn`=WwCx`Ie9P+D$7kC(4zJa{#GB3XJ*_&(c`Oj zO>9n+yf)v)$zw3P^_9~3)4ud&AN?vR*-4(q7cY4-XvIw9*K^A=4|rEb80(7VM^AEn zYPfQzN#OPQxsKcdkyn0a7uKyUoiO=v`q6!>l&&j=FWr`E7VSSgWb9q9V6V{|Tj#9} z?07gR)-*=XriMQ*Pe#^bVNw34bK0NI%!t{pT;o@=*U$9Ido!n}>OVwp1g&dMwW!qo zQuFSBf$ut9xzo@1^W)@<9}kK9@n!+ldqMKWXs3y333@5>zjS`ksWd2!3w(F1WSHdK?020Wa>m`XN|*J@Un-+{Rhhfn z8qi;OZl(u!PT=)t^jXiyDTl|d;holSID77N_U^#pu?8j*xx2h47az{_dX(3(+i!Q1 zdi%Ub@q72_D(by@l6H5li?yEIr8eX4H^;>GOD(0GYm@e`%1!`_t`E-2FE-6;c@GY~ z&|Nn-eaM;4+?vNc=9ktRY0`y`+4a)hWjfwH!x_)uV+mq zrQK1>yRMiyPgZ5HS==lB*o8SEgLmH5`Ro#85VSi@-g=&IlKB&9!vRWm!)2vBw(kCN zS8L^JQOkj|E^E4tdJ)X1N%7}oN~v!>H>ghj)Md%Ka&o}MPnJ8r4!bn2?qreG_4Fm9 zXI>7`D;WJQMdy>);*GTv&x$2g{aBO9dJ!DeI(F8j8PC7yg(%c~GMIHFdT~HyGYfZ!|<)5=Y?-gI?Q9SCS_>`~5$E39<+RrX6^n4nUFmjPt zU?k@!d&&%dm5;#*A#Ks#UuUni{ur^d!e`fX36-LR1Con;=iHgHZXk2XY|D*Q>(K3o z_$mcugC4v%JNg^H{zGx_;95`_S2XSGqOBjVKN%kNa$?>GtKGp@K6mZ;!MogjwbT0L z?WBd{p5Gk%LFLlnz@P_9^Y?GOJILRbw=LiQmfE>u9TuM$wa%Y59_w>6QKIWZ>Fc!`CjhO!lxEZ1lpm z?kC9H^_b$dT`R*bg4MkbHMqc%CF&!T#yFT)Ef2X@4bVRdC!0sX2 zYf|J6t~8B4+H%os^r)j|Q;G)J@~iX))otA9II`f#u_5J~zs;GudG3g(Oeyu7W(#E{ zHVlkhHaKR4-kc#9#(rB6{dl}oT?_A37 zwQ3EiL_*3(IaD^|KgE|cGP##xw*S^X{kM8l4OWl3+H<|__^vz;Q?9qG6R4F!>qnVb z(G*%gs=%Prq!egmniPe~VoPz@)c;jO%H~jht04uW{I`ab!v_D@dkra4X!Tp|6^)EP zb&kfO{ZkF;o?9N9$)h(kD{Jn2mb7We)RiNpeN%KK+mlZ%8Zb9ied@rWK`%atKY1qe zVL->rhquK`>W<6FJt5U)OnWj_tny0@dw=P{wW`)H9zR(kXV>9(A^Xkqv9~6NUCvw8 zICM*ypF`Zxx`WRTil5tlt1?nNU__C)^VKiya?F`&kF(!Bp@$R>@SCt~cVp3##vjUz zdp@)!I_6KxzI|A4dG2xpsV?NulKCr_TDWQt{(S%Ji>blkQag@XJ8};UUw!LJ0sHly zr4QCKZ>Q-Uo~pU+_9A(wZIY9k?Hj^4sn*k4p8mfrsy z{UagTNHWc5RMs=;!x!StHw4sKYE`_M{m8c7a!;q}_A{Z|6TwgA<)=f}X*h+3ckKZM zn0oC-pA^AgF6y>FXt>&?r0EnIvcxIWV9_I$q%#j~>uo0gSbHhoKGgiK!!z5VhsQKF zIZJ8;``q3&Xw1x811_)U)%h<@^D2_-xIFNo#re&>XeJHRIbxdmYXS5BQBV0lHL=%< zO4@%bDp@R+6obK(Vo|B+PbR2xrZPa4Gx(j!#IB?N28;r^&Hz7=dys2vQ11Mne?!Ir z|3+hTq^RKU$R8SwhW?=g-ABI%8RM7xz;zMyGvGdag&}5!Ccjn~Vk#}5<-aso*P=*a zk~1M`A$8SAQL4b*zZ}wo6rzIrkE_{ zPElktDRc^pMy0Z83>%WFhX;@EV%(Xskb3LTC|hvU)Vcyu@(&^h#T3^*PGj>mxGG2nO% zh!5y8c0U}C0moy&@tE*=nQ%NN9FGadW5V&6a6DiG=y*&x9utnogyXRwJ{BC01;=B- z@mO#?7JOb791qw5Ixg@A*iSef8;%DQ1ij9N@`RA?VmXdl25F+9*dsF;07QK5ZMp?y%HeNdr&P%--up+fth zLi?aX`=CPmphEkgLi?aX`v6CYVc!ewgNoUQ6cySB71{?lT>{<*<%ija2o>4~71{?C z+6NWd2Nl`}71{@t0pAC-4=S_|DrO&2RA?VmXdhH)A5>@`RLnj^sL(#B&_1ZpKB&+> zsL(#B&_1ZpKB&+>sL(zDGh)vL?E~=>s9r$(pt9ieV)h|Ih4w*(_5lbKyC2#I2`v4@4*$41L+TP&!L*RE!!M+7M4ZV|8kDsdp*F;;5 zq$|Y-dm0umCV@ReeBcCpq)@f}WeX3Ywn%8%__R547$M4*B}{etuhwF@d2)Ger5P_rQMLcM}& z1+@w)71Sw=az!BHLc)c73+WcJEhJmWwG_y;6v(v{$h8#6wG_y;6pU-7D3EI@7}ttW zAlFhL*HR$YQXtn-AlFhL*HR$YQXtn-dg73tK%^%Ufm{nV-J$A6*k(`@{l#VwlmB}* z1DTsJdX$KNL61uJ@4@eJT#zTBTfkTnIxXn4pv!_Di}3SeTJ!4zBb56WAGpUuqDlw- zH}R)IPsESl6 zF#l0xgTHeWK}zJGK|3Mv6nyx09*%b2jwtM&Uq}u-Z!Sqk(?nAcC1M+Wmn?(I2BKv$ z!L&_^0muTyD-?{nf&dY#?K?mk2fS%1CW8V1(trj~z~9+I5~CKE@8BW;6Qz3sFac9R zkTi-SONby%!Cr2zAV|dc`VNu`B*y^R3JQ=Yh*5zx(P->Hv!j1hNkd&@L6Ata*msa1 zh{6y8o#Y4+pt?HG-Q7+QqaeHgnQa4%bOyph;A~_mIsp2QTm-0S4bR0x(ZRvaLDAbE zn75ssg9~6MN3If^OeT|@_?{#?9}<>bAvxIkalL&IO0)BEQ*iM0Mv^d!d^>MN=ODpH z5Ddcq_z@TgiAvGg6urQ zUWpISiSG}lJ_?R*ihNf^2cA30-N%zoBf}rIp1$^=1%j=QKgr#}x98ssOpU=UAph;- z0{RpnZ3=w&Bv%hdZh)lCqKx6^D4f_u$2nmP&r)KF_d>5V7v&U zLK&T9ri+aDfDPr1%;Yf!g|`X58e;wyHAEH*F+>WO3xF2|oYp@o4>Uyh41!3AxlIfS z^6kL%m>`-0?Qs4X31WIqV4`8??8-;Oc|ES3hk^l^h^U&HDQFp)nCXxdNOs;1E4n(PBp4x$0C^4Y3@mofl

|33zSI!5{$rhF6Rr-;rV_gvk_HoDm*Q3srq{oH&WOD9nZ+NHQ5Do`eU} z%t*k_(e;zQ3ld9?VHhc3iXcqo1PK!jL6n4j5C)M&7OGO38<@GebA1Fs67xPt1`njh z5Q_mBJT?mS59VBGNb-L;OEk~eJ5FNmht4E}nF@xJ4uUw4h@uD!r@4WKtDk`p?zIzh zLYO~?NI{r{*txKfnj%O|Gz|paJ-Wu&cQc{^=7i=Aas+5XPiRQBdY37>4BB_3kU3E; z1QiOvI-PO`IrDL0J-C{6b$jnwSwDM0Fii6G8Wb79aIpl1RJ>l@SzE z134ngi9(rGA|QKlKxlPT-*H0LMBXx3<3hN}PwsHlh=@?8<9w9_=0+79l zlb91isS`y>qa!&F;o&s0&@>UW9%4QSawdwhXMI~(%4uRGm@Pyr^ZKrrC|zO@!Q>oS z;T9Ui-s&09!a)KkF}_4`QfNpHNq9Ix0=74#Xl-NPks^U63KP}~2uqp(WpAYyXz3*Z zlz=sRN-r1;WGzf6r5FEAY4?^uLhD2Oj+G94Ec&)l-b5$~FuqV29>`R~#7Ho~iPo?7 z9VU!8(P|bt1$F7d1Zuim6$g}9LJp-)6ef&1g$c74_Czay`z}wEm{6Et{{u=)!g}rM zy_!2QKLj&}D9#>Y5*p544W5`Uf@wMARfEYT6)|}FA1>1W<1(A7p)mBXAI z3X%?zoWRzF2GU5-siVc`ea8s1aTrE0u>_t-Xc$-EK%%Ab1VCbmI20sI#0d?gt|17J z1cMK>cE9g9VHys_iLC(&Pne+cOE7nYZY}6LN|=O0QBpW)!b51%bjMdyqB|c5pu|EX z3?+jsR14QP)zQ_$y>nvj2MLf+kZdZFEEbw1O?t&hY!-x-A*0yPMGTNf0O@R@1s%O5 z4biPFeShl+WkM-}5;t^7LzqZG3Q1rtgzmlRJ5ETO$lFHqaey|3hSNZGg&;^`YeLBS z1(*S$AZcJJUWgEN4Fw?*&%;5N1J?PGVtL_#L}ur`g&gS4s=mK+NSmlM!PZk`VL)iF z9LdcH2o&A;MF1s6nOMw>!Ispf6xu$Ig34J`3|9EudJ^AMgmwRH9M1;t6MG!8N+ zB0@CIMC|-eE7JaH`Bz6%(9Y3)eSLrDFc*h{q;n{U%?k~rhNil%fhta##QYG<#-Tv5 z-6p~VDp-{K>+yGJzlA?5+=rZrL8PJUzrvFxkB>u1Z2ALJaVSb8&_uXMSZb*!XgS23 z4?5q)0All9p#fCGX(KV;1LwLZM!0ApG>oRks_KGk=Gb1`zMD4^VWJ?h2vfKi1@r9K zMqvUVK?V+S-bj@ul7Ry`E@71Ip{u>-hWbXhv=+9Lx$i(>goy%07A^pz3k|5grm6-0 ztrPP+Fv7%ef($GWuF!CrXsVl=nBtKVn*sGuCi3bLMFk7}LPKh5WNy-nArW&waC(l4 z6s<259!xWQi43-tzV8YO<4g=C7H0|#rS0ght-~5ap~2+yaPteS5kcRj ziIOLR5i2qj8bo7N!6YHpB7qP>ItR&Pf~hD2*^efawE%UV8_&bg$WYY)XXdyj1Ai77 zVKD~_#6-yURwkIHvq0kYU!(QmA{#SEs`{pa#jjY8iM|UIi98@oDief8!h~sTqG_RP zWRCNiXd4UyP|?{M1{T}JE=;gShWeHQ!5r47qwhe089|hwjvVX&72=!M(A3g3)HTxu zn?`V8i8&<9#k0T`Y@{{;-OvPj1N>`E#cFm{O_t&o)Uj?SeU~cc;~`Mg$Fqb1)Q9g4 zS}u^(jSP%c@tq6^Hi^KzJcbqX@3z4m}Dtn7cy|ILI-PZh_V8%JPm6X z)OYbB^o2?n-R>rQy#EU=u|^VDXaz_GI4{gAfEJDa+?3<@4ViAPe3Gv-$;Zvk7ZmF_ z{^u`>o{mnlJwYdyMWC;oph}>f?g)t&LyP9|`Uxxp2bS2x3R^lxL85iZ4AAuE4?4&6 zS-MmX4)DKmXBc2QFf~d)0j5)MfQiksFt-K)11;wC6JQz@2bfsZ1LE7*03^~(2&up8 zFA0PrN97VS;Kw; zjC09o%e}t41uqV# z4#fN$jDiu6$a)Q!XMoNc!sg#z;1cWz0r?k&i=}k_8en1`4)QMs81$wB-nl;{OyST4 z72;pDi9k&ZuHyVPz{KWpkbhAL!x;E)Ntl?2gA9xTM!T={lZ2T#l_2KfAOoX-Ap`f1 zgzn0JHxi^#Jl3jwONgwDVe4laH`+pqUMphOrLN)=721DEl) z02A|YkbzMN)6qT?e+%%xYBz!EZBG`WeAuu*Ccu_E)JLH@OjDL|zW})XGdVx!9{swapC|sC>_*;O9`L`YhM&yh1#|FC5KY;Q4K+MCz z955#V00C(U*M8)lOps0z`n~D@-GG#TZQ{u zfQflH$iFCH$iIIJFfk8@M8GIowBR2pP!u|$Q7E{8hhX;&OuBS%21-w*A3|~e2>746 z3uA?!>P8y4+JAx#I56U+1D6IONwfqFIoIeParU`hgM~{?670l*5HBeH#sGu1CJd0X z?hn9B9Ptut%7GCt1{mpM^cMjWb8Q&$Vt|ouaQy|ChL2^D5p!&i zgAp2oyITGlU}94@$iWz3$ie*~VHVCC6YTH-IT!`p!@++EFtPL`Ow7wc4n`&1!@>O`VZ06#^Ku9Wqi7)q|0S@*JRHKo$QC^S z678-6VhFH7NBChS9ml~0yMrJc%z=QhuE&23FflLJ!@-Dzk-qW$C1LzlBJ>>kzB5D* z2P1$X2ltCg^a7ZemqR!hiG2~kSXbo!Q3;wLLx47-gw8uawi-gXAPNR_(LeIV!zJe9 zdKegyFV<(Ee*m)u3n{5&Vo6Grff2N5lli{}mY9EoQ81zcCRBdZN&I%fQk7y$iNt2l!5yPFbl80|7H;m)mzBGe+@7(9|xmgRKi#pME?M0 z3l{QF$;4)IC<9|~LB9`5Kbag$a0w3VEGOnL&?Xg_LSTKe`bWNazyv#$APkI(7fk{8 z4_LO~niiEp%)enpXedZn2+Tm5{s_Aag2EKs_e3Swvjk&c3^29`_tyXu^Kl3R(=a20 zWf1)Xn2uKoVm=Ouf!Po+5(6VnxgS&l92zd@lqtk~9LB(yO7t*rzW~PhID*Yguv{<% zjP}^-9|=?NfQk7yEDFW|V|j>v0*v!<1RI(F4#v=;Wf1)XmW-z~Vjd2Qf>Dq#7t8=B zUI?9osT3SwDzP~nB3*E~t!Sd!G2@*L)rWc^ZTp5-y!+;_S z$5bid0rlz)CNT$wP0}DtP^ZHZBFtWny%4 z1aT5?K7t7oJ&sm*7!6!Ka3|(cX~dil!kKhTe&`_>H1Kzjru(Of)*o@Ekq5VzvjC|y zV*Uq`Cc^0GAsE0-3KMDXLM7&ips}M+dyHLJLS4!A=4pEQ+PUGBl$b9<(k`fKN?|8( z2~Vg9(q7Kzq0)$XBWU%gP_c#`!h_noK#92{5QSp$M9&5k9!B$CWl78%!AJ?QA9(Z) z6QC82)qD85EBNs3y!ki>k02okT5EtT>d!d=iY6P>Iq(H(0=lNB2<_PTn|SouxT~Bfb$$SW9qG4uf zELhV|CD^?KS~&_6J8F+9G?=Ddf;!0{HWh*O6OMJDjBx^FDC$ zgXV~_L+pfyQ(xCi(*$>j9hE`M0l^6nh7>G73J<5ck+~txn-lD{0mBXyB@G0cAon4( z_pWK7s&9@z@rVjewkKjlJ+y=jdGQ(6AaCnVK0J8RFtQ7BRns#Goinj7Eh9)0FG(DriV7 zV)G+}M&a8=XcPn^EU@bOuZa|;DDoMa(Th>O^rOJw$|ulFw5!(!eDWS;V{% zj6X4$zjG#+fKI(3=U-N>K18lq8~>rZ(<;RVu;06&Pb;D6t)p!ovwB!@7cJeN)-QJP<~h z5GP8Q!jh({wrVfZB<6oG#>7zeFs86@F4xi3$AuhhV(tfFOa^AzXx}?POv2f5^!ST#A-f-2UA1vxLPVm0TQuuEYie4_AsWf-gz(Qrc>F(yboYZ3?sU& zQFwAh>ZW>yNo*Q~P1sR*aPfsj5mt$@ff4R>cPhbF6BGt88LX@iWI%wE6k7SNL2n1t zQh^x|(M{x~gINg`WEGJ8te}eGj~tMdes_xCTUW@DKPrlLr2P>);kL4P2*cf}dnC z7W$O{wuT*_J6}VIN(PY}lLF2Q2VY5(CsXH<$@37t>%kk~&21g_D0`7DzrC{qT7h1ik6XE{t97SNUjcOR98tkwVi zSpY>)Ul<_oBq&qB$H+|L_s`PENDY#}HSoo_YcwRh7r2i>$H{=kLiREW+{ebto=(QU zH#!yB^!EE_>Aid}y_fF=YK6lG3g&gKHHLI59wg>1n29W#T? z#>s_AMoJidzmM6=_X2gnjmHGrig2IB+Z%()MrIDbe+P?$ASqwV< zK0qe8&-U`Y>|UOiO{L)E!lvPMlFh*D2D_KoJL zD1!FEq~Z0MNyGC7lg7Yt9oSrkY{maw&NMdCviJ9EfUg8?p9%O1hXwEz{u%>k`%J)B zxOW7cGVVJVcspVOz7o_)Cg3ZaP69FGo(=F7{yq>42tF?pAFD8#=zfpi<-!DY$GFcj zaDJM}Wa0IN$)V!p3}_sGjfx+SMaSD4i%G@l3kwjDAU+lc$CJQYA|(jFKO37y!@VOm z1Lqq-#vjiIAgmMQPH-14jsPOSaWTk-ad0x=FmQ1blfyy|5c?f7heH*7A1pEj7oW1o zR3t_>b2ZxV_k9S#McOVWQ4X~%+ zcK|nt9}m1>!TabySh#C6oZbWT!0A1U&cxXf&>);$vOoZh!^fbKargk|;P3$#io?fX z;bLGGgM*7BSWGgG?}14pr5C@yU$DOohmQ$77w$e5&W>12e4Nb!X$hPjuxNNYV$pGP zCKii{R9yUykHto|AN+oeO~(0i7MsGs=>~|0aJmcPAwh0pv02E*Re|qdb8z>8i7oCv z4i*2-IduFx=YS|g@H@a14EMYo4(^?U$Hl#KHkg+Q%7sk^PEX)F*kCFzC>J)Fjq}}X z3Vx2w1`WXlpO+1$tGMq44b*YpOTowTY;fWd?ml1&IDAwpE{0=+?Hz*egG~jFRq%O% zd&A+Qa&TP7rcsdnmcPAo;G&SuM*`P?QRA)w?~S|0{(ps>Piw<448`yL6uI=={E-t2 z${=Y|*lDmGcN%45V{C!0yX@2Nmt02m3cIz&wk+F{o}P#$|IJnkF5xzNw83lur#K&Z znf6n>kUE(sZPRQ4b=c;8U*%KH+?wii)h6htT4ECjHg1weB-vLGFgvMCvHFcJV_F9um2{ zk)UljjyT`U&`Mh;HVrJ+u~rEdbyFPXc111)(`e_=lfuKfx%dO;g_`Jd9MVnn#U+Z2 zbVc8EMQ*wxw=E^cI~Ymiwk9~+XNElNGpdQthPRcR9T+S4g*J)F4P*S`oe}JyPy*i(sc#7w=+HN-wZ$Hm-Jz#S` zO=o_fZ9zrk_VZ=pAM-5#_Qhkd9fxM9^9bcra)(M-c&qxh1}*iuAIkmB>i;eUm6ZK- z+`T>@-@m>;icNp0MsPf-ZrkngVfDD{2W#4c<#A{mo2xC$m(WY;!aK11YP}xs4y#|$ Cchu_u literal 103990 zcma&NQ*b8E7ycPeY$p>;oV>}zwr$(CZQHhO+qTV#ZN0&MfB)Lro861O>pEReSM}+0 zs=7Z~VJ;-T)L)}cIDMk0D5J3~uYZf-hh6I(N9b0VhyB8qgP7S_%t zj&!2d2F@nJCPsF~CcM0`PR@=d1~#zn+1EN!Rac#kxwm=^qX9jJ6260l1#5u#4H-mZ z`w2=q=#GHwi7#M-R2;PynMRG6o81iuRA!5f)L*|!Y9DHek{gxo&*!n99_P!SA;#{> zv<|Gg$En+&`+s`hH^+W6IXB0zKOgtsTX6>3b~8EJguv@Pz3*?W?(pZjpU+1vioZ#o zmq*8C-j~bAW$u?BQR#b~2M=|9U;pCj_Iy7lRG&GW4RK^b9=m(_1>VS&BwSmx;n%Gdws>?U#_9Kly z;Y!Z$lZXbW82~G7ebPLp3T=b{KgXxm^cgKLbw8_M+BqP%oh7YYT6j^{d-)e9#QkqL zt9tGn`RwZG_`Z*kd)+*cetWg;io2EVxEm69jOz_cviCK8!nLf|&1yq+eQRf*o_feR zrIOZqjVWna$ckxcJxlLyfV|&NS%}Yi*HX>i!=BD~KDW~&%O-u0CA`?V6r|KEVYGFG znc9!O$e;7WeA_-12N3T`DUN%-RZE=BdCZX=g5Z41BlCpcmUq4D9{xAL)rZfon!o0n zFsTI($4-1idCILF$149WFV7 znsfa5ZLlB70)bgC&&sb<`GvQd*t4LCi)CNo^uBkkzQ*ca@gW%W5Y8~To8}>A%}Gjg zvLuGMJnK~a_@_FTqGq`|&%B?~%j z|MWyqvrwNuFBh$A2J*$v%(#GZ0YNrJfgMQ@tq&LaIf*|sS@YWFk?ww)5+rJ?Q2}fr zV(pE-=-rTKu@6fw8JS{rM!$YBYf1p-O((R5NcgwR(W)#Q@k;yKCDCNTaW8kw$zu5N zLjOuEN#d-vX&G?I#9Ht6u_Yyh1*Ri=bxDwjCG0(E^Xy||=A z0PL4aE?A+mEL4XzBzD2=SQ~c#E-kYlkqE}@)>ghjdPs|~H2jwKYY@>=^!eKj8yQ{S zmz%$Ci9rL$$5w%QVW*NwX|bSv)PNL&`$E{(KABjHN1peJg^VnMl%cev1MjqSd3rw6 zvvoi}LPb-8L}deDs3qI{{g!;8|C;vUlKl|_#)+)3+|>$>QMt3>wMO zGGeu1dQRfb12vKO+fd2hc%n4ihP2Ah6k!W`Vf=uF{{L*OM0w0>`E;Q^1|3FLxFHVY zFi?18u07Ec7ZTgEVR^Av(09aBgOFaR98B9%Tok|+KaxH;1g1gLpw8^o_B$DAxxF#w z#P`Xv#<_>uR6XhN)LGklbb1w>v8%;J-~m#FHOA;&a8JMv-r`|T2F%a&gTvaoIk6Pb zLX5rRSAq$(DNJ)+KfPS8<4(oRHGjveREG{{y@h<9yRLTOW zlfgJ;_lG~ImgZ{2+$APix+YhVS9L-fViHT>U>8FD>F2s!*qsl)rrL(RN*)ew0(0xN zAEF9z4#ZL*m8Fz8c?|!h<8VuoccHv!jv?4#xbZLdF#B4trNvx@Yv~ zxRua8Lk*5yU9vRtK|J!!| zKtwZC*gM0r;n1-CGnwD>3KC^}PRjfgmufpXOuPec>;{ng7L5;X2z>l z98SQM!eya%#Byp};2x~d6!T`=s*Bc~rdCTOktwAqNP~U5c&mu??UR?}Fnk&JWGm=s zU9_ZX?Ny3`ln+Vu`8a%&F?U~9p;F!p9g3?(b8aZ0D3mi&ZB`1WXd6TegO*!lZJrWX z5!D40bA+2=z`+3a2B#X$Gs|o z%|{x+;}>nvsDl?KS-9}mAa=iW3|m<|#_s`p%Wm#IuDBOumra05^DkW$B{(F8iEGe& zB(~!}&nwNic1xF)I6`g~Zln_`SP}!GR+e3YU9sOOObH<70DKsx1ZMZfLmmK{g+1{mwx@$qy#2v& zp3RJ`{1`fYx8V5>>q=*5MiLm3`ZcT?e+MY6{47u= zgjCd2jL>5V_0+Jmqf*YZA(y1CnY*`Y{upXeUTU~ZTdTpHsT*^!)2>^-4v^v%sE#+dQ;5pF!QLDvvb{BR zrv#HHVvJt@X$rBH8Z-pqwx{D3qO|j;G3)F0A4zLbso_o@;r~@o%^QwMyG}{JBo|;? z0d`JJp$TvND1z!X`cG7fZR!l2W$J=?YU=ljoyz4=rJey%z5UY2L9aU!6YEq4cf@Rc zAtWA7mOS1lN^_(rd)KzqXA)An+9Mz4(yK7**5YD~v^!I*!O1JWDqp0kTO9pXP#LmN zud&ba`2nTDgPc=t9Y@{kIyLb;ReS7Xs3W*p7SY{UnhkSRED@4NJEvM z8+B_(Nv*q|n|0Fw7U7zpdl>PMR^N5fVbnIEHE{oaqN88#6XvpOD5xr(`oH2uaw~=6Ed%a_QybM5k5~BX3Z4)9w+2m{#t(H zU=vUj6oOF|h#~Z7?deI2czk3-%;ZXHn!l(+=1&X?KU8#G?dGW`zdOTBov3GEoym!) z=+i10EprKxW-f5~tk8-9A*(H1ZT5SiYH{#I;Ge(jw35ybo~5D}O#c8r4W2#RiN&`1 z@n~hW*VHsqh6acl7-j(Fo{A|&%wuxqv^tzt3GCS)CY~6WWg*q8T0X~DFKZHM zwQgPPC>*PPR&zcsdGEH;7OUuTLH7Yz2xG7!a4o{fjyPa{(mdcgoK0V>dwEV4fd|m| zGs1|btp+C)NtfNQB#1YyA1qA48aGxM-fuz|-gRcbi&Ztq347|;L{`6i70pI&DOz&< z{9>~%zupkd8$VoGyOhtB-7r+GBpk=_V?`%e&#FHPWZ7N7Jr`gkbRx)uls=vPGMcwT zG6V5`k4QuOZ8E;SdcwWFB{bC2O8W9o=UMCyEj@tjsw&+!n+LkOB`rq@!5$3}o>yLW zMe?3cNp7A1rH;9pmA`J)*u4F6$$=>BDnC+@Wt2D^kcipq-`G4qFXV=ui_ zAElNlNoALY1b=a?#h{;>#Rng$!lK==J@E0FqS@WWUSW_S8WfeNG9PbJmul}*xG;JA zPrA0n#xhA8AdFsmv6Eja{#}U>0A-OG!e**SD&F)_>;nynBZNamIIxJI#Th^&-Lz;w zNrEUS!;nrOg!g1CB1$9ExGj*0f+SL9E`p~zT*T?hhg9-Pl?#fwy`NrdfI}cDTi8go zYOFbZ(R3S?^Pp(v8?Czd)SgdqZ|s?Mh+{tR6(hr=u@|E<(~wBFbRWlV3}ao@kZNNM zs5E&s(K6%2G}dZ6Q+MsG)rxNT@1`BaijPQ~Vor9A2_V*dZoN?<(sURn76!P)8L=)@ zb`v&ZE*!FjSbB1ziTaJUE7wd+-Aw>+NX(3NsHUT4fEG(kX)osU+|5 z1AulkAZ15fx2wtLE7jOrLKE)7;4Mm}UU#WwPn z9G+5WIh>%hzgI0cv@{D{ia0QvX#JSR1%j?HGn%M`%gfKv3+XO;CW6RisNzGY)No}* zl)_#7D~05rrHPu3&E;BVTcTH&V;y(`QgLRJ|2uq#mSslu+Gk--Q%vm~Fjw4l+@uvi zmV=5?J#KcC3x-*8E~Yj1x?xu-qoiJh6N4e>(x9+I*-|)d%QSth<$lUz4O;)8H$Y?T zp$x^2Wz?{Dg_-O$C(Kf-k z&>Q9U1(N2Uuru&CHj*VU27y+E5Gy_bs`cb)^7~9HjOW}m$>a8j=foSeHl#U=scY@7 zw@pXm#tkr()XoQFk{jvrG~+w%)}sw5QjaAsrN`O+Go@kPwRk{H4%$Bq#;k@&zRTEQ zUeB$Ky^VB&pdl`$Uz>SPd9I6Q?Xr&K-WvH}6y$eZxvCLD{$-H=eil|H^yR76x2+QB zAz_UQLcu3N`6O^t^zDPZEb4~Ql;shL@Id?G`(rS*?hH}un^R%HzTDSkdHkA)+@Iu} z!<9uEp zM@Cv~V|}UCiF5F!=T%WbveAXL7sQ#e@h(pyYnv1owlMjk%bou(^cR=vlUWc8OJ|TN zVWNP?$v==SfvB4ZQ@_UYdFD8E-n~ZRU;Z7};=4IUg7Sw!7K$vjNKQqWJBXh?h=V)x zV=hRZs=P|zo^)BV@x-a``$Bfhgj%R$nn6rC5$j{X+LGorRdc@weqqtY9yzS6Nkpy9 zmW=j73mCJ``7O;KP!@$&sy1Ib(!N^Zi@5%r;QIO>G$D&*bMC74HA$X<%G`&u!+gmp#7J=rt(NG-`X zE|$BIHFc-$b;abu37;E#`%CdqZv6~fgHs^lYTS%Tt$;^n-^}NV-+A0LSnXpQC6Rp# znmrGh{cT47`^G0q`=PgVADBHO96JXvgM8r=kXfnw4K5_(FOT~4TL?BkOg5=7Oz5vM zfZOwqG|R4G-SGJ6G)ef=vMk!m^z#8;P1YA3|Gvt+T`o?q^b3)I$};Kf7OBvOgJScm zO++#ieUPe{mM8KojQ7EL6z+$jT&i_e-ZL8E)|zY_f+Az-<<-?_k#KxWst1F7pt7zg{8r8A0do0!?YHdgSL zbiUZ88@X>>aL&fTpCwuWk8b|15}KTp05Uh`GTMBhw5Csl3v0#FJ-rDH7{8-emjqz* z(EMG0UX8 z=}J%g4yxO!aOMY1VLdvpYQg<^ZHoA7FR^(A9;2d9;{AKsrA=C3(Mmp72V)>l?ToIG zy?a=hQpe>j!I_7wg$d7H=_qI(X`gRWY3btgdY{)->j@(B zA65QiEhlavFINgjy}>XC;tnsB)URaWcd)5ABmjv*#7v>pCvOwGSmJSuFBYU7V@|R& z+_yaQ)06r6!N=UDn_6l9+~&VqDX`K6x6dr>ulec&iA9^HfI2XZ-lmop?3=Ra%Y0m8 z&a--SHNK;fx(2Re;1Rd}C(IKMy{i;+pK&iFJycFs9K<7UKYYOTb5ck@eC-kH&z%zA zDSZpnoRr%YH}}Mx68nCA6A_xYGt7~3K+9N_D7y`)r*nU#*o{nnV(Tq(Ko% z29K_XK8P;c3{nsKL;QA!=L6cW+ozFSgHE+b(itUrXEbTlGNyj@;TS(pCe%})j#9++ z$DAFeJwJeQDPE z*2l_w`SHC^*urS#IE|n$J8ybq$)4YQ$0nWgJzdhW%2uGZj+lwirys-d>Cc zjds>?9JDkWf0ipMI_FIs z@%Yx9EBdiAhj$paT7T`{MA}ZjJ&a4bx&&Qo0PTGCoD9{T$ftB{gmS1M-)d5duh$-? zk$ECK-AzDmJti4ol9vcsT}9PH9bA{LQ<85ot`e_ER+#LgECyeab!r(^p)!s8d_;6F z-H^0^YA`hg!tq)qyBbiFu2n*m%3q^-*uqeSn_Hc(UZRh2q(YnXC0dm`zGlUWE@CB3 zu0qQqSTCusOxv&+e6ehm@=&p{^?pQxa;PNVN|yH!;zgflIKP>Pm4;a< z3I12kPPng{%#uiLx=eANvw=}jVd!(-p!sGPff+_}05G1P7{kEC;fx<$DN?~6fOvY5 z<0Pl3!1T8TAMe%vYcZJ;vVr||*iw@LqM^ElciqcI*j!u?&|er@s$;}AlR{r9LP}b8 z7={Kt=P9Ztp~UMFsL7D^uvY9znSC#*CO758<}Gl0l>m<-*$3v=u5(R$|a1 zokn#!k8R$d^N7ec|CPd$IjpH7#;~|M2e8mg4ph6y){|;~%GSfK1JYOGH3P&;Q5C4u z9|5bC)ZrG4==B?_`6j{goH}s@$h(f$D?*X}ViE`UI7#(TXGosK<*Jktg#W zs{-W7^y(-sv77a2pVvmTHc_%3ttvD;XKx2OTM`P;!UcE^L zAz&w4vmYNrywYPV5S=4c7mqkAs;Kh*S3q(l`6<2pJ!HC`KAzZhUbJ#@t93*PlEM}G z4xTJUG$)GFt46mFJHh>Mt1IGN%NMjpn=6~REPo^g03)~(HZgY>C7M#)i?}QplK%-a zEG=R_ey^L=i~3|9z zP(~Fed-QdYubim#4q!F)A5$uu1-2;H+w9&Re3)P>fa$_K`pPT>LaY3jzF}?si@%UH z``vntET(h7mHu*6F?w!FdvOw;!N*{U5-L>!F=TK%P`6X)P^5SB>oK;2j^6(=KD2h} zqAYiG*><;RF^3&1-O@a4vl@q13)--~nJ9q;!7^m;9^phuxy2}W4EIX!R}6zfGQaCL zR{EBBFqr{ZJvH{il}R#Wk587uVB`nGdij$xb$&vsd=jjzhf4P^+baDIv}BN1Rtfai z;_1AZ4DU4mJJOh>`7V0<9D$7VgOWk4y0|IGp0JZFzG4hwn$TvCkRf@R(HOb^XZ@ZS z8Y#gdaDOB3gc7^&lx9HY>>3+|iX)-0-~dx(1;BC9%;H1f4Sa?N!hcC&L~WO7~a}bwkOxnMlC;z>0XI zXf}Far0MB?ds&qJT(9>|PUVkW+P}Zw()oSN9P@okIK2Tc8V{X8CjzZ28t@#$r% zv832^onHzq$@qDHUq5UidEn6H{k%Q0G3Xw*oj80Mysc8cUOp8y`Rz^DU4`NLHZLL7 zT%lQf6YOUl?tD`3>@6WJ#(x0`2&PuODe)fN_`Z;lK1+MQj~`#@Zu98)Y_E;@;2(J< zmvYZ+0IdQfr0@0b^nP*8R0dkeSc=Dbex4S(TT^t((S(`j_i|V@x-G!3y)?eU@;V!m zQACIrKT$&|mM`!HuV>C*3toWEMFCxdUxL!(u=g^Xawc!fylOhSzFKuDdQk5b)=5V@ z%Wy31dxgBl`-qNlnQ2=H4i7`nguZ!5SBTBQ%S-;o2cAf0!u=B9St53D_RSG0N6x3C zeuS=tcDg|PeSA=Bbg7RLa6udz@pBcL;Dz=b^>Nd5Ng90t7BiV9*#PO*f5xUx@f^<# ztCG}PtzZ6OajVU+dDavyTS$BP6id#i-cbBXjsH|O15C^QLElZ#7&qri##f}`@912( zVAoD~!^%ePXOq5>R~e0pz#iQFlP6iJDPonyZNg)rU7>n>0x|DI!$E;ph9IGTT*`yj z{7=qV8fIJh>7RN{&Q~KoK8HUchXs;II4hTl1cYW8F%+TJ%NM9|CBiQesFXSp+D(wE zr@3j{)xZR1=a3c0XvX#^jP951taHx-JLEUj`3HeizWNsDw6#7o{6>+=m<#K+mU4|m zxpVZEtf=6Co#j88&%OC7&9g40HRQLgdlPb^Y2d)eS6ZQzmYC){=K^ zRhkrrOT1YZ9qoCB+rZmRWA(Ry&Z0m@3Ja4F-5w%|3vBJ4_^vOJjvOQ-*>*BO!$Qp! zA|T1%4uut}kl*ny@`s-ZN!rg}#{cih9Oh1PouxSfm7vMUSU`$Dergg}$)u^wTwZuw z_98k%hj-Szpa+$Se`ZWc3Ll*F1{FGp@PqC*mt$ZkZ7mhSVG!{T5ud%t1i}(JuhUMk z%L8iu+I(AooA8mL9R(jppZlqS!TEZxmUjTBFc9zh~j?L#}w0N4g_K^!$f z;3f0~H@2zYS4Q-3g!-uB3QAO9>sM}ElVrB7WIF7w{h$+bcYGD!Ixj1J9WJ!x zSG{*GkBkadOx}qTeF&$)U}bJq^0X)1oXs!2=5W*w=3CGjGW3R$!4>S=LPGuE^0p*; z$B4;)+Kxbhe^F*o%IZK zs!UN#b{L%LQO>f~sKJl;idX*666&TdKD@L%?|u+&FM142StDw5PNOt7Vxl$irFem# zN#+touxBqilJqjp0hcVwz4}c?)*!0r;}`67|5vTx3MRN^yaE&!vy{N(;Ju%eov^4_ zjVXo8b<0H!!4!-WcHj8&7DdcgY0*RbTgsd`7X#+i&w5v}LBN+?imY`3Py)&hOn}WGi!~CV2(epA!-G?C~10DK`%^RTruhvFC&qa+Ae=@ zw-`n5%$TmYO}{bQ@X>6kk@2WuPFwdL2UlKqIGR3_M9E-kcvLV%&K*y~+@B+dCc;MZ zfTN5;+$EY@qQ3)##}r+Q&f#x?dJj}N+Vl}L#*wU%&WQ&L5hFvSRM=HtkLZlzvqE#= z_E5x>qR_pEyGi>Arad&J4z+**>siJM(gx%|`NIjlBQj%~Xy|bN1Se4o%9DhH&Ulo? z(3xfgljF(R>Sa1@liA{-eh+Kr+3#yXGBLvRFnmMKVvY!?0(XbF;RoVr<0`=E`D0`H z(2N-47lu?F2zIb}dgl5nB1HwuP)zXEc%~r4B75ke!BOQDaHNw^kfjRLFDdh~;ENHzH+L!3M>2)qt29c&_WCl{IGn@WK ziCUzoJ$;ikFgwhtq2D!&Q4awUM(doxEO?s2=Xb^mrlG!ttxev4XDK^>g+wH|QEsA4 zVzaf2e!F{xb~7^2Th*H9Mw~u^GQ|#-X1Y=7W^|HX3U@EDcYY*B*v-x-Pp6a66%tKp zzf?zsC5doq(wJrIf_F1c#tW{rbECXdR@sL2C~r}q5kdkq%@)6IlH*lv5>Xq;G3Mge z@7=g$F|sZGP!VNuFJ4d^-17gu|A(uk$;;wZ5NlVpY{74%G+bcDXq^?^nVPb>s%nwe zpd)X3w8LXDae|RC@h&UZ~5vm8-H30$)*{koj*x4tE zw4Yg!I0!G?sGZgIv~CC}%U_FNY|1APL93G0m-41geUUPD3%9T#|_ zF6S>fD!wrhEA|+V4V=4jQm+eV6tat%dt{Y>>RW2qA7Kb-NUW=Ap3mZVJgcP{xwkGD02kGEq{1+{rAH{xv~B~N^-Jlh=u zSf*%4jzV&r(BReONWN|<;g{lsw%v`jz(tnCvSe;b2i>crcay&{Orp+J{l`H+tpi+u z-_(>(q^Y;UC-b!>{hd1jf*6}CNt`*uHa?e(v!$Z5#i22ZcLyqcr7wh$Hw0y|N+gIB z6%QZ&xFe|(bkCX#=cRP2zX0Z|G%E~^pR_-KNQwVQfL+l_eq_|{0$Y(`yWn&U0>+o; zj8rE=Fc7US52IkQc#FOwj?;!*ED1f=DQOwuVNm*qzxt|7lm7ZPeS$O!PK;_?Gg0^k z?|N#u!8)HZ1~bE0Z}c}mCKn?VrAy(D`p@7poC94STU0QldW4s(k}(-4+1L|lwi%^d zy2Uyd6!}c!iRq#yP^29G{7?rYwgmx08&=|Q;5kEn)$iLl+nc-Or)lQkE2XVYgy(uG zNehNH$em4S>W$Ya7Aq~+0WJa{2Va%<<mlzyq zzWZaUk45aYcDM^J;w3~;u{5F=l`D5>R?>958pkk|$h2ED5yhBj(}ElJ7xkfD)7R}=H&I2?&LA=I4$6EHLk3?%ikf~=|DbdkJ<*>pQ&Bpc!S-Cb&Rh;el-px?2<1-x#0GXK!1G|o%yQkehXnk%J|X@h!xR8#JZq<-(C zqDIRu-^*fH?@GnyAZ|83iKnF1k#L!oktqXpL8QPBIq-!ycEwSC42GRjK7^ln0;0;w z9l_r;N{F&vJH2nfQCAVKK7X?Nf(~!%BykLDs*agwaE4Q@_-f!Yy-Ghc`e!i?_Hz!KwXUO>Li7tWpXoAe-;2$gymjHC0t3uRSKTVDQ?5;6cT|ENP zD<-NHGkOu5CjXK7{Ms0skfO1|3p81hHn&Q9!1h&}|IK0;d@pZuPD!O65j#2BT~QO; zh<~c))DRt7q7`$Nc4^I$m{S?LXz^5e3K3muEIVg@E?I$HG845aD|YApLaop+k;u@s zF`fpvHpL4wiF&riaJnrsf^Z&-t1_Fq}ziB&38U)b-k@-@$+xOamt?(!D`S(4OM}I@rDiAjQxu2yW8+O?RUA~QS^fex zoK8&kWix)RkH|M_=j?HW=hZBlcoi-)Yblj0OK?>-^XQROe7}LMr?|-R6=RPfib9FsPxvYzwKD*D~&ZLXd4eHP-D!D!IQD_0`xOPwYWL*p^K~ zA@l^b-&iSLIC_0XY&J)?>{J>)-(20X0ukDoor6<`0DUJ|H?PL$FtL9yO0h?sPgPPD zhF?8JU-=J?cs^o-H+HGlDZK(V;yeB}37EY54YQvIr<&Xq zTMQW|YKG+XFxs~X1OPX;LmfX_|6QvFl(D5Fc!D$Q0CA2KdJV5fz3|Sf^bd$9=XtN~ zC+?m;w_au2+|KXb(&*m3Xs)kQYL16ZjWr)WK9q^1*{Wl*qa&zxpJm1%4@69d`lG<6 z)U^RW>JWTrpJcJ1W>CGV(VU^r==LZmCc?m!u*oL(v($h*B_U|>&;BXON8rC>KZux$ z^ZyTC^*<2xKSssO%E9>m@GAEI7q8;@|HZ2&Y)Ly%dM*JM*7;Ks^^3D>8oEl-yR! z7Rn#pKhEpq{N7g1^?FMniCGvW|oGoWfecLWi$Hqppd%upKF0*(m zIfJ~yT3KB_!Dz88ILLXXETKNqlpUVWe6ou9R7d#7b5gj&qBgfk}ZXVySGAB(&^ z!j&0`E!j#Vn=8xe~X!;Z{p@DRyuSFMj@xez}Nd21>AsmFJ`%3=A-?`eX)$&%?{lU z_g8QJS-})~O%5fPd96SRe@zgpj~7Y5j(Bbl+KALy)nyQOjbe^zkV0^7KJ!oS*I@5$ z?@FyiVKIUXB2FeAKH3G%JKSYo)ESays81!lO*B-R?A_yIY3ef36du1(P8oq zz7R(Lk_3zdwE3x6wrjQc9zngh(Dh4*Rht%OJu?j(FKt=1K)-esz@WSugO_rI1rL3V z=CCp*?EdX6U+)!uHA4SIUxA1ya^@GJ2q44=omEi2dqRorq#8-+Kqcgey-q5XeW;uv z-GgFMdSd#iFRcMVr^wT`%rtIoK2=;IW#URq%hYwS)(zsApvfd*yW)U8C^8)|LTB5& zy-HHrpXbod{D`)S6WpcNVEY=I(A3NI!LHecn~AXiDc8a3=?CqBpSxUUV6Z=Nc($#0 zUV0i(Tq2NQ4Q_4vKI?rZvb4QJhJvJKfPxrf=vd3b`xHcH7QP(Uo=sUd2fLUN^gR8H z)f(3b^=a2G!~I(D&)o*D_EuO?6tb;FU}W1gO2wxsOSJkZ$>0=OUo@dT_P@0vev+}H zvimTV$mXPq&Kl=?o}!cG|q*Bz@ypajI&bu5tf|@DD2bfudw%^>pEdJ#J>4DtEDH zqnOlS6&3rUmKlUrbQuk@tyuBw9SNWPrGa<)z+oX`eMn84%~0Y zp())F>~H|_b_D$7n{BW!T%O@$6E?Dc!k|+f5693~Z{!+z0-|_X(L&IW;wBN|nMQho}m`%j>5( z9oB_ona&O}=ya@Fa+hNIr$`lT(j0aUlfZa;F`vAklCD$;-3m~28 zfusa7t;A5NI)h*|yQr!Rh>(2#*=kAc`BI05g(f)t5P3uWxe$i%h2Lw`>nveSdQkeW zzxeVI4yGYMT6fJQPJqZ1@!GB^wq)Y5YmhLk;64ViS*R-pf>B!t_s4@{o%qSNlV~Jf zg#xDy-FAW1Z;?Zf+R<=v!a=?KHn?*=!j1;`5)CaQB?UT{vl}7?Ig%G`D8#P6z$PAI zX<8__MyKB>nIE%4ZLr|Ue8TBKR83ua;cyh;(3s9SA1_CT-jjx|ujTazwKLuoaw3)p zY2nrm5|VCFQ|ztCpWC^?iI6d_Z^-LVuN279xJ$znQxHSFFMZN99Q}S9acko4StOhs z?_M@xO8lL325=NYkF6w$udUgX`xQetC1O0(+ZeBZY9UIhUi&NOhuW_NBaOXc?(1|+ zth=}XAGm_`lJgVCTntL}e(OVmtYw!ZQaZDu7Y~7o7q}dLm~;&8C@`yt-`#D?r`*X9 zINm(qk0*ovmE^9m`Rq4Gypoe@XdRSgj!3b7c!kInT?hgZL!!hRhkIBNE2Fq> zvs+;v&_h}Oy3t@tgpq;rg7O4tqNfdh2GL-=*EYg0REr&K!b*BET0H=HDa~hmQ6RT}SR9pP|^a z{_>wh^!Nf10e)LG+msGvq{c;vUSvn~@0Nv&@?!lO^^S5@n+>q?vXEoOt0Xt(({Ngx zGQooIY(xC6H;VtJfKJ)27ZpC+_SPl2Bs`2Dw}>D}LDDu~rg5P?%@fFzr~rE~9K$GI z6h@O1w$KINH#?`!hmYG(+_ki;7!6Z1!*B$MS2=^`0s@^Fq&we}%^KEnWVW0W?YDi$ zQ}|7bP_1xWQaDQergtxR-+V-7<@((fO)xS~ zSC$OT1luce&uwo#gNWEylMJ!g!|=3bEFUUeRy5tsbRju)jBlf&3;vm#RTluxOg>lu zgx-kslk<1Fp`qw#03V}#HYW)NT+W`*h{7=#Bvf^)d@asoaa7pbJ@~m#q?UWYu;#X6 zMYJI+$%6+afz3g?YclI-=fr5FZBO}uVAaj`F%MlamgLm3vOZT(#I6%79Bh%d0Jswt z0$O>;QmBeAT3j%nu?pIyY{c{h=OU0je&yJ{`Lfv!WO3%|I%koPg$bB&aYipxL!!GM z+G^U^iI|G|>iGI}=Ce%7^=rZQGNpg)64gu54=-*`YHtD$H*SkltSBlYc6?zQ%*#^z z_e^R1BT6DQ=#bQtmZCt~dYRQ)u-y@eR{GYq3r6pXQ6=zItd>{oLjPHkxJ|w(-~{`C z>(WmL3d~E{d#a2tC3$lG_spUKFWJHGpxyGV2+A%I#N`e#CgJ?KaZsqFXKXDrOc9Tq!l%7 z%&JOC6RF)4Tk@n}_0XI`;~=dta;L0?kDn@s$ymyXX}T+Qsac^!FVdlPP8HQ}*MjBO z)ozj)FXP11r!yllI|8POHTO=}kN)UrDL&vK{gFgD#7+u*<3IX^?$(0sY`V)bThLc( z9#KpgcOn8V3pGZ0tOxCzv3}Rd5{-L8M&O-_Jsb|S%)f%o)(PtkUMS2;s()!teU;?49Aus<>v{Do9z0fc?}H24 zud{putDPKjwMhzr$vd3aI`-M~^ju$1lj-ND1a{om9lF7a2c8*fJ0V5g*$@dbB2v;$ z*LtnTYbngAOyb`v1E@Lfj#hVHw;p2e*H|d+vovyJuVp2-?bd=9+sfI;=V&)oISgey zXR13S*M`990${hn=Xq`7&2tuexDdB`<<`L3_GH#tdCb+LFetQ=6mvoe-3yYc4KQ2l zpG0l{&9f|$Y_awh9At0Zmi}LaoKuisQIuuVwr$(CZQH7}ZQHhO+qP}n&dRBt7)5kX z^zZw*5%2!&yUy9m@Z)=sx2B~kY6DKD>q5z(#Gb7)ARkVeRQGkMBdJ}KWdAV?RvUb& z4R%TztyW7z9gaR=QG}M(yOHSbP3^gue2(G;x#sDnO*6CyO6*ilTzLdF6Nb2w|AeyR z4!9_L>lYeBG|G9Jh=&>>u8$bl1I5OQr>z4h^?=HC%H=DaJI-D`^)L!9QLX(};%sEL zKvAmFr50!0Ksk#Z@_sh)YvKGn*pxj8Mn`IecM9_?F)ijkF^Y;FZmgB}uY%DWl58_& zirsus(iU@Fa`>xL4aIe`*Vw%nFN2?=8;{kFV0D(utZZ#5O}PeR)wq}W+4hNc2W`vU zs`OL8j_^*yK#=Fg`gr{pl-uDy^7Mg0U5ZVoJm0)6hgQB(pecb=HO40qsSbi0F4iFM z3MqfdU->)qwd3TN{IaVo`qV!>KKF3F3wHd7wEek3#N`Z<(g%`Xzf<=-sD>8om=6^5 zJs)}ckpLaIe6FVc#n-pS3cy-a0cK|9`TVmTW?uA#zp5J&OAw%+-vrHdM0~gY7v}65 zez6a(Nk^-%e_DEc=z_6i3H8lu9r_K_Gmt;3P<0bq^@8^F@$=E&9En6JMbnTla;{TS zc6eJY8%5F|2IeBEW;)7*%IjP9_g#7f8sFvklod5II-aymOG2G4qiopL@F}bnR}(KC zU2UM*Ft2+XBtu7U*8d@Z?)an;i5|rMk<$0JnYF_ju;)OI#*w3+Wf9?)9;6WD64o-KKzXW}Q zCBf9`fZFtvDX;jCU8lN@ujyM5?M(dsJHCJ+LGeYVK59csA50rJxP$g*TWk%yh4{kv zq<)hDr9P$;#lmw-aE3bNMYg5ZF+bxWt#ph~l#*zo^5GwP_DbSq{mHI~VF&{6;a#{rbw7|C0qx(Xa1=gMVSY@F4FK9B=GX}lj~>hUgCHS@g*ul0xj-XXclYP=0>(n(wbl>?@8 zg&s;3_E3v*L$UVmB_uj6b|BJYDj~%9a)L>%lLbXi1PF~wC@^v=40;AinJEmJ`I8lcx{rvfZZJbvQ^y})%SsHsGY=xo z1;4O%AQNvmY63c~qzAoF@iNx;C&7{zN4fHvs`cs*k>PwI58|$FM9}TwuN|zyZ3A9( zsEA91+%Od6`yhD!8RXxDzeYwzTSJYV2k9QV`pSlBuuQRSLcFF zlDdl;NVZ(^;@_D|Cp zp{Jz39Ux9rh(`!Xwd3a$(NY~K+;IYUc>CsDN=V_7(iBe@*b>!s6~`{5Y*$%o&ffct zOey~o@{uF*zmhbmoB0i@jQy=a5qouGt}|}XwzT9@6h&0?GZl?oaM%uirGndhU$<=9 z>ddemX^>mng#vtjRA(oSR^F-0O@i_@xyqk0t=~(1swbXm{b}U1dv+On?aX!)E!$c@ zK9y64OdX9-MUcr*RPT(UV#7L#_yP@wthO|0J{hJ_MVqkwjo!o^RE~443t-!NTy!48 zrMj?|ruQ~f>G14s5q7VBUpaQdIz(!z^ADpxJ|HWg1P9)JkP}_4#CP15i)odEUu#y@ zK!U{zKJT;`n?o@(XIyMRfiRg`wyik~4b4CnPuhJE2y3y}uE=pvru;?b&D&~$i0W>) zmk+yAeaLr(MnDG#Cy070Q4C-ni55?=TUm5or-^bMCoH! z==KM({k#2Zp;nTB={Y?!#V6*FsIA8j%R)rbc=hMEP$J^TF_)QXOfo$GVag*I{6RaznU3OOfn(gI;m-l?sR5&^L zU7V5&|IzJ6)eH~h9KD83%GEDm?-?2>)LEaa5P#2ksQd8s=fQFtjUIL*y?`Qi8Q4VH0Jpl-EGILozhRZJnDdUWYh`!3yncYq zRhM-MRaw7fAc-hIIGatkjk2-Z^HbTlsY`U&$EfbJ#?4^D_4*$jkfq&IW;ZqImM4*j z$WkT9&cC_bS!g%T(Gve)Y$mAazf#);yuTS+=AOPE=0A%z~U;( zhPLB&6#%xCj;ho_S#wh-HM->oM!n|ceNvE*A9$J|sJK@o9aZPJ(wcwl{8=41=}aZH zBRf-j1GPIk#~8_&HD1-gUCJY}?k#0~g_QfQ2RQ@C?&a)%dyos+>W;fC{BAWa*#RP( zC{l;fwk5MgC*jtTq|rBT2c-@fPi%N5D>et#?kSRk$GcO_dlEyh6YWH%2jA>oyF?+o zmQ7!&NFR$db#ZUTWFTt;#w>)s6Y-3~PyRTx8%r!LXAE*7TKKk53PQLZYJ$mjDJ_tF zh*}xezFQ3$dT(`B`6yPZ|NtN9Xi9LLhscaF>!sCEuk_V)_?g!sGYaZxnth ziw5bp%+IPg(LQXNu~nR9u;G8$Ps!r ziE_Se`BAQBezwqIR*>Z&ITNkSJETW155}%J4LN)vJC?w{v=U~OG8>(|5$}QDt}WIw zk$OzL2G1l$)b1^<&k#$2sB&r}3inPwFv{)Yb-9{nXfi3j9PC^jQ^8M=4Co|n8v$XS z1v=}HB<35QSbw2b=zPQ$^Q7H&+d2XeU-|gE4>84bX9&z^9aC~nT!nq2(q=&LGphsJ z+I}M`yt8B&%{OG&pyPovmZr7>bf)j+egPuh+VB)$ONcAt%Yk?zS#qM?iuouPX`gI( zE;UfcUBSJ+u<&krO#m&%I1`Y=ZX%6if`grN%mwiFohr*caMXlYAWsB9b0Y6RR)F z{#SMW3;eVfYxiFyz5kiu{v+x!v9SC@2LEdTpONK1N4@`8%Kz`8-ifwm)G-@^Z=U|a zS-)%b6gUj*?QMp@ZX(RF;e;|B#D>5tsUN>U#~BVpAEjvi*GU>tTx}9u$wCUwmR1@`>nmJy4MArwmw79yuNDvADOFH z%P;p)yQ?_YEjzMLY&=Ky&&{DC`@WE;(kFTPJwBcu9&hn)5w<|x5AYFV>dcS2n zaJ4Z@owx9_J-*BU3;?yEkC+Sm8RSM-{%ZXG6C_RjwXYc2r)<2(?!CcISW8Ix%~jZM z*MXlbjD13L)S$BYERXSXyqLl-PFy(r)-b0WQHN1@l3k*Z;k1XqtnutP?~h{Td^Y0T zceLTX#Wsqz6qqlJR`|Z0yBK$fSMXw0UK8|Pc(&!a4wr)M>%?{-vf-b0IBn+2_fDIh ze5e{51+b1?hAS2x7w#5-L-=_{w{o1Z&DCbr!*1XMhw%# zadjn}bzj`^aj-;8OgX=kFpk>%Vo8RHwegtX{j$z06BzfCYY72*IYXrq%KB5u3f39% zvIn*bC>roSn?6t$&pSuu+{Bo#jI{wMA%Z#klAd~gy5ph*J|YO=Xkz?L*jx$%c4|P_ zat5@i_=K7YfU2HbZ2>y98~yG+I#af!DubvQlD7WNj1O&XxYeFfh4s=rD6R)Nv{VE| zN^#OG_((oiBu9Vy9uxSHbC?aoo=!@bqHW(X3ZRRjJj#ax0~K3}Kt76*`M)tn;XoL> zjHDPfYF9O!|G%!-{xz;R>!Dmat z)TE*X?1}aH?;(1k$8b0Bq9HZ^R;A~D2%VOtKwf0zn8(;$kZ)^>+6zE7(}ZXX$8keo zDI+!`c{b>aAD$Lm^mngfnW#u)`ao)7)V^veOPz9+SZ98?rtBoJgbf8bn7j9+&qy-t z)96_)3K!S!+B88X&N%;h+fwc7YQm$sehy-iH$=X z$RjP|N1I&EaR(?Pp$zFr5z@g!Rm2?(or`pbMWm8o=5}bi6w4+;yv3FwVH^Aza710p?P)atP=3?# z>Z3qZ7=b1t1e^r&WB=5V*>|Q1I2+VMlidph2EiGBtpwAxWtywcH9o5^`;P}5t&4!wi>_wIyMWjlkLYmZ`1Ld+bA{3$Z+m8_#L2uhp?i4rj$P1-1 zc}6Nd{N2fz)j9G)Rxz$b&VJQ~kb25k0tIg&SF-u$$n67xja)gSpP;i6#xTf<`AvL2 z8w(Vwb!T{u#7HuOqylu0(6(nFCzypkI!O+fUPx=7>q^zW`0Gfmn0d+_ZxH}_=}nqz zLqG*zw`W&R6kL<5rIK2V=)}#zYJWn%FX?RHY@?koo z(hVlGK~hawk-r`hnF}R+Mw1vrQsIAua#hj7(f{ZJO1KUFudBGn|1_`T2v6Bz@^$2| zdxqqB1I$OR3e}w65l_l+zlI0*0VOiFEs~H(Fx;K(b!Ds)2C6CUQocyT^{OSo6?>?6 z#NsBq!26*o6jsqCkQi~x5<-S2xOZ)CS=km2i|QS$IFKsA(`EVdLO}Bc zW&dItVp@kC^wR+mm#WfSzOtgZB>@^GF*ud+$iAyeNpz?~)MXDpKr_v+D{e#GpS%yx zKrdecY6&x!C$XHX>cSCOW(yK2-gd8K<8EADBR3!==~CCbD8q(&?aZR)t~?Wn68jAZ zvRV>v?u0FIZOVUHYQmOXAp#f%2IPYX#7wr-nAAIJrVHvDT*oM+1U^&+Ae^x}wm4Jf z1R@^W*evGfl4^@*pr>qifgZPM?$@hSAsGf{&TmV3#A4;4GHK!jnz74tq%(g^WtR@V^0CE7SX{EoRwTzOors|R5RRag>5jm^3X_=@Ch;=xHlnvZ| zm&n<#G$Sbx!0;2^e%!@UDEoJy?x}58i{hJEC}JDcX%}%og`=A)rwx0MRxxBlq8l}V zbqtd&`^!&x*sYs~L}c57=2aQ6@49p$r0{oUYbq$Aspseft5i4tQ2l|t>Wrv%X6VZH zYU|qD)eY22e*G%bTTScT=WeHBC0zdDPCiz*IZ<$!di7+AlQwq309t=i56(6j8CLr& z49$pRu{kaK+8(RYu>{A)B5?r2fM(_%pH8q1YCMPYY(uS^QpptgId11Q+d>wU?ga|G zK6XWyf0>GdHB@nu0)U%nbh36UnWRzf>asQ1b!9~s#c%Bg+S+___rJ=A|GSIH#KOt` zfAS#{=l}lvf7QWEod3U)=KqolGZHYevvacjzbfGsZw~_$)y_LjtBcCZl1i?foY~c! z62fXgA&3A0EJ>hX+CUKCQAQF#pnza&gnJ}O?>mT?ZaW86 zkCSNE-AIL3vUYweMxAt19qRrMLJoQD?rMjX+GJd$?7Xn2wLezWlYMkvEf56@@{LcX zCsmiJNNg%{q}Sh5Q)#LzyhP{rzSu&KWiBnSG0+R;)DS0GZ&#O9mziWa$_F^N#K3GY zeb?X?{XpF0$w#0IL=%xKW^Uz~x6uwAybZhU@4>?)dHkHDthDoWexLpUL16HhnT*!& z;nNA4MUCQT(U@7>w%&U7gRIC;&`{*Exk@Z9o6nfcQFS@2U!9z!PIdG-?7yK*&%Yyc zDNgl1pj(!?kCfZ)wZVR2cPLKy=&hq&i3SOIiM_?`f31+3+P*Cb~#$`;6SW61lL$`&x2 z5w1yA&rDb#ce@5SBJ4$$SxHso#jM33N71!s^PxVj=) z^UNX)kpV&Q3ap!vYCXqJFmf+;yE+QqK8}vwg1#5=1Ip&Q`tkUA**aXo5y1?^1!L~( zgop(uw3^WUaKw%@-PzMncLximD92hEycG}*c8@5W^R))lC)TbDMEBumh+x=B^#qC| zrzH=qfRh4$GL54Xjd2esghGl1C=^Z$keI~Ni)aL)B~uhiss(3?1uc}+wADAWaJ1*e z9INUDH>`K|*XMAXdyIYqU)$`_7An_4a=8#3HBj{k5=BQVqfKF}E+t<~GD^K1S$IF` z$FdR-wL>2_A2;`Df_AX^Xp+phiuzbkefj^1!Sv^Y>h8$pdG8-4(#G|2_4p)@x_XZi z=|U#l3^5||FRAq%R&*eh;=w_Kgv}zFP!dgXi_kTqp8v^Uk)3tptGNmjLvhv*7FD>S z(UxwKiy8z}%*8b^PC}jrO^3n`nD{^~sU~p-UVp@+C$To@Sw-zf+9hAuN7*%gr`R=^ zdp}NVZ?^6NXQG(vgK0U2-g6#;92VYn&!-b!nawxjvH?Gi5(s{g@})(QgD78|fk|Tt zdLq)QkKElM5h;g&z%Lat8jV<8F0Zfjv)6SznObSGt6Y;^^1HjcXW>|HRkpbWv>H<{ zuu?b&i%QHG6GdR-to;adI*C{~Y(|_+x8IA-dPWy)9A7r?IpQa{;w4iVAT|_fG7)h0 zM<5$MpkhYGtyY{Rg@$=!mAWER)&tWy8A-&11E~-Orj8X?6SDqDf&8t&$2BrGhpeC^ zkzUz&&%k0eEi{WAFLimt;kPfmI)|>>+G5{p{d-HF+xvTt&T-*oJ+>rV{Fz67K0p5f zAEV7@MAHk#@*#ldtAd>^P~9rBlbNnTGLuxgvp9jwdPzx79-r{{8Ejj#9pVj*nT>*^s>`}X&&G-Y&R4eYLlg8oy}R`9{AfSjo{ zF2`Y}CBrGqM&t3Gn&4n(KhQRwA&z93{v1ghnp31KU(K+2xGI>DrpkOWHZ(4X22)lh zWI}TSYi80pVL=R;lFuoD54+Pl9pB@D$jh65T{_Z|J}EFj%u{<=uYM$TiaAA7r2;}x zRdpfkocR8?d;rc~DEHXN4O4X8%chHR-Bvk$$@YC2Zb#_y{Xnxo3cO!FMljB&Kb zklw>`XA${;F`9T@UUb>a41`%P)`$Al{rW=#PJ73oA+uHin@E{Pl(8h$gHhVZJxUEb z$T&Vmvwmw!TACv*!w!Sx0q%$!9>P!!*l|slN>cWMo=euHTwvk$wJQ#v1=iyIev3UF z%mlS@C}|cu&(H3AWgYvIGZx7_mPgXQ3hA-T63%xKpyk8FTHAcApw%9He%+%x zYC~F1?1{WVz!IPuFq*`MhD}$08mMuHjuwn!_O+k4vgA|uI$CbK&Fw17{r;^AosIu( zvH=*MkKI1nDPAwZW3Relba8~VZTqvo>B{Y=wc2n%wyTuyqc)+*AaVP8%(gl&*8|zY z3tYmB?EX+FW57MjHX&P}O8cfPR>e-4(-Z@G9}EBLHia6bvNhZz%j8otTlFi5gm=-Rd)BxL*x_+jiCe|_qWXDoiZN?Hfk|>idTET=%uWjyx#e5jZ#uV{T zObBI#RlPBnhX|XT*#=r?0elYAkA-h^A}^O4QO^EIHLeFQmVDKZWsjc%|EqyD8d~rw z?+nvTeh3`dzRx^EUxz`?0pgkoSQheC9y78gpxHk+6)lR#^O~hvSVDTJ0kYAD?v6%M zLOwT(jl?j0Gr{W_zr%_H-4(avvcMLKc|8`?Q=J8%U6+x_8g5#IBUKmd=FAWREy!N& zG+bg@A&Ha4>B?%un0K+({dh&&oR0g`%PZ2|_3w9+Q6w%uDGZcsMjDT+^uhcuoZS0R z{P#@9#8YXoklV4`PS)#$OCiQs)2+$}F=S(B0b*h*bk37|=n; zr}Jb|)+(h?YAC@TG#Utp5i&c&(!f%wjgh;CE$h{hG8FV$I7X!-jE8v5xIGXH(ZaSZ zYqbRAS%lwK&Iphe7``nkw5UUMuEylC#Op2(4o2RcOB~Yfn=S#J^dTJ=x?z^TQ+EM5 zz^ezF9-*lw%}g2;55UC{CW$=wY4KExB5VkfhnyKr5QP*@RHP~<9~zD4-2~7?WE%VX zsz9(Z90^6?S_y;mFvONRV&XLMVULbaj+(U-L%PN&B)RR1$30^ELb1 z7#%J&6bdF3NGUgs>hnz5>k&Av;rk6en5c=6AombaW?~WVu5{d|41XORHlXaEWnd5C zH892@n-4}xQ3H2y`=e%OeO!);-pAQT7ki@cyde3!f*%Y-}zkTFY5+?SlNOaaEC&;p`JC4rCxT=5uYxciV>2 zBwp4Iba`Oy2xSj&4?K=*?RgbEp(tv=q)=Jt()+Jcg`fv<#+3t^qVi z@lE-@_fCD*j<5_+ojMK==g4`e12`t2o?;wPHStfR zCKD-AcVwEggBsG*l`bJGIEw)=@3|_`FJQuhXM|DjV~sI7Huie6{qZ=(?RHCiMW{r> ze9O+q5R3J8Wa@5$u7azzW~%1GFx%7rA;_FL19u7uz_FnMSoi4Ln{Ib@KMS=tbO!%S8l0E+3dy2T?UPrN;2lEDA^^0T!u5-iF({sc`<- zW39s=W!r7}r6~x%Vv1QL;g7BgXN3W3VtW&_H+`uIi5L-ySP`_%iq@XgqQL!t%ZbDX z4);ok3For?es9P&>W)DS!bYEOIxz9^%%vrHWkG#1<``naw-%_?PHPcVpQ15cE}#<4 zV47{e4rGLIIn9Q|fyaD$*?FX-ZG>RUL zXiy8k6p{unoJJ2MCk0Tc!os=!3l~Y8o((`&Mum|pg$sA>H0|8IpAV<`qcD7^+KwZz z6&X(9X~-Fh1xJ81JOxp^+#dWY>&F(`I@g|X@HiD#5L!vBA7b80$152N0Nc|dW~2aG zA`HMF4TDOf20)6(Djj_b6oi6pTAaCu_IU>B?iRZ+%xff;__)sjX;eX>K?)cFz=LPCK$~)=k#;YA!s?jh5=EnJBDr4^NCX$;%%>@ARA6;z)=C{ErYv83p_-7~ zeK=GQj%4#yq4?-V+>MDO>LiH6hm#cc$u+l~N*Pfs05RlEP7QkxX z<|qQ|$PT$~HHS)qSy)SjPAGR()BoIys&U&_+u!V`9S9i&bG9OiaqfhF9yMcDPgPC9 zF)mrQ8NQXxXn=~*=!R~fllLfXYB}bGO1ndvt~uJofs(-&u4bUOtsHQ3RncGglD071 z=ha;HH_+tWz8PQ$f{5*nWL#VfI}pizEiVL`2oX-_gDai-KE8;PP5)yl+h#ybVv{7X zD9U5{jC&X+A$(kBwLwaMA8?|xx}%1M4TzUO|LkRE&3+t})`|{q=G02f+5Fa|I>%z{ zE}OwDiQ~u%I5LC|dzeA~oikO->nIK4;VN|hUc%b4Seqo5ixy4N5lN`RgpkLO5H>b4 zUNQ`@KthQrq0G+2c)Wb3`4exR+>y+t96PU(0sIoKN2)Yw>@7?mpm~cmkI$D z5FuDZG*Ja&3t>u6B&@&c-4+0KqQquj36b88Sy{zQ%`H*N^=7nWbjdm8frSosVW~ht zy?Jl8nq$QJxe0PPJU4BXs()gv5S z5&xZF*>Xq$0kw#0Ig$u8GWgpdje6Rn8;UPELZap{M&8TVD(I>n$#_*}ZY~EgH(-rh34XiJ6u0(G|mgm=?J)nI9LiMp) zJrX(=u1sW^Uc$O_)cG>x=`xT@ER;Vplj#0mc4d(EYw;wIanv9UmhP8v=ux|vnSb6) z-`D$uvpu%j{p6=Ced)a5KMw@i0qQXyE8ay%O;4j46AXixY*CP&M+y8EBS4@z4k+Df z=gffSK-(6HZaJ3Z3IjU5?8Ai{p6;GO5zEdjtQ^O3sK6pi&P3z$acNOa@cUrvRX4P* z0ZZ|?Tc)hQ!TK-_D>vPhcq~DhAfn8x1_XVjk@3c#=AYu0R4BMt4>iRuQ`^*Ic6I#@ zd)b$s2=^mFqi6K1e`%c2gdsj77o7N{;sUeJGY$OD#5SO>ORQQp3vCret01kPA(EGI z6vzN;BRa68L%$3ra)H97%~s;{jYsA@zTeCExvjfxoOheR_L^=+*m6tt-)_A0vGf|j z#@Ogh_B?8r?Z?(d_#AtII1-C^4wrRU(JMOUtDvW|xY3|O_9eOJztHBX^GgN-)gpn( zND6@*l6*~2GQy;Sp&GGR7r+deKRH|UU}F%HrD3pKjtXrBhP(M&yPSU*2|A$=H~0tP zk8tNOP^kXIy6Qp+*OAWOVbK9F;UGFk0DwUTbdtb36c(T3T!;nkNPb$-Nkl`!Bs#N; zMEKh$nnaJ@S&!U3RKF0#x_R;zD^Mkb>$Ytexm1otB9%v= zpF)Tz7SyUXP+5%BX6e+_-q6jWqGznxac}-%#Z36{F%j#u)dwI*t$uNbRL6P=b;@Aw z8~WPw+2F9WX50z>D!M?*!_L!qxK?=oAgB$q0?`Rk{6bL30_Iv&6q{EbPrDZp0)lVQ zRHPMAEs%Rppv_9UvZ0|A2iPyCL6C^1ASpw*DR|Ys^{_vB;-no7x$6Zg_&qwOuKSLK zGMsZ;$qPiiGGGQ5{JWOr1Y#TRU^(7s+7ak@Im2|R6KF)*uD31@ z^nrpoJ$%6AeS;!ymP`kcJx+U2kPXCmgs9l~g#=`)S2O+JY~_{$-{ z-u#`O+W}T@wD};ccMtqRWBz4e8&rq4Ew?BgnG!~*zh>!NB2(Uc;o}>qGr6wl&xe{P zdYu5`P>_0skb?iZi6Z7I_XZ-{A8=-ACW;hnTGynOa6bzXmhQYGvhV#rU@9QTU-wbP z95i9SqrFQRE42HzYE`h1qaX_~)(7VH!I8}A`i{2J&GRuDpd4WnMmW^)2L2W!f3gQJ zmS zBiSrkmzsS4QL;I1S{vR_@C%;i%EKcwJP#@i&c{VHpw5w)7m;}+Ov<@XnX5R9-vE^@ z9aaxsirW9Uyk`r=j8-<=AucS=7oHcTUU^`_@Pq^P_aI}(5$hSsYWMFP+A_HJHk^m= z5*{Q#6O8f?%F8Mu2hVZGYV@@5>kL ziH^!n$z|I^C)^!z0_CCF2b`BfX^-#@MkdSyH%sT~H<}go1;h=Nn^V+cW4MzzvcpDY zWyYsxt8I=6|6S$4%t&2Fe07nRJf9iLtK$;U#26-?>4+#Y?+5ttAt$pRCUf9A{#ehS z4#0fGh+uY4Uhp^t&UT>q7974TG;=d57_DKvndvnSx3r&jO0lR_p065^mBl%&An|C3 z8kGd(ipQq_O~%O<9lJL!rYZ54JBca=GKI?-n@c*SkhVwF9aWEzE~YAh%=TnHe+f#-;4Nq6{Jv0LF|`F69bjTORE<(?fkSeYs)hkD#f)?bih- zXEVyg-PeR1us)n8(%u}wz=YoO>BFt@4qPVDV_`85#USA6vt@y9woE-!*v*BO!%}si zOC6~qJ4}};73o_ho}^EI9A4v?A;J&?t`opDgQ@pV?NztI#tC46A~Xz|bUOGa2_}$S z13uSu_+TfB@IQbTBAm!I*rL#H)MpoP7p(EjeYr(6l1O#YICTG|hssJ&?Q8`gXE8GT zLZ8FNYZ`fyj3x~bPGp?gpUkbOI~~L0B<)bSa{k?X-Wxo}J;6sIitW3aHS#*(owR)r zTUc4fB5CjW$t#><_XH`NV08%}awkQxcH(I>HGNKPnWkBxawZo|Il*YXer zWAMwzNG`g$k1FjdskHqI0v%kAUD9W@R}&Oh!P1EL)MQ0Tn=XVy3ufR`tqsNapF(F9 zY}AgE>|fnw_B>C{438M}f_vU)Sx4Pq=hEus;gnh6$ttq8)ur_n;ga=!6Mcj3C&Z2)qh!?;X%dTP z?9nDEi>Om+)Al#Wr@3Z_Kg8b6(dekU$2|z?I-URQ=?)(jL?(VSo8QLHFul-spIrpBC65>~$VGa~n+eGbs%MFhq=oWb>NNypZz|9(+X*o2F zb0(Yu9Zef7S={pJ+x;`8w)kdo{_}wuvs|U|MM)qr0`tM#?>`^;?fAa=xY_(6G@D%Yiowa6H$=m3ua&Barfk@5{ zY{@+V9Mh%e4Rvh6UxiA0aC;VwHQv^lf?Zc86a zYTey_86P7z+mQl(?*O0eecR4j$Vhqd=Rtkey9Y!^Cr3^#(q+kglcFOP0RKl0X}D77 z5;S~siDm%Pb*UP*yHOmSSdULv+9Up=?~%BkopFD_5>3tPhySkO$ZEv4ep857q4k+! z@K_UDFOE*HnOZ|V_+>Oq*^g`ZBF4u)(H_};kH3v}jfRm3bc@mUvVV`=iM>&UNRmq4k^N9cNF$kOqA3*k2`IS?H%)N_o#T70QUpM z%M}dQ1A%`n>@@IYwmD^6jKOKoK0PS+7x#SRUGt#gjmh2O5qcAq6>z-{Frd3|9RWsg zj;PmKr%{kaM!^|dhh!cQH^Y!!5Afp0c-4$e$v}O0=DUV~qY0m=HCOv>dG61dal_}l zKm0T+t|X(?beH{dY-YAEuqdb-%-5^p6;)FAO?HS`57d&S{LY<#4F> zJ(ZF4R))`OF=^1B@a2?8^){LogD#^23h*s>2Zy|?^sgJ|3o zu$mfA%HxH_{Gt_AsVC!&w)ENdSPqH9Q$Qef1+r|>Q;L-M{^A->N9lm4=PJW@W_!0@QkhA+(+bRl5ZMQ(y1#OXz4NWeqi0-fkNkOkpv*-@kM^ z-V5z-6@xBwOI^ac-tY2*eod$j{x;JcV{Y*yJD5_t!-g; zLv{zW+!w929fSe|e2qCP^{)5sfD{fzi~}H1x9KKDol$Ka)s6`a@&s(U$T(byJGr|K zTkDq;7|qa7jIV|em-XQoD&zKM9oObf3IwoUwINmbtY#og6Myg9H2R04>-eo2uRBlK z-;OG9IKR6WtiJC*yhisB$@q>?Hp~xC*7IRygS52N6{*7`m1j(=J*v@WmjOUTp*6@v ziz1-yN%MK>Cm~Bmyq;{D{JnJ(aM0#Ba)n}5D`vF!GmnVqVhXm}`KAQAoM2X!T6Vt^ zGj_TllA)X3>VQza1J0QgY`;sancB>0&u2#47DDoQJQHb7LNmu@z%q3x098T6DP31C zV#QSyObY*!K!qkv!8vg@LE_yQRZuk=Zy$qCYF zeU$_c_s`jmk&~dBJZ%-uX)5{U&Ro`~^0T?1&AMtJmMEv66m@Af;e?Fef-8h*R;R8_&)-mcT#)17eg7Ras|$cC;EJBW|1^#b9E zQchF5XhaK0gxS7fJBIQ$ID6Vit4p&en)6VJegqd;XMX4k0~P3}(*eHDF16=F0JUz> z!?_aL5960VaJwb42RBcYEp!~2AB3VC#j?x5x9=0(yduDBLB8Su$FQb*8G-&B?SWbr zau6DH-7#_R9m$h}Jw5B;fo@noaN?M88E0rX#p|Us+(ETHUXMq50+*u~damp@xEq?A z3r16aRBO<#nLu((z@`_0C*k^{{BSi!(`6*Rm^19NHW2XH7urPBw<>Vfks3JLs0~~> z@DEc<32|B+S)!19Lf^1*CdVIxlrpY{(LIwtuh#W8&l+ERB8$j2*^^@zRQU5Aq$8FY zrqXVSnsQm0=ZdQ2uAShzyu#IggMO|)RKmIrV5W)|(7r6zkXJog<1>s~{ISCGd7XF- z;vC%X>vq2`XMXOm4t(4&_VB*;q4d74#Mf%v&!rzvGb<}o+bsL$3v};zfA-DeR=ZpO zuH5nM#hqN??=F3=msaAo>1+H9!?s9E-D!Zj_M#rMf*+4udz&!`pEo$wJK$OCE@V&4 zGWPz#3E9<*MY^-vGs`QspT%Ja$-m1)wu5{W3sHyDW-n24!;sg3!mSlqjaJVRn8@k2VDkDFyev5Jc+c@-H3 zb)FPfEz2K9Y^Zb#X7d#Ytt_?}w0|)%2VcU>YUDtj@a#}jSgY#58)5WQsEN$X(w=OL z=cEU>n!a5r+2W+C@*_js$pt7tytRxYyErJsE%P(?emeeB(%0$sgm-ikx@3ABepP~v zj?LWH`||HX*4VoFES+DY7h5zu@6zzm`&u4z)9|(5E_Rzn-?aa-%(Pe4*nWJihn-Xc z!{Zb+o!(?~nEwrCVk-)qYG*yhowpXXZ?D|Q0fI-+X`%>JlmM25+=GzuLK43g@25 z%BA`=<=nYDsh5>lR0KNJ0oA!@Sp|{22&s`D-bY z=kKtsK>P}RJ*_6u$+ARTVFoV$5-%z5ZGU(`IXW`br-AHwy!-F{_gOIJ)&^HW+v#wV z$;#|TOSEg~#lQX8dvlsqvLG+BI=ENNzx!|w`G$3U?q+cE;@e*ZUVOU2%I<$kMWDBu zxu;PFJ$j{KGKCm13yIL?Kw{fw^vxf;0gf0N?xWgWn;%f0;=8>f2>#}4Cw{tD^Kg8- z#rJ;wK8MrsD-b#IeO05oc{#k>cM`byhH)PK&pL?2!IcVL@wS`AF) zD8T~P6SnqR?8|T~*fpPf0n{002jT};V6ISkJW@VC%7Vur8{t|%xa>6l<^Gw^8K{;A z^32qNkPCQiUH^VV5i&CtPYC?re2jemZSDTAt;+DHe`=suVTFAiZmX92CB|*Am%Nbt zpZq-Nb4;B`A$R2LH6!ka0cQC^a{pSl1=nWOkwNXUbiMtt5LO&2O40nNUlZX}-?N^Q7lu_w8iL+zuW3Q7w z>Y|j6N#jZLNzp5iKRqwH*sZknJI35_XgN0YE$mzP&G_|xC+U|Or|(If5cn@;Ju0;m3+cw$YxfruTG>b!KYUbkw)?+&aE|<`Cwf=9U^f8sa>` zz3d{A4ogK?9f`5vG-kf9nCC;Vc>!wT9GIB;7>WSj>v%n}w~B;cPdu%gW#hw3MYd49 zTRApQ_cKB*vcP$Fk!+y-U+GT8*;DJ8sbPZ&PxvPs~?He)u)Tr>3|+=5axC`=r|i zqgK#%8K?UsOl?VXPbDn3o#JC=uJcgysg%dt!nD!mF$G<6Pled=3~e~Z56j$5Gt>8X)>>z)+X~ zr!cgy^j5*c@UKDnb2tSHKkHHthTinwU_ar&ir#2YyU0$>$c}f`1GGNr-YTzmGxlz~ zez9lA&YYf@cTXDoa}QUSpWS9xsW0 zFQ+Uks|OG14-~yS7}VO@TJs8hG4Lr9JNMSnyZ0s)eoLK|^L=alVdtR7FRWWn9Xqvz zlRK;JRIcx_<8qvtZA5#!x2KMuiYc1@QD?eT)$H$q7M)c&vu7VJ5>fcLE~zy0;t@|) ztC%nKn^$YmY_Z2AQLArc8{xw?(`;~15hoNcPrh`2#mdfrft!`J)8l(h3Z{-e zVQ07MzWKO&?+=#*g&M}ITnbxX>iKwt^tJ=n4sRaNIME%#?)8B@^qAa#GuvDXg%`B zB~#l{DlKS%R{GPtJwx?7{4*!FOn#GpK1`K%S83Yq^^^bFw&!qw`N$I@$3&i*Ot;y% zCtanyZY_uIxv3$*d|Ypsx$eA7V$F-Y42R`9_DAoe$A0vlOPIxHQM{v_ij=iX_l0}c_EhgY9g*w{;xt{ix)JFxA*952(Sla75!Eq*v$q|trU z&7N(Sb|>$qmDvW>PBNY(a$f0sPVmWf4e#o64Chv*hbuyNX5Utxd1{^e!;0s6%r&m2 z7k2ll%4ReT#JXfv?3(`3_k?bRnwkEDm6~(D*Ogtmt|Ml+WVWHrujmiX1zPS#KMM&?`Jk&lQK`WJbiDsnMm8fxm%W6tP^ya`N#%yEuY@3Gj1OqB%k1gtQ#hk zqOi0jZ`;AHxrbjx%0I2Im%n{rM&~z&^lX;&j(5j22X;rjuZh%q2#(GuW5#~G=bmWg zrkDS$P35xJQIFax!&b$C!Za=KQ{R^y&w)BkXFu0IA9ptOWp4GeUPI5KbB~|jak`)S zu0MUN*6RnKkGY1e{m`}j-Lc&%eWWmnW!q5 z(EFwlp?k~^RvdVjzuGJ!F74GWk<@L?Bb4=^@STevZeA5*JPit;F4n}l*>o`Q+4*<5 z&b8lLrS5mOC;ImcZ<~}D_~zY$eAS0#P1c9%-+W66tMgwW zrT;Qyj(3CO?DUeh>oE;m47y4xc4VInKL7IBxYW$KW#taV>Q<3&O#+`c>m1WRrtfX| zCS2{r$K;jTFQdMRo;kg9a_N>2OP>45coj(Rp;KR~s`RN2ynaI1)IVupfpf(m#r9|k zJ-i!}43Q{*pN9mo7=Q1_G!OM-6SX+LJPkJ2Il#k@#|c1wHFES}6V+AW|KtqEK-FALhx;I#*U~_lRNAmd6&#bRztEZm1gp+L71n*KS(>{fc*B!L4!K zDV+zm+b18~5xi$%z_H|2GUw-Yj_jMl1^;Lx`)FN~EfSAL^!djcL|&;M**C6tLdUf+ zE+YA4$AxpUzPmnCj}U;;j~`7P+Z^%RcaH#N@9}CBIe> zI<#};J7m_x_itJu+Ba_Pl%C4*9oijwEyj=1Lk4Qxj@rL6|DfWnSE{_={;6Zx9Wqt* zkq@kT#Ji4k$b3s$mv`>jw%`*T@mu{>da~bZ&)dDOd~VXZbD!RCR=7B?RjX%uU+nv9 zHaphkkvrm_XQ@01>6z}OInZBor{#r8m*m@1uM#@s({`+@oSWY313F;c(HYovqVdI~ z?>G8FO2I$v*#23)hW)+KtP3xi?w#_J?(r%zF1?)AVihvAPt^Ex|I@z)`aexr^fh&J zf2i!lc`9tb@vqXpbBmL1Ut?Blr_RX?%6vs_?fL$-c#h&o*T*k75h|LsgBs$G4meM>e&av?IfSCwff=TNq9;1**e-p6*+t-cf zPN0zBzDR@ZjQ@Mz6OBfL{>g05!`6n+uFdKLGx{(*_Bey4Q^4zU*uNt?f4)X{pI3F%&m|c2g`${vta+C94uW8G@ zn&GQIzw*+A_DlAMCHLLyA6E6E?QxRA@(um(`<|DUB!SFzS_-%6)~ysuv(AnF4YD;m zR4-3GoX(J%ccHghRqgtnal@Uj)h{abGDpMw{&SR)<6q0?*>ZPGuAHg%z%8h= z?Spx{^|{o^wi5HJ#cXT*G8XhC@7;bz+S}PfV!_3Gy|vcLTN*=cFWqSEw z;;zCQK^HC?kH|+TJvxE{#FbNZB_79^C)%$E-%sTAb znUf^H=b>VelgI6ydd8Zek1vaS(QmrYd@;>(*M|Ge&5cd&G|wc{a%knvZ__r-GW8zE z`MCM{g!g{Vp)+4NwC50sUVgpma>}=|J|0c};Om_s8_cZS{Ov(_cy#{V!@Jk--k&ck z5^I`#WK^QPu4SC<`R)f^oxc4`y`Mgd`S>aGfPc&VcN~xt6S}6-scF6?AFZ3C! zZMxyM&xFpPz4F#}1V3Ait3OTFv&flI*1CrEK*ahcC50a+z1|1V>Mada*H+hsO(c`&-%CraUK<)@JU&^#e6e-{@DXNAK9KKI(&ZS^JvUJG(DxL@_ptW?9$xN62^6PwyH}i`!vyg`v^P zUY4hnzUpX;k=Ja>iR>#23i1nT-iuz$I9{Ak?rHa4l0`jYI-6o4nR!|*s{ca4jw2ej zHkw(@PoJ#{zWcl~Ytzb9CVkZk^Qtq@v1<03bGKyKa$>a_e_8LB+j7&OTfhDBO~VuE zjoD5Ox$intJlE+o)ZbNFM1Q|$_9EHto@rBTt*u>8-?t_hxihZX9jK5ql>EMbn?pLMe>d+Sl=}X>)j@zHrfN!MY~^USUNfG zzKh?=W!2Es#9hnw884qYHi{;it##c*esb0hzo=>2r_40WQ?{p1qi(dkOAbxwo3`bc z%#<(VoAPW3S%KTfbeUa07k%W;<(G0N9QMkN-l4XAQE__U#nw6>pR7Qz8}6<6^3Smn z7vs-~ZQWX>H*(&TIgM8x9-7F?8quA!?!S~UeQCGVHQCyi6MMu&&b{k8v_~XKt#+=t z~MFq?raV3L#NBnPf&dH(lAcj<@#s^`mw@t*6d=JD7igRGiT&Z_crku zSwC9(iCVknlT8|%8&}OH$<1!_cyXU-w;WWncU`wCQCynox-m*xXCJ|7 z;|%c!sfV77`eNV!ZMZyYz@q2LDTnKsmL~gFiRU~VRUysv+^8yk#c(odgTqEW@sH9k z4M0nKm5v}v-%=-dVClqA>~ylMT%T8oN_jG z_ztDY4|5q6t*(-pf&LV4C~B9b&bQq&=N`5o-;_>1ymRVgO0l-r7`c+2PL>Au)-5Vn zc-Be$#O$nZ=9!aXH)JU_oISki$!)?3%^IZ?WyJ=qd?|&hd_{lNn#XTmt~ZX_J9=}% zDTVB54I9>;ocnAvS=xMMw&Ws*$~E<|?Oo^MHn+AX4sf6EEWCT+J>}AH`Fq6D!_|G^ zg_mM{^K`1-jJY|g$5N5J>*&U)7W2{j%bjR>?W$&~B?T*zPZ2DSiRYHBalCV2&Qows zlIQ}~q^-JXHEY;Zzl61l6#=yK{k0 z3~lIpYdvFkR@I)?qpBX*c`juFZ$$Ezyo-`e)1$H_r&XT*e$;8pH1&wg@H|PyyGJyr zmg8?-aFSGv2_cV)%N|+4IT%EIwNz-y_Dl-Z*q$NtM z5)w!SQ(Rw+b)GXb<=eI$vCFj=Eq*Y~F#J|a<=5urnw2D)_^BgLhvyme8>OhNc(d!E z*k)eB#@n}7E#cM#cU+Xx%D%dN&nYd!ULeEFx6;MbRWC9ln7PJD4?%EM_9T@vgA$953)9tFo~*tT7H zbl`G#Ve+&2-gfRw*BlSC%|BO!Uy9vfER~G&`Klt#}nAv3R5J zgH;P8ttREnyfo{9XPxx!;c`)VkfdUi$xH{b_=@7W28*{$Q#rPw=I()Zo}$ZApWPCQ zQkx~)B~F`(T@Ii0;IF({lgk=cj;9rR)MRG(evU6V7q)W3H^Wu180w3+ve z=k=V-{gfKDJJ~E(zAVE+;y$@?nSo7U z+QeO!`;8n6Q%S|DYw!A+zlqr>I)0dF&{8iov3qGVD#%Ga`e&{#P73tXJ<|f6|F-Po z8O5}VDG8r!vIxxk*HlLu9ICVW*gbo7XoDu1lg7N$x1!I-Gt2ZZ%G|4Y);BJx9b4&U z@z%UxLHf=&Z@)Z=N;ptE!%0WcWSXjN##o!ULnUK#;vMX!B*(opn35*D(OJ{)^w^y< zm8?eTMC6UV8b|V;u9`D8CZ1q7YQqAL-R*mqrlmx?he;dFG!!+Fj!r#jwNP8WIyy1; zeBbzDXlMUZiMOSh1JYXZEs_z2pWK$sdC?p4z2S>DE&7G-i{1_omfi7n+Sfw!9d2EV z9k}RmqVcZo~^8U`MDUTYfZT6id&Dr>P&U@agl#b~O7fQNRmlct=tO{vM zc-?fz{!Xrzz3d|*q-vd~Ve{3>VBKMr!)VJiozfls4JoZ9 zy>BCpzR#I@H>KaMr}yoJh3CW4M$Nv}_kHw)TWotHl_ce;*vrnMy1aLs^Y)G}tmaBr zzM1K$LQe4x?e4Zot$VdpQFK&%>^QL*YY4~kr_CTGn0h>#Y93HwB+0#eOq?k*S>}P$ zt7GD?jmEO(zZ_LQF3ITS{+AiG*0kj8${g-)O5>(iOT&XkFuV>Dn%!dFMpKt3UJoN@ zlYN~`=RZC1WQElVpH&}^&yF+??%Ue;_BmrkLBpPrZ?BgW9g6Ead)%q!X5__)*XK_Z zKfBr{DR)42^8Cfl)4yKMyfG;`pz^ll+q!XL0iVCriY)cYTf)0=aag9tg|G*yj@<3Z z^YYY0xlH+x+<;|^*t_gbrH!tg<#jwqV}6q4nhEb`jh`4@uU1&T$+h?hX`X}gvA&qp zBY~wowQ)BaZ@-Vq?6^S>%*{pemSKnnQH|jC+enQi zyXW__m+hF*Mc$D*alH3U>tZiZ zzUWJRQ1iEMGEI&9eAhxkp_-dFBYxrJvul`i#$@ySrt-?k_Tvv%PPQKZ-6_P0e3lqv z7(btK;MAkN8_ss-e6lflw9j*rIq6A=c}_Nzy7;?Awf z?wecL`PHsVuQ@4@`xM%v^wa)SS1KlmW@er|B^3BoQ{3QKt zt4O;^X%oh-;FWI)*gZOF`-Bl^^RiRw4y<_W+IBs^&Xd)9vwHma$Ez=2nqWuPKlZuz zI9Ry$W7A zBV^%}Z?#6d0%m`%JN$XBm9k#jY4dOAYP?h?QN&xNXfsU)Ldv3stL+cPDS*Lgn{CQ^^&_<5kD2@N)X!*Jzja-aa0#f3w-L&LXnw@o|sJ`2{{V zM!dL?xACE`Y=X)+zbc7?7jIVCx^LEW-`wl3yzjc};b(^|ql~QFEoZi@awxf121zGY ziH%}ive_FoAIdtt|NR{iO52TPk>ZsdVU2LbW7;lxoK;HOx41omqle}Xq30|=psc9 z>ux+tyO0`HrxxXCL^#G^PDn_s9GiZFe0;j3im0w5LFatA$la1*n?%-^1?f60h>yQf zeAZ*(xqN!TkvE_B06&qt!KrJ_z2pH-U7d#5kvvn0vV z>&esy0b+i!Zu$kIR{NfkC4bd4Aqlo7BJ#&j%qJxV`@1m#qG#rvxV0U3$Y)sYm{a-HY+kM+0 zk!X76xt;YZ5#{^WpzJ6|;-=!eJKt7lu!ttr&UTVl-bdfd4O`xLX{CsR>288i(KWkH zySvxLkM(;&6+#=0O$%sEXA=7ksxYmmOdAANG zo$+SMQO8fS?+okv*3WCTtAuu|o!sEr^y1Ifj6SE3mXUICJAFVp>r62KD<%X`o z(=F06#(6x$%tum751eLaiuIWd^U&{oTsS@G%zAV2;Ux+NdqS0F?8On99L8B&MG-Go{sk0?XQ)`b|2a~^^Vd-_tLb~@NVPD zd#4(mIF-E3;mN`aH@&lVe6jg-c4hl8;tF!r7>~wFM@D#_+`iYLYWj?GDVksXV{5K1 zJ&<0*6_JZ@Ty7s87GIj^^OtB-?}s_xzJ5q3xhI+P{98L`peAeunLv&s-}_Rn_F3WZt`^>ssB$OQbGKD5kGOUw zT5Y~-PITCQRZf}vU+!ntU*0(5T-hoylE2udrISyuci6B>EMqCjAih|HDK=Rw!EF3a zSF>vK!ecLjJmcTevaa9kTflw4=Y;j@sJ4#WB2`(U_@*-f^P87@JpFjWBqzjpiP%Bn z!F^hvS!1s{eUf@J^HtMZ?)H@?73ActBv)nb#Hpv%j!tLFC)|I{l25odr{eVVL>tGu zqMvT5#$Gw|dPpCR>n2-d4jm)>M`#UDh>^}7&-K} zGu%qnJyjUl>#NKh`ype(+ie5iD_`_~Zk0GVv$xOKenCpUXp{IS#^_t_rzmgDmv9{u z$k$U;Thtaz_#;litN@q)5PirdO8{J`YGihGUi$zWy z*9QVcCz*{t(66y_+dx)~a_jlXtHzP_+38jW%Q7cHSL7D^4!hEDepZOzrd7{M8`l<% zW^_x5^j8Mo7$Zrn@4C6Z;q`p|8m?){l$E``HT}^p6In~W^M|*@Q=@w>J8hou^{=qh z`!TvPw=*fTZf`iW%w)N=~C3!2K4WB<|l+;S8)3fY1j$AUQZ25X_ z8S|+6k(n|#DO@h}g~ZCgJ8fS}`H}N^8e(j~{P{XU&`J(^jt85X`J&xtO1i zoi@#y8@TM8g>751v)HKS7O~R~1)w>)A~nuqv`pqq87aT=;Y8N3=vB-^GsLb*ZRf4L zGF)NevEY^GMmDj^jE=98Hz+VN5pR|v9X%-*-lf4A;Ow7zOKD;9xz}~}ofVDuW|lYA z`4md&*cZ7?YI$U`y8Xcv)ivCraIKXM!?sH^t2aqbI+-&`bj8wDOV)p9j=f{K#PPsX z13eSjS4XBQ%DysOoVM!nxW!WDYNq2l^_ZEPR2Ro6T^uedt7Bu=I@4P1Wd^o#n)1C8Ly#}Rww*~sESgcR1zmoj&+sFq8jtuOaU6S`syS*nV zlAU&MKsj<9$G@SYwCCQs+7Eu$Xq{Om%O1u)N%AGwS6#hzzA49Z+^R*_MH@>ei6I~)y9kEjNlmNH&+RWuyK+aSZDQAp>9%ny@~lSMO$iHq z3mNl+*&MS0wT6e^P1a;yf@D;h_odmtS-10A^PH-}rg`_9TRuFDT(HegadlK(lIx1i z+~EwVTX!BsYNc7Xt}l^W;l2OfI6|Z4OxG>@csEJ$y}RsYS`u#0fpQmhzgaiaa>|NO zgP7VkVV`%8_u4W}3CdmEecCdHduS59%1<$+LP@3b!#mNYIWwyl(sC_hzUWRVve|7n zzh9oW$!C`%p;&Ex#rPXmw{|)1S!!W^O|tK|J5KkPHM)L!-(Tj%vK6z= zm~@{V?{!0}k;7(g4z=n|8Q;8;NtG+Iq~0eZZ1yxe$m?7%6PZ^?AC49dMa+bx3<@;e)8DG;`5;~qDjsOjHieJtl# zZmul~=@E}sGpE)+etv)dmAZ?U`(90a zAenQbXrU@?W8BMzS0$fgHuPI7#qC_@V|$-EUsTqEGNtu#{EGMo5jE}_ZBr`iXSb_L zx1E=n@l+u(i&D33qt;H_#??E6ulDS`KC7W($JmKd=cczxwoGr|s_L|mo!!b6QBi3|N*FUk6 z()iLNz0ORkvqAe+NXnsvJLj8r#w`wzICk}Y2()TP%lqstogY4Xe`f3myJr~mYX6nq zu&IluTyB_iH9+$4#HkDY&m8P9%Tc`Y*=4?y#H*q>^PP)BzPQXWtvp>araSb^j92U4 zOg-rM#5bX1hv=<65Bn?Xawb1npkJeNp=z?tw(oNusfmAXzw)FlDD<8I`MIQ&jwp5=UgT72J8hy_gqCb!3p)a8HtJa3FW>u$U4Pnpukw>?cB}Pv zWEs>2%S1@Kmqt7qW8AnaS1F%!;GLYoImOi%CA@a+E*SY~#ka@AJNb4G;vPIS3YBh8 z|8houu0PRdugvUEm$rpzCOkQDhqm`gh>iTt7rdJXZkp9IFO!$WCCshL_PMe{BRgZk zv`lWKOhCuolEsfN9t+--?UR1y#4g^bnGu?AcEp)plgmt_nv_m<3pcNO`;cTxwJp%p zje1-n_atNU&D86jMceddr_4&v@Y#{0{a$yL|D>%tMOkh4b^8qOxo;}4>|ea>L&inj zo0qO0)0pyIXU5)e`IzF759Zzr-&xEGjcvMYUP?|O8a0@j?m4=*dYd9h<)4w_>QB;> zS-0faJl8w>CWcmw z`B&Gx(p=U$OR?9vDRXFh?}o6r({?g~oLRb!x+b<@*{bbwkKrSA@!RQdX>Zk16uJBF zjjn6kBs;uiqix1|=6nsh+H#L*n#=UD-)5Yy-u&U5^^6zOPsfd4@O;UYQ&&IhT{%_u z^6eG3IrXU@l{XfS;KUx8DyQ_V>w06r(!KMqwSF5F7XN73mADV`dC#_d2>kqX+qco- zjO&e^)>j$hHrRYGk5@i8CfaY-Rq2<}UuWx>~dBY_2c~@1W`c0D32Zr(97(0CHdjvJFJzibdA5>d(;*C;b zTX@PRJlogaz?c4uMR>g)jYu+5G6^v!{Wy(1-!{4`XZy6u#WOm+Jc95Nx z#n`Xxw{OD!QGL42y3!v_TIM&kR2+(Y)P1_yv8#N{lC(*=T;_-6C1tFj@b64+P(Vk= zC#9%?)sIFQx=erP*WeL!ulveAwezBzk6z0X=S%_uNqiMCiu3F%;R5)TI= zimtVKA1=H)p#D|1p>RTdPzOEeV_kY7WZV|9j<{>=(txWydix_dsvzg| z>^58L(tMZ0Di0KyPj|Gu^GT}qX`R6mE52&Ec%t=&O<{F6>he+_Nv_=#alpc>V3bt# z?T~FEp!?qByYIgD7*-n|Fl>8#gFOFYdGra}nWX_A^@1)%?#TCl4rQ&|&)x6#ytTD{ z&DWY`7QM?tMwRx0fuQ)CfxM?OeYHIc68Z(94M~}{~&XFnf*6|o&mGv^wTsQyQG&)B=`@PPNIv=aT z{Ug3*y*#mblDPe+7;_8mnkD8^&$h=A2wTbsBmVj%NBJZo9_u1^>Co9}uZD;3ytlzr z@v4(>&;_#OxnIyd*hZ#d1uU>rd|*a;O<@>W>R*s zVPLrB<2xq?sar#9k>CPS7R3C!T{8ugnV|=|{j;3y@9L+&>qphF`cV%jc7P+#gX3$) z4)AdOQ9(-oM+K<@jY=UXP)HO48DcOAEGG1SRgp4T0*0%gz;UFu&Z<9$;TnIA@>S z*a)9X)nen5+OIAZyUZwM5Pheorq3jPoVkDiUg+ZG%l+=<>$ z{Wa7xv)Oh1_MC#GPfz>K_(t5YzudcQgUQ)Fx%U!BH)VU2)4D`eXJ}ryeiNEhwl8w6 z|Ez;->CjYk6xbOS-=D`Z(^!;)Rw|&NO|W%4(E~E^hudx4X>$UF4#~ z?B<1ESql#`jaG=Ad_Mo+g+1rrguGge$_O@U`utUa#-Q;7fo*&mPCCDFP}Tg$nKHjpQu%+X;-E#9 zl)sBA84L!2MxzrL5QKcEgFdqt;Bmm; zC`=Xs0zbq5C=?3vj|!9@`5btRf4mM{7e(F!UME;&h}z*#MTW2e2^1Orqq({k859`8 zk^=>XaA`GMm&#`paNBj*jUn#4!M_^@dpJN1C#^oWKBQHWv(vc6T>qyLdRF734s2ESe(3pwU<)8jVb5 zk_k*IS&>O6Q^^bp1TiTzTcWD3FNeonBT7cz4m!ZY&Fqh?ZUg3PJyd+#-Pt zBn!WkjFwk|@5ot`;5#BP@Ew5&z9V-FzGI(2LJK*`By>132^$YQVPrhy7)vlNdUhrF zj*W+$c?4g_#`}R7gADEudp|ZFgpCIw<)45B5qzL>9~%$C@Ilyk5QYyzML>qI@gQtG zP>PS>qhRAvu=@p?gkHzSqhRAvu<;DA;&ZY&DYL5Y&-@w9s?VXfsMz&#$#aPF|hF%*m%Htk#T_&L%(C=F|qN0 zS|it)*!?oG@tD|nOl&+RHXaijkBN;3*aLY#3mcDxjmN_9v9R$_lOvEZ+aP1cLB;uB=1H$YBLhVBo@CS+q zvkwTf4+ygl2(u3evk!=ZJ`V`94+ygl2(=FagxLp#*$0H#2ZY%NgxUu<2Mv=SW*-n{ z9}s3A5N00`W*^{O3=}739}s3A5NaR5!(iiK_5oq`0b%w5(NKMcF#CWo`+zX}fH3=j zF#CWo`+zX}fH3=jF#CW|`yfD=eL$FfK$v|%n0-K~eTYJseL$Ff06s_W2eS{@yCHgk z*$2eH?iaHU2(u3ewGRTIef0I1eL$FfK$v}ixD@`oD1_MugxLp#*$0H#2ZY%NgxLr1 zrrH6VKtJH+%)kZ=M_;ZV?5mtZiRxxxk5Z6_Guu>Kji^iDfz27p%0#gFi3eO6mw=er zKlUQQYJ$1TKj8N;t;LiU(^*VqF^$C(7SmTuT`_INloiueOjR)^#}pOSQ&CJ!F)hWE z6w^^mMKKM<6cp1>Og%B}#FP`$O;j}rm}a7i3HFR2&lgimOe-;^#B>r$K8$Ck7|3HuUh(8D)b(KFn#}8sg^zVn;K)o&& zRAD{?_x+;2@1Hjef99XN;U6(3MzN@+;lCTiBmU!V(6FBWcDSNMfjD23_`g6O2mp!n z;ou&g)98D+aMuvfCxg0N)It1+uhFLjUZ~Cq1XBsxKRzD`8UFe4$n4;M+v*HFe7%Tj zoB$Vg0N9`k{i8&Tnz27wG1g+`((f>eX*k4%QDGn}RXKEc9N7yc*f&g1zl zBNBsygB97%Y{ftx+fR}05=e9gGZ`+MOAKZ^Q78;L(TKxibM0NhmQ^m1&4w>2cyJvR z{ajq-0OWt7=C|2jL(OC;f;l3KrAUV}B#Kl5lT1;h{u^>GfX?<+4EFHy@PnsXiktv9 zBK#Ye+Xe94?f;VX3*fi~IQsZ__`2D9JNmi>f_d9ta{QQK%f%;Y8jO_+{125*`**wm zt|!OcSJBzo(OEGdnCGtG=;-VY?!bk;j7cJqh^{<8q9d1x&LfG=_Cf3bF8sh8x!wxS zfdTMzQ<3Kwpy(FHe+#e?;JO7GENB9iNd^yq29f{$CSakX09}E&*^0hw9ubJy6DS{- z=*ISOB%*49{0M(h0D~%+sw01ce>PQD;08D=^4!9RE}URrZ;qo2-`yb5Fs{2{&{^Pa zXk?Zm3r;!w``sWn_wL9v(dKN@`g7BNHy12#l5h!?>90H^h@ z%7Ymqb`ShW@VQMC3H<56^ysiOnZKYYu<5yiV8qeQgNH;adTd8u1w#<5sG6B8Xc?QD z>kt))jsec@KpBWWpaTNj?c;xcQ$Vi_LTt#i`S(?w!lD3cB*TgTtdRnTj11`C1&Z7T z99}7Kd5*p=jsY&n&HVU<2&)N~sKMcx@d+E5*8e_Ckn4e;I06$UVEANIp~3X$$B570 zky#`Va9|jLgQf`+qm{9#hJY;b`7%HPC`bkse)PhVqlSf{3BM@uIW;OBQe=XJE9`Zt zutx()R{DR}N)Yj|iI%Dc7MlDp@wqbCcmOmMCNLg~5Mi1d^JB#4%P0^HXeEk~0926uO z1lx2Wg0wI+_wZqJ`DBSCS%06*0Rf>X0i6TY6q+Ol$B1*n1^rJC!IC)g#DRGKHPHAs zzlbo9nW2V9kg292zclf=9V(p!b0sWAz?H~j7aCG67^$H#znvp_^xuE(7+oSrDIk0T zRwOi}gQ_P!=YugO3X=+QXF`NIxH$27ADA|Qy(2i`m`KPt`Lz?D`$2dUg^2Q|(4P1p zYKhPNV7!TdB!fs^=xRCmL&xWbVD3baqTDGoX(ILmfbu_ee6ENF*b}HGj1I6T3;vlx z5)yl=8t7^pY4TGNvQqc^ltcxKawtqHlLC88;lkvTCbEwB`ygT7{2@&$c=!Oa&|s?T zsG9Q6E0A?g956vW0xC-il_^wN!XQn&1Np-bWFhwVabmoQC?{Bp7p^!p4GaXtiO&ro z%!z^olSyH!raAyQm^ksdA&fo|q*&M~H0?CwaRdwq(Gbj{Ap*TRN?oH2#z{I?2aIXqfSulDGa18 z9I(s++Jy#l2AifM^%TF46^lDjtRVL;B&9=m&2i5J?Q!euM{7*N7h^z6lXF zTZeTK>@%RjsSu%o1mr$gUI8h{`+e*A!J05qEX^rQq=J(-q+;;*asHr91SbheE(r}M z9Ci*Cg&a zpDf{$eBl8E%hLiF@i`$f3xa1Ah#0|k4p>2jCPp)33sZIe1xuuw`}g&d3}zT$PKn?o zQ&>WM+&qqeOGk>$e;*~xmk2}#^5lgkNfTB6WCBtKj|(6LNDtHo!FevY`a?MJrH-+I zz#>0VqK^+Ej0Kv|Ffp!@430Uv5}d%su6$0j%*{q1(gbH2DnEC zLYDs-C^9iu=Xi5`jf{;{4f$;c+2-*3FwwLj1B93$d;^Y$2`a;cP=dl`!^J*CRRc5r z1%G58#_!{V^M)8o;CUdSqBJqpwA3}W;LmU(TSagnMWQzpD;m8CQ=-O32CMlz5VDu$ z_i+L~!a#x=4^UDp#K*3osikYAYpx3niXSUJPlT=pGvJ~gY&Dp{_|>ws{}0i5y2vrH5%*hvTzfG`x`C$yRdW&*Oso1z0`g(v}B5h5fd z_zA177N21u+thwvu4s-9#YzSR?ZEj9U9J{J2p+QiK2D%Zs-j0D_udd7get>rot1py1y^!Jq4;e?hJgiy!TOabE~p zDljjw(`6{oQpx;i@s&BCP7Fm$hHKe|1T6*PLyI>0_9E)6)0eSHAKQC3Bvs^ zt4xS=QAai;(j5dYURMUMh@x=G@Pg={f{QQLhw&}U3nbQ&zE7G3zQX!aaq6K)9aVB<6z~O-^g%wmB1Jm z1`E=-grNWnx}FMv#plg1zD2+yeEX;1;+vOYd<(;cBV76)lP*4QhVd;77p|IM3<+E^ zlYjkzjI;{}(;i4M{{uEq%-VEkj7%P%f7z(IhZ>#_- z;PYfC-@+IXz6DLyg&*P$h8Ew%3{5H^Xwjs?AH$2!o1vVG;zhCwLxfj=7I3z#K+_5c zUNo)n$ME9wX(;O=c+n{LkKx7V)KJ<*@uIDhhQ!_=3O_sGY-NG+E`k@$EDVi&2f>SP zk_Lzu0gJYL8WP!(1*YprgYDmU!6@@00>!8oR4@p=Vqp-t_c$%UrK8{p;_cE(MfS5GPK`ldw6=_qHYZZjMjzxF~I-Dtzm${ZsnnpFhx+p_~vYAA_oNw zw|n@5fd7kILjj|?oS{((iohHmXG0Ctv0;FbY|bA8{9ha!3K-3w4-H_Z0IeaX(%_&q zaL@$8X-EeBkAcOPiu}RBXe~6t!Jr~~2%Lt1C&t-t;|B-BfH4mKQ-JZMBjKq9Mq{9x zG~6+QIwXLp0--N*a?raTo(562=&KXe2Da56BsGxEUA$j4|+^0*uec z!3>PK39zCGFTf6s4l@NxB9U|beqX`}10(WaeG%cJ8Hhgx7N2i}*%wUZVUSqmG?fnO zVT7KxrV6S9zS$cL6?El60K@DHQrJTQ7@P^mpSJ!_eMK<982b)^guz+y{DA*McM@h2M+~cvLIl5J`Pn0IwD(CCFtOof`6s8e_Js`nht4N>zWIg8orquI%@G;@P&!H4>wg(Cl_EF&33k~ET zUDP2Ge$ND+GV;99%#840ni})75JbY4QiRhn7)H=s8R)0bM9Jfr@@XYR!k0zFm=cjB z8MK83XCDg zriroHRrGL18Wbs*%P=Q7#y}_NC#&<2!}mY z)%d%vLS%f72ErWA7=a={e-Nk;fFko>8+HIk(?8JBo8QZm@p&aQ8-i*om<&$Y%W&-Dn7r2@hBozGRC9A66>HM#oxCBl_wpUzX?M}kw-t6C?R|<35!8tXy9Nu zz^AY|{af1km+~_{f=9}MmRY!{9t%JbkT8jYxvod@c!H;X}9xG^~d^bO;fr zk%6(mF>Mfp&nx{PQ241+DDYCG@PO*_8~K0g$AJnHKE+s=!qgMMh|dxIAR<_fXhK$a za#T|l=%o!>8{o1ZIG#g{2Ps4l9z<}~gJ3v^x8nw~4+6o4op4D9=X(f;iq!ZI#epDv zjt3(mB;>$|NN6B^1AP>@JjVbYzi#4ewSmQRC{{p5AV?A#R*S)pe}^deoDfDw2vm%Y zga#FeRY0Klybu=5AtQ1 zQuxFi0hstEMlgFK7}0eXp+PhQ$CV2}#OH@#h%hej6`pN^LPX&Zr-k67#_54jc87ue zV0QrZKZE=+V-tjlZw`dO*$@$qrww{a>y_k-~|3KXn32v3~)nyUpc z;`BWrYY31b7}2&v!b7R5t`62T1c2gmJqTgKWQ20M(4M%ap+HdrgtOZPX6G<8uw@Fa zu%d&a^8ZYk2p6dftOru@IUX!>LqMWM`oaTgW}+%^ydgxz=YL=;$4mz4rz=chA~*%2 zH=HdkkVRlboanhn!V{FfI~AV`!U8u0CbkMJG}Sco=QnYj%`0FNM-YN9ASMzT zKyWyyAVhq=2TQ)e(2%N6fEb)@BODXAGBy8 z6NL#*fB?x%p~2*Fj4TY*1kSjFaCWG`XcK{op8g;_sG8QA>K1}&8Jz7YFycgz!dW;l z#SofM2aS$^+2W}~LU}6yga%Vp&Dc~RD5m3cM=*iHff0feUA_=5P65A(v$+IJpI{*!0Se~}L1ZU1 zpynRVUi=XV9iKzOrj`gyYz0FYFrB5~WS)T?Vk#g{ ze2KUp>0Ys)Ps9&`?uDcM#7+$LE=_SQNoZMPpH+ zVKoKuovGm3AkH=sSSX4hrGPpG5RwQDsfn?fxrwonz_gQr&p%gpnzV6J$q(iPKWmR998aK=8TaPu3wg(P&h7 z;sl4Qo2v>2&0t3eo+$`SqF~Mm!-Lz?BD^oGa&C1~%|XZsXWs{mND-iD?-B-}Q{k|^ zhOwpq-!t$zC5%H+m}GEdweUb{Y6(u|aW;9t_!B{iWu3rr3gc|w z0EeFlMx^RTco5YzwRHtC;`2f%XCl}DXM%G@L2o$W5D`d*=n9nmF!4DclrT}0KL}G; zI90V(2azT|4}>x%h7(~-VWG6r(G_&(I2$v-TLw{#aL;b05TCiJrU`J9`~ea;H4l%K zqtPY`6y{5C{;|-MQ^QyQB)&Nj%$FEMj4y@t#0RT3#o2lRy}?N@pe}LUB($`Z5PNb z0W%j`;gq4OslH(RhO?&v{KUaT4?>SLW`e}xFIB$>IQlrcdGHiD0d7P+wxh3tp$Ab* z)y!N$3*=+@H(pW%jx<+yu0zIzC6!1Syo&?E|NHVZq{lFU%z;+cS5hx^< zC>RR+4-}5jC^UjA0lfwau;9Cb|0DQf*TBzY5dQvrjlqOVWPiE_yfmz~KV2g+m>|OV z`5GCb!yCJPdL5Mo?uqXjcpX6Y^XteAD!ib|_g)CzEArDd@Hz&Fj()zzV!;gc(={rK z3McM=x&{Od@8SFT8t_c~*QhK8iyt4A#e!#EKfRYmBEw5peAj><7Pv-(myY;e2OA3i zHJ0Fe$z)(ue6Is~z<<9qaO{Tw7SN|&@O4bO!0RBAfUIZ`nZ>UgG>F0yd@l`7mH&Ki zpe=yF{X$H*Q^(J*qmbaWD!ywFh-mn)Q3ReZ&~5nO1-|z($O8B%OnCP6^XsT2xK@Mj z8nShg?-~W}p2l}=kk6$86Bl?LlPMqr8c7f{5VXMk(kO6n@bl+_BnZDw(r65L%L?D? zn1b)6lLU2$j%;`N`Mq=s>_z#m(FC6nSk4r{LT3uTmobQ5F(9}U`{&O9Oe*lX3_!I4 zuVYXIo-cz%5|AGga5MjVnGi+bc`&Jiyq5-Nsei`DWWeVf@?8U*%zupqxL)8I1Rs9& z^LtrTlE7!MXmHMi?{y5gypiu3_z=Epz<0pOtDjy+Cjny>xCTn!1g_EG1Tx=y1?3F9 z2iza#=hu-1pD!K6r~H`dWY9oB;Jq{f9-@;6`CQ=p_;n39RRJ!B)miX$Q~}$fLo@*{ zp@VKp{LhjOu>_tuodSF?|9wy(c;@!ATqt0UD{u|Cdx2|A0UZJ+D4+-budp-cjU$Gk zaPME?#>Kx#$)y_H)Y9P^@j7?*!V*8x8qaNMpUAm-@-k(Z(DgSVH@ob-h8kmnS7) z9rMCoPMffUDTmAQOo@?gWN^=fFPM(5Xx!=OZdEacSkY`(mJQEbi`zuxk+psOxTdTWuXe(iB zrZepvbHwb{X+#>UZ#~fF@GTP@g1jm;n#a~gc~vYE{j_4V5v!Om64u))_E#ASdBNJ? zdYi#lP4FIb=>@Sw*=Uu^_xkG{*g`IY9IvMWvsw>eRuNmoP8$t*-(;rHy;3*!a>!}& zoacsIVM-v`r)>pej3q9yDN=%d0c<8~rq5V~51P0T_Cu4w{7gV6KUXma{SgQWU+)$>4-TNjqfUyRy ztH=)i=88F4S6(VGzZddaFB81miy^jq3Gg@9bvamXt>Ca;J8aU$&#_*aU)H_XKn(L% z;2$pRljDIm#shCk=vmK7Jshj#ll%3;J?a%)(semJ$Ld3E$aB;|T!cT{u3Q25*+&Cj z^C9w=pCL*N+Zc{`ugnduA{F1Z+~M z30NRDIb70#*yVbka~BiEbTQ}H9Got;K>Q0)m+T8t0cqZR6}HE`2tgZgU|_M)@}zZ9!L{teNT>|4*VCk z_fN0-B{}C`r|S>bcgL;RsXg|SmBZoTL217EI39$|4}L!mI=A?LmusE4oL-;qKR-Wx z`T6_X_3iO=YDXDMi~Dh3hklIOkM&XYlOYFg>s01^jmP }, binary{ = < > U< } \ \ ASSEMBLER conditionnal usage with IF UNTIL WHILE S< S>= U< U>= 0= 0<> 0>= -\ ASSEMBLER conditionnal usage with ?JMP ?GOTO S< S>= U< U>= 0= 0<> 0< +\ ASSEMBLER conditionnal usage with ?GOTO S< S>= U< U>= 0= 0<> 0< -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {ANS_COMP} [IF] DEFINED! - -[ELSE] +[UNDEFINED] {ANS_COMP} [IF] PWR_STATE @@ -51,26 +47,159 @@ MARKER {ANS_COMP} \ TO name Run-time: ( x -- ) \ Assign the value x to name. -: VALUE -CREATE , -DOES> +[UNDEFINED] VARIABLE [IF] +\ https://forth-standard.org/standard/core/VARIABLE +\ VARIABLE -- define a Forth VARIABLE + +: VARIABLE +DEFER HI2LO MOV @RSP+,IP -BIT #UF10,SR -0= IF - MOV #@,PC -THEN -BIC #UF10,SR -MOV #!,PC +MOV #DOVAR,-4(W) \ CFA = DOVAR +MOV @IP+,PC ENDCODE -\ https://forth-standard.org/standard/core/TO -\ TO name Run-time: ( x -- ) -\ Assign the value x to named VALUE. -CODE TO -BIS #UF10,SR +[THEN] + +[UNDEFINED] CONSTANT [IF] +\ https://forth-standard.org/standard/core/CONSTANT +\ CONSTANT n -- define a Forth CONSTANT +: CONSTANT +DEFER +HI2LO +MOV @RSP+,IP +MOV #DOCON,-4(W) \ CFA = DOCON +MOV TOS,-2(W) \ PFA = n +MOV @PSP+,TOS MOV @IP+,PC ENDCODE +[THEN] + +\ https://forth-standard.org/standard/core/STATE +\ STATE -- a-addr holds compiler state +STATEADR CONSTANT STATE + +[UNDEFINED] BASE [IF] +\ https://forth-standard.org/standard/core/BASE +\ BASE -- a-addr holds conversion radix +BASEADR CONSTANT BASE +[THEN] + +[UNDEFINED] >IN [IF] +\ https://forth-standard.org/standard/core/toIN +\ C >IN -- a-addr holds offset in input stream +TOIN CONSTANT >IN +[THEN] + +[UNDEFINED] PAD [IF] +\ https://forth-standard.org/standard/core/PAD +\ PAD -- addr +PAD_ORG CONSTANT PAD +[THEN] + +[UNDEFINED] BL [IF] +\ https://forth-standard.org/standard/core/BL +\ BL -- char an ASCII space +#32 CONSTANT BL +[THEN] + +[UNDEFINED] SPACE [IF] +\ https://forth-standard.org/standard/core/SPACE +\ SPACE -- output a space +: SPACE +BL EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +\ https://forth-standard.org/standard/core/SPACES +\ SPACES n -- output n spaces +CODE SPACES +CMP #0,TOS +0<> IF + PUSH IP + BEGIN + LO2HI + BL EMIT + HI2LO + SUB #2,IP + SUB #1,TOS + 0= UNTIL + MOV @RSP+,IP +THEN +MOV @PSP+,TOS \ -- drop n +NEXT +ENDCODE +[THEN] + + +\ \ https://forth-standard.org/standard/core/VALUE +\ : VALUE \ x "name" -- +\ CREATE , +\ DOES> +\ HI2LO +\ MOV @RSP+,IP +\ BIT #UF10,SR \ see TO +\ 0= IF +\ MOV #@,PC +\ THEN +\ BIC #UF10,SR +\ MOV #!,PC +\ ENDCODE + +\ \ https://forth-standard.org/standard/core/TO +\ \ TO name Run-time: ( x -- ) +\ \ Assign the value x to named VALUE. +\ CODE TO +\ BIS #UF10,SR +\ MOV @IP+,PC +\ ENDCODE + +\ https://forth-standard.org/standard/core/StoD +\ S>D n -- d single -> double prec. +: S>D + DUP 0< +; + +[UNDEFINED] NIP [IF] +\ https://forth-standard.org/standard/core/NIP +\ NIP x1 x2 -- x2 Drop the first item below the top of stack +CODE NIP +ADD #2,PSP +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] C@ [IF] +\ https://forth-standard.org/standard/core/CFetch +\ C@ c-addr -- char fetch char from memory +CODE C@ +MOV.B @TOS,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] C! [IF] +\ https://forth-standard.org/standard/core/CStore +\ C! char c-addr -- store char in memory +CODE C! +MOV.B @PSP+,0(TOS) \ 4 +ADD #1,PSP \ 1 +MOV @PSP+,TOS \ 2 +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] C, [IF] +\ https://forth-standard.org/standard/core/CComma +\ C, char -- append char +CODE C, +MOV &DP,W +MOV.B TOS,0(W) +ADD #1,&DP +MOV @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] [UNDEFINED] AND [IF] \ https://forth-standard.org/standard/core/AND @@ -99,6 +228,15 @@ MOV @IP+,PC ENDCODE [THEN] +[UNDEFINED] + [IF] +\ https://forth-standard.org/standard/core/Plus +\ + n1/u1 n2/u2 -- n3/u3 add n1+n2 +CODE + +ADD @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] + \ https://forth-standard.org/standard/core/INVERT \ INVERT x1 -- x2 bitwise inversion CODE INVERT @@ -106,6 +244,26 @@ XOR #-1,TOS MOV @IP+,PC ENDCODE +\ https://forth-standard.org/standard/core/less +\ < n1 n2 -- flag test n1 IF \ 2 +BW1 MOV #-1,TOS \ 1 flag Z = 0 + THEN + MOV @IP+,PC +ENDCODE + +\ https://forth-standard.org/standard/core/more +\ > n1 n2 -- flag test n1>n2, signed +CODE > + SUB @PSP+,TOS \ 2 TOS=n2-n1 + S< ?GOTO BW1 \ 2 --> +5 +FW1 AND #0,TOS \ 1 flag Z = 1 + MOV @IP+,PC +ENDCODE + \ https://forth-standard.org/standard/core/LSHIFT \ LSHIFT x1 u -- x2 logical L shift u places CODE LSHIFT @@ -170,7 +328,9 @@ ENDCODE \ -------------------- \ ARITHMETIC OPERATORS \ -------------------- -$1A04 C@ $EF > [IF] ; test tag value MSP430FR413x subfamily without hardware_MPY +TLV_ORG 4 + @ $81F3 U< +$81EF TLV_ORG 4 + @ U< += [IF] ; MSP430FR413x subfamily without hardware_MPY \ https://forth-standard.org/standard/core/MTimes \ M* n1 n2 -- dlo dhi signed 16*16->32 multiply @@ -202,7 +362,7 @@ THEN MOV @IP+,PC ENDCODE -[ELSE] ; MSP430FRxxxx with hardware_MPY +[ELSE] ; MSP430FRxxxx with hardware_MPY \ https://forth-standard.org/standard/core/UMTimes \ UM* u1 u2 -- udlo udhi unsigned 16x16->32 mult. @@ -223,6 +383,15 @@ ENDCODE [THEN] +\ https://forth-standard.org/standard/core/UMDivMOD +\ UM/MOD udlo|udhi u1 -- r q unsigned 32/16->r16 q16 +CODE UM/MOD + PUSH #DROP \ + MOV #<#,X \ X = addr of <# + ADD #8,X \ X = addr of MUSMOD + MOV X,PC \ execute MUSMOD then RET to DROP +ENDCODE + \ https://forth-standard.org/standard/core/SMDivREM \ SM/REM DVDlo DVDhi DIVlo -- r3 q4 symmetric signed div CODE SM/REM @@ -328,11 +497,39 @@ M* DROP >R M* R> FM/MOD NIP ; -\ https://forth-standard.org/standard/core/StoD -\ S>D n -- d single -> double prec. -: S>D - DUP 0< -; +\ ------------------------------------------------------------------------------- +\ STACK OPERATIONS +\ ------------------------------------------------------------------------------- + +[UNDEFINED] OVER [IF] +\ https://forth-standard.org/standard/core/OVER +\ OVER x1 x2 -- x1 x2 x1 +CODE OVER +MOV TOS,-2(PSP) \ 3 -- x1 (x2) x2 +MOV @PSP,TOS \ 2 -- x1 (x2) x1 +SUB #2,PSP \ 1 -- x1 x2 x1 +MOV @IP+,PC +ENDCODE +[THEN] + +\ https://forth-standard.org/standard/core/ROT +\ ROT x1 x2 x3 -- x2 x3 x1 +CODE ROT +MOV @PSP,W \ 2 fetch x2 +MOV TOS,0(PSP) \ 3 store x3 +MOV 2(PSP),TOS \ 3 fetch x1 +MOV W,2(PSP) \ 3 store x2 +MOV @IP+,PC +ENDCODE + +\ https://forth-standard.org/standard/core/RFetch +\ R@ -- x R: x -- x fetch from return stack +CODE R@ +SUB #2,PSP +MOV TOS,0(PSP) +MOV @RSP,TOS +MOV @IP+,PC +ENDCODE \ ---------------------------------------------------------------------- \ DOUBLE OPERATORS @@ -343,42 +540,32 @@ M* DROP \ https://forth-standard.org/standard/core/TwoFetch \ 2@ a-addr -- x1 x2 fetch 2 cells ; the lower address will appear on top of stack CODE 2@ -SUB #2,PSP -MOV 2(TOS),0(PSP) -MOV @TOS,TOS -MOV @IP+,PC +BW1 SUB #2,PSP + MOV 2(TOS),0(PSP) + MOV @TOS,TOS + MOV @IP+,PC ENDCODE \ https://forth-standard.org/standard/core/TwoStore \ 2! x1 x2 a-addr -- store 2 cells ; the top of stack is stored at the lower adr CODE 2! -MOV @PSP+,0(TOS) -MOV @PSP+,2(TOS) -MOV @PSP+,TOS -MOV @IP+,PC +BW2 MOV @PSP+,0(TOS) + MOV @PSP+,2(TOS) + MOV @PSP+,TOS + MOV @IP+,PC ENDCODE -\ https://forth-standard.org/standard/double/TwoVALUE -: 2VALUE -CREATE -, , \ compile Shi then Flo -DOES> -HI2LO -MOV @RSP+,IP -BIT #UF10,SR -0= ?JMP 2@ -BIC #UF10,SR -JMP 2! -ENDCODE - -\ https://forth-standard.org/standard/core/TwoDUP -\ 2DUP x1 x2 -- x1 x2 x1 x2 dup top 2 cells -CODE 2DUP -SUB #4,PSP \ -- x1 x x x2 -MOV TOS,2(PSP) \ -- x1 x2 x x2 -MOV 4(PSP),0(PSP) \ -- x1 x2 x1 x2 -MOV @IP+,PC -ENDCODE +\ \ https://forth-standard.org/standard/double/TwoVALUE +\ : 2VALUE \ x1 x2 "name" -- +\ CREATE , , \ compile Shi then Flo +\ DOES> +\ HI2LO +\ MOV @RSP+,IP +\ BIT #UF10,SR \see TO +\ 0= ?GOTO BW1 +\ BIC #UF10,SR +\ GOTO BW2 +\ ENDCODE \ https://forth-standard.org/standard/core/TwoDROP \ 2DROP x1 x2 -- drop 2 cells @@ -464,6 +651,7 @@ ENDCODE \ --------------------------- \ BLOCK AND STRING COMPLEMENT \ --------------------------- + \ https://forth-standard.org/standard/core/CHAR \ CHAR -- char parse ASCII character : CHAR @@ -473,7 +661,7 @@ ENDCODE \ https://forth-standard.org/standard/core/BracketCHAR \ [CHAR] -- compile character literal : [CHAR] - CHAR lit lit , , + CHAR POSTPONE LITERAL ; IMMEDIATE \ https://forth-standard.org/standard/core/PlusStore @@ -504,6 +692,7 @@ ENDCODE \ -------------------- \ INTERPRET COMPLEMENT \ -------------------- + \ https://forth-standard.org/standard/core/HEX CODE HEX MOV #$10,&BASE @@ -532,6 +721,48 @@ COUNT TYPE BL CAPS ! \ CAPS ON ; IMMEDIATE +\ https://forth-standard.org/standard/core/J +\ J -- n R: 4*sys -- 4*sys +\ C get the second loop index +CODE J +SUB #2,PSP +MOV TOS,0(PSP) +MOV 4(RSP),TOS +SUB 6(RSP),TOS +MOV @IP+,PC +ENDCODE + +\ https://forth-standard.org/standard/core/UNLOOP +\ UNLOOP -- R: sys1 sys2 -- drop loop parms +CODE UNLOOP +ADD #4,RSP +MOV @IP+,PC +ENDCODE + +\ https://forth-standard.org/standard/core/LEAVE +\ LEAVE -- L: -- adrs +CODE LEAVE +MOV &DP,W \ compile three words +MOV #UNLOOP,0(W) \ [HERE] = UNLOOP +MOV #.,2(W) \ DOT + 8 = BRAN +ADD #8,2(W) \ [HERE+2] = BRAN +ADD #6,&DP \ [HERE+4] = After LOOP adr +ADD #2,&LEAVEPTR +ADD #4,W +MOV &LEAVEPTR,X +MOV W,0(X) \ leave HERE+4 on LEAVEPTR stack +MOV @IP+,PC +ENDCODE IMMEDIATE + +\ https://forth-standard.org/standard/core/RECURSE +\ C RECURSE -- recurse to current definition (compile current definition) +CODE RECURSE +MOV &DP,X +MOV &LAST_CFA,0(X) +ADD #2,&DP +MOV @IP+,PC +ENDCODE IMMEDIATE + \ https://forth-standard.org/standard/core/SOURCE \ SOURCE -- adr u of current input buffer CODE SOURCE @@ -542,16 +773,6 @@ MOV &SOURCE_ORG,0(PSP) MOV @IP+,PC ENDCODE -\ https://forth-standard.org/standard/core/toIN -\ C >IN -- a-addr holds offset in input stream -TOIN CONSTANT >IN - -[UNDEFINED] PAD [IF] -\ https://forth-standard.org/standard/core/PAD -\ PAD -- addr -PAD_ORG CONSTANT PAD -[THEN] - RST_HERE [THEN] diff --git a/MSP430-FORTH/CHNGBAUD.4th b/MSP430-FORTH/CHNGBAUD.4th deleted file mode 100644 index e9a122f..0000000 --- a/MSP430-FORTH/CHNGBAUD.4th +++ /dev/null @@ -1,211 +0,0 @@ - -; ------------ -; CHNGBAUD.4th -; ------------ - -PWR_HERE - -: BAD_MHz - 1 ABORT" only for 1,4,8,16,24 MHz MCLK!" -; - -: MCLK. -0 1000 UM/MOD . -; - -: BAD_SPEED -SPACE 27 EMIT ." [7m" -." with MCLK = " MCLK. 1 ABORT" MHz? don't dream! " -; - -: <> = 0= ; - -: CHNGBAUD -PWR_STATE -$1806 @ >R -." target MCLK = " R@ MCLK. ." MHz" CR -." choose your baudrate:" CR -." 0 --> 6 MBds" CR -." 1 --> 5 MBds" CR -." 2 --> 4 MBds" CR -." 3 --> 2457600 Bds" CR -." 4 --> 921600 Bds" CR -." 5 --> 460800 Bds" CR -." 6 --> 230400 Bds" CR -." 7 --> 115200 Bds" CR -." other --> abort" CR -." your choice: " -KEY - -#48 - ?DUP 0= -IF ." 6 MBds" - R@ #24000 < - IF R@ BAD_SPEED - THEN - R@ #24000 <> - IF BAD_MHz - THEN - $4 - $0 -ELSE 1 - ?DUP 0= - IF ." 5 MBds" - R@ #16000 < - IF R@ BAD_SPEED - THEN - R@ #16000 = - IF $3 - $2100 - ELSE R@ #24000 <> - IF BAD_MHz - THEN - $4 - $EE00 - THEN - ELSE 1 - ?DUP 0= - IF ." 4 MBds" - R@ #16000 < - IF R@ BAD_SPEED - THEN - R@ #16000 = - IF $4 - $0 - ELSE R@ #24000 <> - IF BAD_MHz - THEN - $6 - $0 - THEN - ELSE 1 - ?DUP 0= - IF ." 2457600 Bds" - R@ #8000 < - IF R@ BAD_SPEED - THEN - R@ #8000 = - IF $3 - $4400 - ELSE R@ #16000 = - IF $6 - $AA00 - ELSE R@ #24000 <> - IF BAD_MHz - THEN - $9 - $DD00 - THEN - THEN - ELSE 1 - ?DUP 0= - IF ." 921600 Bds" - R@ #4000 < - IF R@ BAD_SPEED - THEN - R@ #4000 = - IF 4 - $4900 - ELSE - R@ #8000 = - IF 8 - $D600 - ELSE R@ #16000 = - IF $11 - $4A00 - ELSE R@ #24000 <> - IF BAD_MHz - THEN - $1 - $00A1 - THEN - THEN - THEN - ELSE 1 - ?DUP 0= - IF ." 460800 Bds" - R@ #4000 < - IF R@ BAD_SPEED - THEN - R@ #4000 = - IF 8 - $D600 - ELSE - R@ #8000 = - IF 17 - $4A00 - ELSE R@ #16000 = - IF 2 - $BB21 - ELSE R@ #24000 <> - IF BAD_MHz - THEN - 6 - $0001 - THEN - THEN - THEN - ELSE 1 - ?DUP 0= - IF ." 230400 Bds" - R@ #1000 < - IF R@ BAD_SPEED - THEN - R@ #1000 = - IF 4 - $4900 - ELSE - R@ #4000 = - IF 17 - $4A00 - ELSE - R@ #8000 = - IF 2 - $BB21 - ELSE R@ #16000 = - IF 4 - $5551 - ELSE R@ #24000 <> - IF BAD_MHz - THEN - 3 - $0241 - THEN - THEN - THEN - THEN - ELSE 1 - ?DUP 0= - IF ." 115200 Bds" - R@ #1000 = - IF 8 - $D600 - ELSE - R@ #4000 = - IF 2 - $BB21 - ELSE - R@ #8000 = - IF 4 - $5551 - ELSE R@ #16000 = - IF 8 - $F7A1 - ELSE R@ #24000 <> - IF BAD_MHz - THEN - $0D - $4901 - THEN - THEN - THEN - THEN - ELSE - ." abort" CR ABORT - THEN - THEN - THEN - THEN - THEN - THEN - THEN -THEN -$1804 ! -$1802 ! -R> DROP -CR ." Change baudrate in Teraterm, save its setup then reset target." -; -ECHO -CHNGBAUD diff --git a/MSP430-FORTH/CHNGBAUD.f b/MSP430-FORTH/CHNGBAUD.f index 8abe6b2..f00d2d5 100644 --- a/MSP430-FORTH/CHNGBAUD.f +++ b/MSP430-FORTH/CHNGBAUD.f @@ -14,6 +14,77 @@ PWR_STATE +[UNDEFINED] CONSTANT [IF] +\ https://forth-standard.org/standard/core/CONSTANT +\ CONSTANT n -- define a Forth CONSTANT +: CONSTANT +DEFER +HI2LO +MOV @RSP+,IP +MOV #DOCON,-4(W) \ CFA = DOCON +MOV TOS,-2(W) \ PFA = n +MOV @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] BL [IF] +\ https://forth-standard.org/standard/core/BL +\ BL -- char an ASCII space +#32 CONSTANT BL +[THEN] + +[UNDEFINED] SPACE [IF] +\ https://forth-standard.org/standard/core/SPACE +\ SPACE -- output a space +: SPACE +BL EMIT ; +[THEN] + +[UNDEFINED] R@ [IF] +\ https://forth-standard.org/standard/core/RFetch +\ R@ -- x R: x -- x fetch from return stack +CODE R@ +SUB #2,PSP +MOV TOS,0(PSP) +MOV @RSP,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] < [IF] +\ https://forth-standard.org/standard/core/less +\ < n1 n2 -- flag test n1 IF \ +BW1 MOV #-1,TOS \ 1 flag Z = 0 + THEN + MOV @IP+,PC +ENDCODE + +\ https://forth-standard.org/standard/core/more +\ > n1 n2 -- flag test n1>n2, signed +CODE > + SUB @PSP+,TOS \ 2 TOS=n2-n1 + S< ?GOTO BW1 \ 2 --> +5 +FW1 AND #0,TOS \ 1 flag Z = 1 + MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] UM/MOD [IF] +\ https://forth-standard.org/standard/core/UMDivMOD +\ UM/MOD udlo|udhi u1 -- r q unsigned 32/16->r16 q16 +CODE UM/MOD + PUSH #DROP \ + MOV #<#,X \ X = addr of <# + ADD #8,X \ X = addr of MUSMOD + MOV X,PC \ execute MUSMOD then RET to DROP +ENDCODE +[THEN] + : MCLK. 0 1000 UM/MOD . ; diff --git a/MSP430-FORTH/CORDIC.f b/MSP430-FORTH/CORDIC.f index d6c9a4d..afc6661 100644 --- a/MSP430-FORTH/CORDIC.f +++ b/MSP430-FORTH/CORDIC.f @@ -28,18 +28,26 @@ \ ASSEMBLER conditionnal usage with IF UNTIL WHILE S< S>= U< U>= 0= 0<> 0>= \ ASSEMBLER conditionnal usage with ?JMP ?GOTO S< S>= U< U>= 0= 0<> 0< -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {CORDIC} [IF] DEFINED! - -[ELSE] PWR_STATE +[UNDEFINED] {CORDIC} [IF] + MARKER {CORDIC} [UNDEFINED] {FIXPOINT} [IF] \ define words to display angle as Q15.16 number. +[UNDEFINED] DABS [IF] \ +\ https://forth-standard.org/standard/double/DABS +\ DABS d1 -- |d1| absolute value +CODE DABS +MOV #1-,X +ADD #4,X +MOV X,PC +ENDCODE +[THEN] + + \ https://forth-standard.org/standard/core/HOLDS \ Adds the string represented by addr u to the pictured numeric output string \ compilation use: <# S" string" HOLDS #> @@ -47,7 +55,7 @@ MARKER {CORDIC} \ (2 supplementary bytes are room for sign - and decimal point) \ C HOLDS addr u -- CODE HOLDS - MOV @PSP+,X \ 2 +BW1 MOV @PSP+,X \ 2 ADD TOS,X \ 1 src MOV &HP,Y \ 3 dst BEGIN SUB #1,X \ 1 src-1 @@ -67,7 +75,7 @@ CODE F#S MOV TOS,T \ T = limit MOV #0,S \ S = count BEGIN MOV @PSP,&MPY \ Load 1st operand - MOV &BASE,&OP2 \ Load 2nd operand + MOV &BASEADR,&OP2 \ Load 2nd operand MOV &RES0,0(PSP) \ -- Qhi RESlo x low result on stack MOV &RES1,TOS \ -- Qhi RESlo REShi high result in TOS CMP #10,TOS \ digit to char @@ -80,13 +88,13 @@ BEGIN MOV @PSP,&MPY \ Load 1st operand MOV T,TOS \ -- Qhi 0 limit SUB #2,PSP \ -- Qhi 0 x len MOV #HOLDS_ORG,0(PSP) \ -- Qhi 0 addr len - JMP HOLDS + GOTO BW1 \ JMP HOLDS ENDCODE CODE F. \ display a Q15.16 number with 4/5/16 digits after comma MOV TOS,S \ S = sign MOV #4,T \ T = 4 preset 4 digits for base 16 and by default -MOV &BASE,W +MOV &BASEADR,W CMP ##10,W 0= IF \ if base 10 ADD #1,T \ T = 5 set 5 digits @@ -103,7 +111,7 @@ LO2HI $2C HOLD \ $2C = char ',' #S \ -- 0 0 R> SIGN #> \ -- addr len R-- IP - TYPE SPACE \ -- + TYPE $20 EMIT \ -- ; [THEN] \ end of [UNDEFINED] {FIXPOINT} @@ -184,7 +192,7 @@ MOV #0,Y \ Y = Yi RRA S \ (Xi >> 1) RRA T \ (Yi >> 1) ADD #1,W - FW1 CMP IP,W \ W = i ? +FW1 CMP IP,W \ W = i ? 0= UNTIL \ loop back if W < i ADD W,W \ W = 2i = T_SCALE displacement CMP #0,TOS \ TOS = z @@ -283,7 +291,7 @@ MOV #0,TOS \ init z=0 RRA S \ (X >> i) RRA T \ (Y >> i) ADD #1,W \ - FW1 CMP IP,W \ W = i ? +FW1 CMP IP,W \ W = i ? 0= UNTIL \ 6~ loop ADD W,W \ W = 2i = T_SCALE displacement CMP #0,Y \ Y sign ? @@ -296,11 +304,11 @@ MOV #0,TOS \ init z=0 ADD S,Y \ Yi+1 = Yi + ( Xi >> i) SUB T_ARCTAN(W),TOS THEN - CMP #0,Y \ if Y = 0 quit loop - 0<> WHILE \ if Y = 0 goto THEN - CMP #14,IP - 0= UNTIL - THEN + CMP #0,Y \ + 0<> WHILE \ if Y = 0 quit loop ---+ + CMP #14,IP \ | + 0= UNTIL \ | + THEN \ <---------------------+ \ multiply x by CORDIC gain MOV X,&MPY \ 3 Load 1st operand MOV T_SCALE(W),&OP2 \ 3 CORDIC Gain * 65536 @@ -332,9 +340,21 @@ RST_HERE [THEN] -: 2000CORDIC -1000 0 DO - POL2REC REC2POL \ 1000 loops +[UNDEFINED] ROT [IF] \ +\ https://forth-standard.org/standard/core/ROT +\ ROT x1 x2 x3 -- x2 x3 x1 +CODE ROT +MOV @PSP,W \ 2 fetch x2 +MOV TOS,0(PSP) \ 3 store x3 +MOV 2(PSP),TOS \ 3 fetch x1 +MOV W,2(PSP) \ 3 store x2 +MOV @IP+,PC +ENDCODE +[THEN] + +: 1000CORDIC +500 0 DO + POL2REC REC2POL \ 2 CORDIC op. * 500 loops = 1000 CORDIC LOOP ; @@ -365,10 +385,10 @@ ECHO 1000 -1000 REC2POL F. . ; phase module --> 16000 8000 REC2POL F. . ; phase module --> 16000 -8000 REC2POL F. . ; phase module --> -16000 0 REC2POL F. . ; phase module --> -0 16000 REC2POL F. . ; phase module --> -\16384 -8192 REC2POL F. . ; --> abort -\0 0 REC2POL F. . ; --> abort +16000 0 REC2POL F. . ; phase module --> +0 16000 REC2POL F. . ; phase module --> +\ 16384 -8192 REC2POL F. . ; --> abort +\ 0 0 REC2POL F. . ; --> abort 10000 89,0 POL2REC REC2POL ROT . F. @@ -382,15 +402,15 @@ ECHO 10000 7,125 POL2REC REC2POL ROT . F. 10000 1,0 POL2REC REC2POL ROT . F. -10000 89,0 2000CORDIC ROT . F. -10000 75,0 2000CORDIC ROT . F. -10000 60,0 2000CORDIC ROT . F. -10000 45,0 2000CORDIC ROT . F. -10000 30,0 2000CORDIC ROT . F. -10000 26,565 2000CORDIC ROT . F. -10000 15,0 2000CORDIC ROT . F. -10000 14,036 2000CORDIC ROT . F. -10000 7,125 2000CORDIC ROT . F. -10000 1,0 2000CORDIC ROT . F. +10000 89,0 1000CORDIC ROT . F. +10000 75,0 1000CORDIC ROT . F. +10000 60,0 1000CORDIC ROT . F. +10000 45,0 1000CORDIC ROT . F. +10000 30,0 1000CORDIC ROT . F. +10000 26,565 1000CORDIC ROT . F. +10000 15,0 1000CORDIC ROT . F. +10000 14,036 1000CORDIC ROT . F. +10000 7,125 1000CORDIC ROT . F. +10000 1,0 1000CORDIC ROT . F. diff --git a/MSP430-FORTH/CORETEST.4TH b/MSP430-FORTH/CORETEST.4TH index abe9c36..e58005e 100644 --- a/MSP430-FORTH/CORETEST.4TH +++ b/MSP430-FORTH/CORETEST.4TH @@ -3,21 +3,21 @@ PWR_STATE : ESC #27 EMIT ; -: ANSCOMPNOTFOUND +: PAGEUP ECHO 41 \ number of terminal lines -1 0 DO CR LOOP \ don't erase any line of source ESC ." [1J" \ erase up (41 empty lines) ESC ." [H" \ cursor home +; + +: ANSCOMPNOTFOUND +PAGEUP 1 ABORT" {ANS_COMP} word set not found!" ; : CORETESTSUCCESS -ECHO -41 \ number of terminal lines -1 -0 DO CR LOOP \ don't erase any line of source -ESC ." [1J" \ erase up (41 empty lines) -ESC ." [H" \ cursor home +PAGEUP 1 ABORT" CORE tests success!" ; @@ -192,10 +192,10 @@ T{ MSB 1 RSHIFT 2* -> MSB }T \ ------------------------------------------------------------------------ TESTING COMPARISONS: 0= = 0< < > U< MIN MAX -0 INVERT CONSTANT MAX-UINT -0 INVERT 1 RSHIFT CONSTANT MAX-INT +0 INVERT CONSTANT MAX-UINT +0 INVERT 1 RSHIFT CONSTANT MAX-INT 0 INVERT 1 RSHIFT INVERT CONSTANT MIN-INT -0 INVERT 1 RSHIFT CONSTANT MID-UINT +0 INVERT 1 RSHIFT CONSTANT MID-UINT 0 INVERT 1 RSHIFT INVERT CONSTANT MID-UINT+1 0S CONSTANT diff --git a/MSP430-FORTH/FF_SPECS.4th b/MSP430-FORTH/FF_SPECS.4th deleted file mode 100644 index 1a25266..0000000 --- a/MSP430-FORTH/FF_SPECS.4th +++ /dev/null @@ -1,117 +0,0 @@ - -; ------------------ -; FF_SPECS.4th -; ------------------ - -; display all FastForth compilation options - - -WIPE - -0 CONSTANT CASE IMMEDIATE - -: OF -1+ ->R -POSTPONE OVER POSTPONE = -POSTPONE IF -POSTPONE DROP -R> -; IMMEDIATE - -: ENDOF ->R -POSTPONE ELSE -R> -; IMMEDIATE - -: ENDCASE -POSTPONE DROP -0 DO - POSTPONE THEN -LOOP -; IMMEDIATE - -: BS 8 EMIT ; - -: ESC #27 EMIT ; - -: ADDONS -ESC ." [7m" -." KERNEL OPTIONS:" -ESC ." [0m" -$1812 @ - - DUP 0< IF CR ." LF XTAL" THEN -DUP + DUP 0< IF CR ." TERMINAL5WIRES" THEN -DUP + DUP 0< IF CR ." TERMINAL4WIRES" THEN -DUP + DUP 0< IF CR ." TERMINAL3WIRES" THEN -DUP + DUP 0< IF CR ." HALFDUPLEX_TERMINAL" THEN -DUP + DUP 0< IF CR ." PROMPT" THEN -DUP + DUP 0< IF CR ." BOOTLOADER" THEN -DUP + DUP 0< IF CR ." SD_CARD_READ_WRITE" THEN -DUP + DUP 0< IF CR ." SD_CARD_LOADER" THEN -DUP + DUP 0< IF CR ." FIXPOINT_INPUT" THEN -DUP + DUP 0< IF CR ." DOUBLE_INPUT" THEN -DUP + DUP 0< IF CR ." VOCABULARY_SET" THEN -DUP + DUP 0< IF CR ." NONAME" THEN -DUP + DUP 0< IF CR ." EXTENDED_ASM" THEN -DUP + DUP 0< IF CR ." ASSEMBLER" THEN -DUP + DUP 0< IF CR ." CONDCOMP" THEN - -0< IF - CR ESC ." [7m" - ." OTHER OPTIONS:" - ESC ." [0m" - [DEFINED] {ANS_COMP} [IF] CR ." ANS_COMPLEMENT" [THEN] - [DEFINED] {TOOLS} [IF] CR ." UTILITY" [THEN] - [DEFINED] {FIXPOINT} [IF] CR ." FIXPOINT" [THEN] - [DEFINED] {SD_TOOLS} [IF] CR ." SD_TOOLS" [THEN] -THEN -; - -: specs -PWR_STATE -HERE -ECHO - -42 -0 DO CR LOOP - -ESC ." [1J" -ESC ." [H" -ESC ." [7m" - -$1A04 @ - -CR ." FastForth V" $1810 @ U. ." for MSP430FR" -CASE - $830C OF ." 2355," $8000 ENDOF - $8240 OF ." 2433," $C400 ENDOF - $81F0 OF ." 4133," $C400 ENDOF - $8103 OF ." 5739," $C200 ENDOF - $8102 OF ." 5738," $C200 ENDOF - $8169 OF ." 5969," $4400 ENDOF - $8160 OF ." 5948," $4400 ENDOF - $82A1 OF ." 5994," $4000 ENDOF - $81A8 OF ." 6989," $4400 ENDOF - - ABORT" xxxx <-- unrecognized device!" -ENDCASE - -SPACE $1806 @ 0 1000 UM/MOD U. -?DUP IF BS ." ," U. -THEN ." MHz, " - -$1800 @ U. BS ." -Entry Vocabularies, " - -- U. ." bytes, " - -$FF80 HERE - U. ." bytes free" CR - -ESC ." [0m" - -CR ADDONS CR -; - -ECHO specs diff --git a/MSP430-FORTH/FF_SPECS.f b/MSP430-FORTH/FF_SPECS.f index 739b7f9..436aee7 100644 --- a/MSP430-FORTH/FF_SPECS.f +++ b/MSP430-FORTH/FF_SPECS.f @@ -14,9 +14,20 @@ \ then select your TARGET when asked. \ -WIPE \ remove all downloaded word set +RST_STATE -0 CONSTANT CASE IMMEDIATE \ -- #of-1 +[UNDEFINED] OVER [IF] +\ https://forth-standard.org/standard/core/OVER +\ OVER x1 x2 -- x1 x2 x1 +CODE OVER +MOV TOS,-2(PSP) \ 3 -- x1 (x2) x2 +MOV @PSP,TOS \ 2 -- x1 (x2) x1 +SUB #2,PSP \ 1 -- x1 x2 x1 +MOV @IP+,PC +ENDCODE +[THEN] + +: CASE 0 ; IMMEDIATE \ -- #of-1 : OF \ #of-1 -- orgOF #of 1+ \ count OFs @@ -40,14 +51,15 @@ POSTPONE DROP LOOP ; IMMEDIATE -: BS 8 EMIT ; \ 8 EMIT = BackSpace EMIT - : ESC #27 EMIT ; -[UNDEFINED] PAD [IF] -\ https://forth-standard.org/standard/core/PAD -\ PAD -- addr -PAD_ORG CONSTANT PAD +[UNDEFINED] + [IF] +\ https://forth-standard.org/standard/core/Plus +\ + n1/u1 n2/u2 -- n3/u3 add n1+n2 +CODE + +ADD @PSP+,TOS +MOV @IP+,PC +ENDCODE [THEN] [UNDEFINED] AND [IF] @@ -60,22 +72,75 @@ ENDCODE [THEN] +[UNDEFINED] ROT [IF] +\ https://forth-standard.org/standard/core/ROT +\ ROT x1 x2 x3 -- x2 x3 x1 +CODE ROT +MOV @PSP,W \ 2 fetch x2 +MOV TOS,0(PSP) \ 3 store x3 +MOV 2(PSP),TOS \ 3 fetch x1 +MOV W,2(PSP) \ 3 store x2 +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] C@ [IF] +\ https://forth-standard.org/standard/core/CFetch +\ C@ c-addr -- char fetch char from memory +CODE C@ +MOV.B @TOS,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] SPACES [IF] +\ https://forth-standard.org/standard/core/SPACES +\ SPACES n -- output n spaces +CODE SPACES +CMP #0,TOS +0<> IF + PUSH IP + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,IP + SUB #1,TOS + 0= UNTIL + MOV @RSP+,IP +THEN +MOV @PSP+,TOS \ -- drop n +NEXT +ENDCODE +[THEN] + +[UNDEFINED] UM/MOD [IF] +\ https://forth-standard.org/standard/core/UMDivMOD +\ UM/MOD udlo|udhi u1 -- r q unsigned 32/16->r16 q16 +CODE UM/MOD + PUSH #DROP \ + MOV #<#,X \ X = addr of <# + ADD #8,X \ X = addr of MUSMOD + MOV X,PC \ execute MUSMOD then RET to DROP +ENDCODE +[THEN] + [UNDEFINED] WORDS [IF] \ https://forth-standard.org/standard/tools/WORDS \ list all words of vocabulary first in CONTEXT. : WORDS \ -- CR -CONTEXT @ PAD \ -- VOC_BODY PAD MOVE all threads of VOC_BODY in PAD +CONTEXT @ PAD_ORG \ -- VOC_BODY PAD MOVE all threads of VOC_BODY in PAD_ORG INI_THREAD @ DUP + \ -- VOC_BODY PAD THREAD*2 -MOVE \ -- vocabumary entries are copied in PAD +MOVE \ -- vocabumary entries are copied in PAD_ORG BEGIN \ -- 0 DUP \ -- ptr=0 MAX=0 INI_THREAD @ DUP + 0 \ -- ptr=0 MAX=0 THREADS*2 0 DO \ -- ptr MAX I = PAD_ptr = thread*2 - DUP I PAD + @ \ -- ptr MAX MAX NFAx + DUP I PAD_ORG + @ \ -- ptr MAX MAX NFAx U< IF \ -- ptr MAX if MAX U< NFAx DROP DROP \ -- drop ptr and MAX - I DUP PAD + @ \ -- new_ptr new_MAX + I DUP PAD_ORG + @ \ -- new_ptr new_MAX THEN \ 2 +LOOP \ -- ptr MAX ?DUP \ -- ptr MAX MAX | -- ptr 0 (all threads in PAD = 0) @@ -83,7 +148,7 @@ WHILE \ -- ptr MAX replace it by it DUP \ -- ptr MAX MAX 2 - @ \ -- ptr MAX [LFA] ROT \ -- MAX [LFA] ptr - PAD + \ -- MAX [LFA] thread + PAD_ORG + \ -- MAX [LFA] thread ! \ -- MAX [LFA]=new_NFA updates PAD+ptr DUP \ -- MAX MAX COUNT $7F AND \ -- MAX addr count (with suppr. of immediate bit) @@ -95,48 +160,49 @@ DROP \ ptr -- ; \ all threads in PAD are filled with 0 [THEN] -: ADDONS +: ADDONS \ see "compute value of FORTHADDON" in file \inc\ThingsInFirst.inc ESC ." [7m" \ escape sequence to set reverse video ." KERNEL OPTIONS:" \ in reverse video ESC ." [0m" \ escape sequence to clear reverse video KERNEL_ADDON @ \ see ThingsInFirst.inc - DUP 0< IF CR ." LF XTAL" THEN -DUP + DUP 0< IF CR ." TERMINAL5WIRES" THEN \ 'DUP +' = one shift left -DUP + DUP 0< IF CR ." TERMINAL4WIRES" THEN -DUP + DUP 0< IF CR ." TERMINAL3WIRES" THEN -DUP + DUP 0< IF CR ." HALFDUPLEX_TERMINAL" THEN -DUP + DUP 0< IF CR ." PROMPT" THEN + DUP 0< IF CR ." 32.768kHz XTAL" THEN +DUP + DUP 0< IF DUP + CR ." HARDWARE (RTS/CTS) TERMINAL" \ 'DUP +' = one shift left + ELSE DUP + DUP 0< IF CR ." HARDWARE (RTS) TERMINAL" THEN + THEN +DUP + DUP 0< IF CR ." XON/XOFF TERMINAL" THEN +DUP + DUP 0< IF CR ." HALF-DUPLEX TERMINAL" THEN +DUP + DUP 0< IF CR ." ASM DATA ACCESS BEYOND $FFFF" THEN DUP + DUP 0< IF CR ." BOOTLOADER" THEN -DUP + DUP 0< IF CR ." SD_CARD_READ_WRITE" THEN -DUP + DUP 0< IF CR ." SD_CARD_LOADER" THEN -DUP + DUP 0< IF CR ." FIXPOINT_INPUT" THEN -DUP + DUP 0< IF CR ." DOUBLE_INPUT" THEN -DUP + DUP 0< IF CR ." VOCABULARY_SET" THEN +DUP + DUP 0< IF CR ." SD_CARD READ/WRITE" THEN +DUP + DUP 0< IF CR ." SD_CARD LOADER" THEN +DUP + DUP 0< IF CR ." FIXPOINT INPUT" THEN +DUP + DUP 0< IF CR ." DOUBLE INPUT" THEN +DUP + DUP 0< IF CR ." VOCABULARY SET" THEN DUP + DUP 0< IF CR ." NONAME" THEN -DUP + DUP 0< IF CR ." EXTENDED_ASM" THEN +DUP + DUP 0< IF CR ." EXTENDED ASSEMBLER" THEN DUP + DUP 0< IF CR ." ASSEMBLER" THEN -DUP + DUP 0< IF CR ." CONDCOMP" THEN +DUP + DUP 0< IF CR ." CONDITIONNAL COMPILATION" THEN 0< IF \ true if CONDCOMP add-on CR ESC ." [7m" \ escape sequence to set reverse video ." OTHER OPTIONS:" \ in reverse video ESC ." [0m" \ escape sequence to clear reverse video - [DEFINED] {ANS_COMP} [IF] CR ." ANS_COMPLEMENT" [THEN] - [DEFINED] {TOOLS} [IF] CR ." UTILITY" [THEN] - [DEFINED] {FIXPOINT} [IF] CR ." FIXPOINT" [THEN] - [DEFINED] {SD_TOOLS} [IF] CR ." SD_TOOLS" [THEN] + CR ." none" + ESC ." [G" \ cursor row 0 + [DEFINED] {ANS_COMP} [IF] ." ANS_COMPLEMENT" CR [THEN] + [DEFINED] {TOOLS} [IF] ." UTILITY" CR [THEN] + [DEFINED] {FIXPOINT} [IF] ." FIXPOINT" CR [THEN] + [DEFINED] {SD_TOOLS} [IF] ." SD_TOOLS" CR [THEN] CR CR [DEFINED] VOCABULARY [IF] - CR ESC ." [7m" \ escape sequence to set reverse video + ESC ." [7m" \ escape sequence to set reverse video ." ASSEMBLER word set" ESC ." [0m" \ escape sequence to clear reverse video - ALSO ASSEMBLER WORDS CR PREVIOUS + ALSO ASSEMBLER WORDS CR PREVIOUS [THEN] - CR ESC ." [7m" \ escape sequence to set reverse video - ." FORTH word set" - ESC ." [0m" \ escape sequence to clear reverse video - WORDS +ESC ." [7m" ." FORTH word set" ESC ." [0m" +WORDS \ Forth words set THEN ; @@ -145,19 +211,22 @@ PWR_STATE \ before free bytes computing, remove all created words HERE \ to compute bytes ECHO -41 \ number of terminal lines +41 \ number of terminal lines -1 0 DO CR LOOP \ don't erase any line of source -ESC ." [1J" \ erase up (42 empty lines) +ESC ." [1J" \ erase up (41 empty lines) ESC ." [H" \ cursor home ESC ." [7m" \ escape sequence to set reverse video DEVICEID @ \ value kept in TLV area -CR ." FastForth V" VERSION @ U. ." for MSP430FR" +CR ." FastForth V" VERSION @ \ FastForth version, +0 <# # 8 HOLD # 46 HOLD #S #> TYPE $20 EMIT +." for MSP430FR" \ target, CASE \ device ID of MSP430FRxxxx MAIN org $830C OF ." 2355," $8000 ENDOF + $8328 OF ." 2476," $8000 ENDOF $8240 OF ." 2433," $C400 ENDOF $81F0 OF ." 4133," $C400 ENDOF $8103 OF ." 5739," $C200 ENDOF @@ -169,21 +238,28 @@ CASE \ DevID OF ." xxxx," $MAIN ENDOF \ <-- add here your device ABORT" xxxx <-- unrecognized device!" -ENDCASE +ENDCASE $20 EMIT + +['] ['] DUP @ $1287 = IF ." DTC=1," DROP \ DTC model number, + ELSE 2 + @ $1287 = + IF ." DTC=2," + ELSE ." DTC=3," + THEN + THEN $20 EMIT -SPACE FREQ_KHZ @ 0 1000 UM/MOD U. -?DUP IF BS ." ," U. \ if remainder -THEN ." MHz, " \ MCLK +INI_THREAD @ U. #8 EMIT ." -Entry word sets, " \ number of Entry word sets, -INI_THREAD @ U. BS ." -Entry Vocabularies, " +FREQ_KHZ @ 0 1000 UM/MOD U. \ frequency, +?DUP IF #8 EMIT ." ," U. \ if remainder +THEN ." MHz, " \ MCLK -- U. ." bytes, " \ HERE - MAIN_ORG +- U. ." bytes" \ HERE - MAIN_ORG \ number of bytes code, -SIGNATURES HERE - U. ." bytes free" CR +\ ESC ." [0m" -ESC ." [0m" \ escape sequence to clear reverse video +CR CR ADDONS \ addons -CR ADDONS +CR WARM ; ECHO specs \ here FastForth types a (volatile) message with some informations diff --git a/MSP430-FORTH/FixPoint.f b/MSP430-FORTH/FixPoint.f index 18eb6d0..e54ad04 100644 --- a/MSP430-FORTH/FixPoint.f +++ b/MSP430-FORTH/FixPoint.f @@ -32,17 +32,20 @@ \ ASSEMBLER conditionnal usage with ?JMP ?GOTO S< S>= U< U>= 0= 0<> 0< \ -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {FIXPOINT} [IF] DEFINED! - -[ELSE] - PWR_STATE -MARKER {FIXPOINT} +[UNDEFINED] {FIXPOINT} [IF] +MARKER {FIXPOINT} +[UNDEFINED] + [IF] +\ https://forth-standard.org/standard/core/Plus +\ + n1/u1 n2/u2 -- n3/u3 add n1+n2 +CODE + +ADD @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] [UNDEFINED] HOLDS [IF] \ https://forth-standard.org/standard/core/HOLDS @@ -52,7 +55,7 @@ MARKER {FIXPOINT} \ (2 supplementary bytes are room for sign - and decimal point) \ C HOLDS addr u -- CODE HOLDS - MOV @PSP+,X \ 2 +BW3 MOV @PSP+,X \ 2 ADD TOS,X \ 1 src MOV &HP,Y \ 3 dst BEGIN SUB #1,X \ 1 src-1 @@ -65,6 +68,16 @@ REPEAT MOV Y,&HP \ 3 ENDCODE [THEN] +[UNDEFINED] DABS [IF] +\ https://forth-standard.org/standard/double/DABS +\ DABS d1 -- |d1| absolute value +CODE DABS +MOV #1-,X \ 2 +ADD #4,X \ 1 +MOV X,PC \ 3 +ENDCODE +[THEN] + CODE F+ \ add Q15.16 numbers ADD @PSP+,2(PSP) \ -- sumlo d1hi d2hi ADDC @PSP+,TOS \ -- sumlo sumhi @@ -78,7 +91,9 @@ CODE F- \ substract Q15.16 numbers MOV @IP+,PC ENDCODE -$1A04 C@ $EF > [IF] ; test tag value MSP430FR413x subfamily without hardware_MPY +TLV_ORG 4 + @ $81F3 U< +$81EF TLV_ORG 4 + @ U< += [IF] ; MSP430FR413x subfamily without hardware_MPY CODE F/ \ Q15.16 / Q15.16 --> Q15.16 result PUSHM #4,rDOCOL @@ -155,7 +170,7 @@ CODE F#S PUSHM #2,TOS \ save TOS,IP MOV #0,S \ -- Qhi Qlo x BEGIN PUSH S \ R-- limit IP count - MOV &BASE,TOS \ -- Qhi Qlo base + MOV &BASEADR,TOS \ -- Qhi Qlo base LO2HI UM* \ u1 u2 -- RESlo REShi HI2LO \ -- Qhi RESlo digit @@ -172,7 +187,7 @@ U>= UNTIL MOV #0,0(PSP) \ -- Qhi 0 len SUB #2,PSP \ -- Qhi 0 x len MOV #HOLDS_ORG,0(PSP) \ -- Qhi 0 addr len - JMP HOLDS + GOTO BW3 \ JMP HOLDS ENDCODE [THEN] @@ -231,7 +246,7 @@ THEN GOTO BW1 \ goto end of F/ to process sign of result ENDCODE -[ELSE] \ hardware multiplier +[ELSE] ; else if hardware multiplier CODE F/ \ Q15.16 / Q15.16 --> Q15.16 result \ TOS = DVRhi @@ -306,7 +321,7 @@ CODE F#S MOV TOS,T \ T = limit MOV #0,S \ S = count BEGIN MOV @PSP,&MPY \ Load 1st operand - MOV &BASE,&OP2 \ Load 2nd operand + MOV &BASEADR,&OP2 \ Load 2nd operand MOV &RES0,0(PSP) \ -- Qhi RESlo x low result on stack MOV &RES1,TOS \ -- Qhi RESlo REShi high result in TOS CMP #10,TOS \ digit to char @@ -319,7 +334,7 @@ BEGIN MOV @PSP,&MPY \ Load 1st operand MOV T,TOS \ -- Qhi 0 limit SUB #2,PSP \ -- Qhi 0 x len MOV #HOLDS_ORG,0(PSP) \ -- Qhi 0 addr len - JMP HOLDS + GOTO BW3 \ JMP HOLDS ENDCODE [THEN] @@ -336,13 +351,13 @@ CODE F* \ signed s15.16 multiplication --> s15.16 result MOV @IP+,PC ENDCODE -[THEN] \ hardware multiplier +[THEN] \ end of hardware multiplier [UNDEFINED] F. [IF] CODE F. \ display a Q15.16 number with 4/5/16 digits after comma MOV TOS,S \ S = sign MOV #4,T \ T = 4 preset 4 digits for base 16 and by default -MOV &BASE,W +MOV &BASEADR,W CMP ##10,W 0= IF \ if base 10 ADD #1,T \ T = 5 set 5 digits @@ -359,7 +374,7 @@ LO2HI $2C HOLD \ $2C = char ',' #S \ -- 0 0 R> SIGN #> \ -- addr len R-- IP - TYPE SPACE \ -- + TYPE $20 EMIT \ -- ; CODE S>F \ convert a signed number to a Q15.16 (signed) number @@ -369,29 +384,24 @@ CODE S>F \ convert a signed number to a Q15.16 (signed) number ENDCODE [THEN] -[UNDEFINED] 2@ [IF] +RST_HERE -\ https://forth-standard.org/standard/core/TwoFetch -\ 2@ a-addr -- x1 x2 fetch 2 cells ; the lower address will appear on top of stack -CODE 2@ -SUB #2,PSP -MOV 2(TOS),0(PSP) -MOV @TOS,TOS -NEXT -ENDCODE -[THEN] \ of [UNDEFINED] 2@ +[THEN] \ of [UNDEFINED] {FIXPOINT} [UNDEFINED] 2CONSTANT [IF] \ https://forth-standard.org/standard/double/TwoCONSTANT : 2CONSTANT \ udlo/dlo/Qlo udhi/dhi/Qhi -- to create double or Q15.16 CONSTANT CREATE , , \ compile Qhi then Qlo -DOES> 2@ \ execution part addr -- Qhi Qlo +DOES> \ execution part addr -- Qhi Qlo +HI2LO +SUB #2,PSP +MOV 2(TOS),0(PSP) +MOV @TOS,TOS +MOV @RSP+,IP +NEXT +ENDCODE ; -[THEN] \ of [UNDEFINED] 2CONSTANT - -RST_HERE - -[THEN] \ of [UNDEFINED] {FIXPOINT} +[THEN] ECHO @@ -403,11 +413,11 @@ ECHO 3,14159 2CONSTANT PI PI -1,0 F* 2CONSTANT -PI -$10 BASE ! PI F. +$10 BASEADR ! PI F. -PI F. -%10 BASE ! PI F. +%10 BASEADR ! PI F. -PI F. -#10 BASE ! PI F. +#10 BASEADR ! PI F. -PI F. PI 2,0 F* F. @@ -441,3 +451,4 @@ PI -2,0 F/ F. 181,01933598375 -181,01933598375 f* f. -181,01933598375 181,01933598375 f* f. -181,01933598375 -181,01933598375 f* f. + diff --git a/MSP430-FORTH/MSP_EXP430FR5994/ANS_COMP.4TH b/MSP430-FORTH/MSP_EXP430FR5994/ANS_COMP.4TH index d4391da..ccaba20 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/ANS_COMP.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/ANS_COMP.4TH @@ -3,18 +3,81 @@ ; ANS_COMP.4th words complement to pass CORETEST.4TH ; ----------------------------------------------------- -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {ANS_COMP} [IF] DEFINED! - -[ELSE] +[UNDEFINED] {ANS_COMP} [IF] PWR_STATE MARKER {ANS_COMP} -: VALUE +[UNDEFINED] VARIABLE [IF] + +: VARIABLE +DEFER +HI2LO +MOV @R1+,R13 +MOV #$1286,-4(R10) +MOV @R13+,R0 +ENDCODE + +[THEN] + +[UNDEFINED] CONSTANT [IF] +: CONSTANT +DEFER +HI2LO +MOV @R1+,R13 +MOV #$1285,-4(R10) +MOV R14,-2(R10) +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +$1DBE CONSTANT STATE + +[UNDEFINED] BASE [IF] +$1DDC CONSTANT BASE +[THEN] + +[UNDEFINED] >IN [IF] +$1DC4 CONSTANT >IN +[THEN] + +[UNDEFINED] PAD [IF] +$1CE4 CONSTANT PAD +[THEN] + +[UNDEFINED] BL [IF] +#32 CONSTANT BL +[THEN] + +[UNDEFINED] SPACE [IF] +: SPACE +BL EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +CODE SPACES +CMP #0,R14 +0<> IF + PUSH R13 + BEGIN + LO2HI + BL EMIT + HI2LO + SUB #2,R13 + SUB #1,R14 + 0= UNTIL + MOV @R1+,R13 +THEN +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + + +: VALUE CREATE , DOES> HI2LO @@ -32,6 +95,43 @@ BIS #$400,R2 MOV @R13+,R0 ENDCODE +: S>D + DUP 0< +; + +[UNDEFINED] NIP [IF] +CODE NIP +ADD #2,R15 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] C@ [IF] +CODE C@ +MOV.B @R14,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] C! [IF] +CODE C! +MOV.B @R15+,0(R14) +ADD #1,R15 +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] C, [IF] +CODE C, +MOV &$1DC6,R10 +MOV.B R14,0(R10) +ADD #1,&$1DC6 +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + [UNDEFINED] AND [IF] CODE AND AND @R15+,R14 @@ -53,11 +153,34 @@ MOV @R13+,R0 ENDCODE [THEN] +[UNDEFINED] PLUS [IF] +CODE + +ADD @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + CODE INVERT XOR #-1,R14 MOV @R13+,R0 ENDCODE +CODE < + SUB @R15+,R14 + S< ?GOTO FW1 + 0<> IF +BW1 MOV #-1,R14 + THEN + MOV @R13+,R0 +ENDCODE + +CODE > + SUB @R15+,R14 + S< ?GOTO BW1 +FW1 AND #0,R14 + MOV @R13+,R0 +ENDCODE + CODE LSHIFT MOV @R15+,R10 AND #$1F,R14 @@ -107,7 +230,9 @@ RRA R14 MOV @R13+,R0 ENDCODE -$1A04 C@ $EF > [IF] ; test tag value MSP430FR413x subfamily without hardware_MPY +$1A00 4 + @ $81F3 U< +$81EF $1A00 4 + @ U< += [IF] ; MSP430FR413x subfamily without hardware_MPY CODE M* MOV @R15,R12 @@ -137,7 +262,7 @@ THEN MOV @R13+,R0 ENDCODE -[ELSE] ; MSP430FRxxxx with hardware_MPY +[ELSE] ; MSP430FRxxxx with hardware_MPY CODE UM* MOV @R15,&$4C0 @@ -154,6 +279,13 @@ ENDCODE [THEN] +CODE UM/MOD + PUSH #DROP + MOV #<#,R9 + ADD #8,R9 + MOV R9,R0 +ENDCODE + CODE SM/REM MOV R14,R12 MOV @R15,R11 @@ -239,44 +371,57 @@ M* DROP >R M* R> FM/MOD NIP ; -: S>D - DUP 0< -; +[UNDEFINED] OVER [IF] +CODE OVER +MOV R14,-2(R15) +MOV @R15,R14 +SUB #2,R15 +MOV @R13+,R0 +ENDCODE +[THEN] -[UNDEFINED] {DOUBLE} [IF] +CODE ROT +MOV @R15,R10 +MOV R14,0(R15) +MOV 2(R15),R14 +MOV R10,2(R15) +MOV @R13+,R0 +ENDCODE -CODE 2@ +CODE R@ SUB #2,R15 -MOV 2(R14),0(R15) -MOV @R14,R14 +MOV R14,0(R15) +MOV @R1,R14 MOV @R13+,R0 ENDCODE + +[UNDEFINED] {DOUBLE} [IF] + +CODE 2@ +BW1 SUB #2,R15 + MOV 2(R14),0(R15) + MOV @R14,R14 + MOV @R13+,R0 +ENDCODE + CODE 2! -MOV @R15+,0(R14) -MOV @R15+,2(R14) -MOV @R15+,R14 -MOV @R13+,R0 +BW2 MOV @R15+,0(R14) + MOV @R15+,2(R14) + MOV @R15+,R14 + MOV @R13+,R0 ENDCODE : 2VALUE -CREATE -, , +CREATE , , DOES> HI2LO MOV @R1+,R13 BIT #$400,R2 -0= ?JMP 2@ +0= ?GOTO BW1 BIC #$400,R2 -JMP 2! -ENDCODE - -CODE 2DUP -SUB #4,R15 -MOV R14,2(R15) -MOV 4(R15),0(R15) -MOV @R13+,R0 +GOTO BW2 ENDCODE CODE 2DROP @@ -336,12 +481,13 @@ ADD #2,R14 MOV @R13+,R0 ENDCODE + : CHAR BL WORD 1+ C@ ; : [CHAR] - CHAR lit lit , , + CHAR POSTPONE LITERAL ; IMMEDIATE CODE +! @@ -365,6 +511,7 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE + CODE HEX MOV #$10,&BASE MOV @R13+,R0 @@ -387,6 +534,39 @@ COUNT TYPE BL $1DB4 ! ; IMMEDIATE +CODE J +SUB #2,R15 +MOV R14,0(R15) +MOV 4(R1),R14 +SUB 6(R1),R14 +MOV @R13+,R0 +ENDCODE + +CODE UNLOOP +ADD #4,R1 +MOV @R13+,R0 +ENDCODE + +CODE LEAVE +MOV &$1DC6,R10 +MOV #UNLOOP,0(R10) +MOV #.,2(R10) +ADD #8,2(R10) +ADD #6,&$1DC6 +ADD #2,&$1C00 +ADD #4,R10 +MOV &$1C00,R9 +MOV R10,0(R9) +MOV @R13+,R0 +ENDCODE IMMEDIATE + +CODE RECURSE +MOV &$1DC6,R9 +MOV &$1DBA,0(R9) +ADD #2,&$1DC6 +MOV @R13+,R0 +ENDCODE IMMEDIATE + CODE SOURCE SUB #4,R15 MOV R14,2(R15) @@ -395,13 +575,7 @@ MOV &$1DC2,0(R15) MOV @R13+,R0 ENDCODE -$1DC4 CONSTANT >IN - -[UNDEFINED] PAD [IF] -$1CE4 CONSTANT PAD -[THEN] - RST_HERE [THEN] -ECHO + diff --git a/MSP430-FORTH/MSP_EXP430FR5994/CHNGBAUD.4TH b/MSP430-FORTH/MSP_EXP430FR5994/CHNGBAUD.4TH index a6a10ac..3ee4f9f 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/CHNGBAUD.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/CHNGBAUD.4TH @@ -5,6 +5,63 @@ PWR_STATE +[UNDEFINED] CONSTANT [IF] +: CONSTANT +DEFER +HI2LO +MOV @R1+,R13 +MOV #$1285,-4(R10) +MOV R14,-2(R10) +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] BL [IF] +#32 CONSTANT BL +[THEN] + +[UNDEFINED] SPACE [IF] +: SPACE +BL EMIT ; +[THEN] + +[UNDEFINED] R@ [IF] +CODE R@ +SUB #2,R15 +MOV R14,0(R15) +MOV @R1,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] < [IF] +CODE < + SUB @R15+,R14 + S< ?GOTO FW1 + 0<> IF +BW1 MOV #-1,R14 + THEN + MOV @R13+,R0 +ENDCODE + +CODE > + SUB @R15+,R14 + S< ?GOTO BW1 +FW1 AND #0,R14 + MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] UM/MOD [IF] +CODE UM/MOD + PUSH #DROP + MOV #<#,R9 + ADD #8,R9 + MOV R9,R0 +ENDCODE +[THEN] + : MCLK. 0 1000 UM/MOD . ; diff --git a/MSP430-FORTH/MSP_EXP430FR5994/CORDIC.4TH b/MSP430-FORTH/MSP_EXP430FR5994/CORDIC.4TH index 6b2275d..f61fa0e 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/CORDIC.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/CORDIC.4TH @@ -3,20 +3,26 @@ ; CORDIC.4th ; ---------- -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {CORDIC} [IF] DEFINED! - -[ELSE] PWR_STATE +[UNDEFINED] {CORDIC} [IF] + MARKER {CORDIC} [UNDEFINED] {FIXPOINT} [IF] +[UNDEFINED] DABS [IF] +CODE DABS +MOV #1-,R9 +ADD #4,R9 +MOV R9,R0 +ENDCODE +[THEN] + + CODE HOLDS - MOV @R15+,R9 +BW1 MOV @R15+,R9 ADD R14,R9 MOV &$1DB2,R8 BEGIN SUB #1,R9 @@ -35,7 +41,7 @@ CODE F#S MOV R14,R11 MOV #0,R12 BEGIN MOV @R15,&$4C0 - MOV &BASE,&$4C8 + MOV &$1DDC,&$4C8 MOV &$4E4,0(R15) MOV &$4E6,R14 CMP #10,R14 @@ -48,13 +54,18 @@ BEGIN MOV @R15,&$4C0 MOV R11,R14 SUB #2,R15 MOV #$1D90,0(R15) - JMP HOLDS + GOTO BW1 ENDCODE +[UNDEFINED] SPACE [IF] +: SPACE +$20 EMIT ; +[THEN] + CODE F. MOV R14,R12 MOV #4,R11 -MOV &BASE,R10 +MOV &$1DDC,R10 CMP ##10,R10 0= IF ADD #1,R11 @@ -133,7 +144,7 @@ MOV #0,R8 RRA R12 RRA R11 ADD #1,R10 - FW1 CMP R13,R10 +FW1 CMP R13,R10 0= UNTIL ADD R10,R10 CMP #0,R14 @@ -212,7 +223,7 @@ MOV #0,R14 RRA R12 RRA R11 ADD #1,R10 - FW1 CMP R13,R10 +FW1 CMP R13,R10 0= UNTIL ADD R10,R10 CMP #0,R8 @@ -255,8 +266,18 @@ RST_HERE [THEN] -: 2000CORDIC -1000 0 DO +[UNDEFINED] ROT [IF] +CODE ROT +MOV @R15,R10 +MOV R14,0(R15) +MOV 2(R15),R14 +MOV R10,2(R15) +MOV @R13+,R0 +ENDCODE +[THEN] + +: 1000CORDIC +500 0 DO POL2REC REC2POL LOOP ; @@ -285,8 +306,8 @@ ECHO 1000 -1000 REC2POL F. . ; phase module --> 16000 8000 REC2POL F. . ; phase module --> 16000 -8000 REC2POL F. . ; phase module --> -16000 0 REC2POL F. . ; phase module --> -0 16000 REC2POL F. . ; phase module --> +16000 0 REC2POL F. . ; phase module --> +0 16000 REC2POL F. . ; phase module --> 10000 89,0 POL2REC REC2POL ROT . F. @@ -300,15 +321,15 @@ ECHO 10000 7,125 POL2REC REC2POL ROT . F. 10000 1,0 POL2REC REC2POL ROT . F. -10000 89,0 2000CORDIC ROT . F. -10000 75,0 2000CORDIC ROT . F. -10000 60,0 2000CORDIC ROT . F. -10000 45,0 2000CORDIC ROT . F. -10000 30,0 2000CORDIC ROT . F. -10000 26,565 2000CORDIC ROT . F. -10000 15,0 2000CORDIC ROT . F. -10000 14,036 2000CORDIC ROT . F. -10000 7,125 2000CORDIC ROT . F. -10000 1,0 2000CORDIC ROT . F. +10000 89,0 1000CORDIC ROT . F. +10000 75,0 1000CORDIC ROT . F. +10000 60,0 1000CORDIC ROT . F. +10000 45,0 1000CORDIC ROT . F. +10000 30,0 1000CORDIC ROT . F. +10000 26,565 1000CORDIC ROT . F. +10000 15,0 1000CORDIC ROT . F. +10000 14,036 1000CORDIC ROT . F. +10000 7,125 1000CORDIC ROT . F. +10000 1,0 1000CORDIC ROT . F. diff --git a/MSP430-FORTH/MSP_EXP430FR5994/FF_SPECS.4TH b/MSP430-FORTH/MSP_EXP430FR5994/FF_SPECS.4TH index 8f0ae44..f2c3701 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/FF_SPECS.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/FF_SPECS.4TH @@ -6,7 +6,28 @@ ; display all FastForth compilation options -WIPE +RST_STATE + +[UNDEFINED] CONSTANT [IF] +: CONSTANT +DEFER +HI2LO +MOV @R1+,R13 +MOV #$1285,-4(R10) +MOV R14,-2(R10) +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] OVER [IF] +CODE OVER +MOV R14,-2(R15) +MOV @R15,R14 +SUB #2,R15 +MOV @R13+,R0 +ENDCODE +[THEN] 0 CONSTANT CASE IMMEDIATE @@ -40,6 +61,13 @@ LOOP $1CE4 CONSTANT PAD [THEN] +[UNDEFINED] PLUS [IF] +CODE + +ADD @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + [UNDEFINED] AND [IF] CODE AND AND @R15+,R14 @@ -48,6 +76,60 @@ ENDCODE [THEN] +[UNDEFINED] ROT [IF] +CODE ROT +MOV @R15,R10 +MOV R14,0(R15) +MOV 2(R15),R14 +MOV R10,2(R15) +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] C@ [IF] +CODE C@ +MOV.B @R14,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] BL [IF] +#32 CONSTANT BL +[THEN] + +[UNDEFINED] SPACE [IF] +: SPACE +BL EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +CODE SPACES +CMP #0,R14 +0<> IF + PUSH R13 + BEGIN + LO2HI + BL EMIT + HI2LO + SUB #2,R13 + SUB #1,R14 + 0= UNTIL + MOV @R1+,R13 +THEN +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] UM/MOD [IF] +CODE UM/MOD + PUSH #DROP + MOV #<#,R9 + ADD #8,R9 + MOV R9,R0 +ENDCODE +[THEN] + [UNDEFINED] WORDS [IF] : WORDS CR @@ -87,42 +169,43 @@ ESC ." [7m" ESC ." [0m" $1812 @ - DUP 0< IF CR ." LF XTAL" THEN -DUP + DUP 0< IF CR ." TERMINAL5WIRES" THEN -DUP + DUP 0< IF CR ." TERMINAL4WIRES" THEN -DUP + DUP 0< IF CR ." TERMINAL3WIRES" THEN -DUP + DUP 0< IF CR ." HALFDUPLEX_TERMINAL" THEN -DUP + DUP 0< IF CR ." PROMPT" THEN + DUP 0< IF CR ." 32.768kHz XTAL" THEN +DUP + DUP 0< IF DUP + CR ." HARDWARE (RTS/CTS) TERMINAL" + ELSE DUP + DUP 0< IF CR ." HARDWARE (RTS) TERMINAL" THEN + THEN +DUP + DUP 0< IF CR ." XON/XOFF TERMINAL" THEN +DUP + DUP 0< IF CR ." HALF-DUPLEX TERMINAL" THEN +DUP + DUP 0< IF CR ." ASM DATA ACCESS BEYOND $FFFF" THEN DUP + DUP 0< IF CR ." BOOTLOADER" THEN -DUP + DUP 0< IF CR ." SD_CARD_READ_WRITE" THEN -DUP + DUP 0< IF CR ." SD_CARD_LOADER" THEN -DUP + DUP 0< IF CR ." FIXPOINT_INPUT" THEN -DUP + DUP 0< IF CR ." DOUBLE_INPUT" THEN -DUP + DUP 0< IF CR ." VOCABULARY_SET" THEN +DUP + DUP 0< IF CR ." SD_CARD READ/WRITE" THEN +DUP + DUP 0< IF CR ." SD_CARD LOADER" THEN +DUP + DUP 0< IF CR ." FIXPOINT INPUT" THEN +DUP + DUP 0< IF CR ." DOUBLE INPUT" THEN +DUP + DUP 0< IF CR ." VOCABULARY SET" THEN DUP + DUP 0< IF CR ." NONAME" THEN -DUP + DUP 0< IF CR ." EXTENDED_ASM" THEN +DUP + DUP 0< IF CR ." EXTENDED ASSEMBLER" THEN DUP + DUP 0< IF CR ." ASSEMBLER" THEN -DUP + DUP 0< IF CR ." CONDCOMP" THEN +DUP + DUP 0< IF CR ." CONDITIONNAL COMPILATION" THEN 0< IF CR ESC ." [7m" ." OTHER OPTIONS:" ESC ." [0m" - [DEFINED] {ANS_COMP} [IF] CR ." ANS_COMPLEMENT" [THEN] - [DEFINED] {TOOLS} [IF] CR ." UTILITY" [THEN] - [DEFINED] {FIXPOINT} [IF] CR ." FIXPOINT" [THEN] - [DEFINED] {SD_TOOLS} [IF] CR ." SD_TOOLS" [THEN] + CR ." none" + ESC ." [G" + [DEFINED] {ANS_COMP} [IF] ." ANS_COMPLEMENT" CR [THEN] + [DEFINED] {TOOLS} [IF] ." UTILITY" CR [THEN] + [DEFINED] {FIXPOINT} [IF] ." FIXPOINT" CR [THEN] + [DEFINED] {SD_TOOLS} [IF] ." SD_TOOLS" CR [THEN] CR CR [DEFINED] VOCABULARY [IF] - CR ESC ." [7m" + ESC ." [7m" ." ASSEMBLER word set" ESC ." [0m" - ALSO ASSEMBLER WORDS CR PREVIOUS + ALSO ASSEMBLER WORDS CR PREVIOUS [THEN] - CR ESC ." [7m" - ." FORTH word set" - ESC ." [0m" - WORDS +ESC ." [7m" ." FORTH word set" ESC ." [0m" +WORDS THEN ; @@ -140,9 +223,12 @@ ESC ." [7m" $1A04 @ -CR ." FastForth V" $1810 @ U. ." for MSP430FR" +CR ." FastForth V" $1810 @ +0 <# # 8 HOLD # 46 hold #S #> TYPE SPACE +." for MSP430FR" CASE $830C OF ." 2355," $8000 ENDOF + $8328 OF ." 2476," $8000 ENDOF $8240 OF ." 2433," $C400 ENDOF $81F0 OF ." 4133," $C400 ENDOF $8103 OF ." 5739," $C200 ENDOF @@ -153,21 +239,27 @@ CASE $81A8 OF ." 6989," $4400 ENDOF ABORT" xxxx <-- unrecognized device!" -ENDCASE +ENDCASE SPACE -SPACE $1806 @ 0 1000 UM/MOD U. +['] ['] DUP @ $1287 = IF ." DTC=1," DROP + ELSE 2 + @ $1287 = + IF ." DTC=2," + ELSE ." DTC=3," + THEN + THEN SPACE + +$1800 @ U. BS ." -Entry word sets, " + +$1806 @ 0 1000 UM/MOD U. ?DUP IF BS ." ," U. THEN ." MHz, " -$1800 @ U. BS ." -Entry Vocabularies, " +- U. ." bytes" -- U. ." bytes, " -$FF80 HERE - U. ." bytes free" CR - -ESC ." [0m" +CR CR ADDONS -CR ADDONS +CR WARM ; ECHO specs diff --git a/MSP430-FORTH/MSP_EXP430FR5994/FIXPOINT.4TH b/MSP430-FORTH/MSP_EXP430FR5994/FIXPOINT.4TH index 992d10c..9cc3c1d 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/FIXPOINT.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/FIXPOINT.4TH @@ -3,21 +3,22 @@ ; FIXPOINT.4th ; ----------------------------------------------------- -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {FIXPOINT} [IF] DEFINED! - -[ELSE] - PWR_STATE -MARKER {FIXPOINT} +[UNDEFINED] {FIXPOINT} [IF] +MARKER {FIXPOINT} +[UNDEFINED] PLUS [IF] +CODE + +ADD @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] [UNDEFINED] HOLDS [IF] CODE HOLDS - MOV @R15+,R9 +BW3 MOV @R15+,R9 ADD R14,R9 MOV &$1DB2,R8 BEGIN SUB #1,R9 @@ -30,6 +31,14 @@ REPEAT MOV R8,&$1DB2 ENDCODE [THEN] +[UNDEFINED] DABS [IF] +CODE DABS +MOV #1-,R9 +ADD #4,R9 +MOV R9,R0 +ENDCODE +[THEN] + CODE F+ ADD @R15+,2(R15) ADDC @R15+,R14 @@ -43,7 +52,9 @@ CODE F- MOV @R13+,R0 ENDCODE -$1A04 C@ $EF > [IF] ; test tag value MSP430FR413x subfamily without hardware_MPY +$1A00 4 + @ $81F3 U< +$81EF $1A00 4 + @ U< += [IF] ; MSP430FR413x subfamily without hardware_MPY CODE F/ PUSHM #4,R7 @@ -105,7 +116,7 @@ CODE F#S PUSHM #2,R14 MOV #0,R12 BEGIN PUSH R12 - MOV &BASE,R14 + MOV &$1DDC,R14 LO2HI UM* HI2LO @@ -122,7 +133,7 @@ U>= UNTIL MOV #0,0(R15) SUB #2,R15 MOV #$1D90,0(R15) - JMP HOLDS + GOTO BW3 ENDCODE [THEN] @@ -179,7 +190,7 @@ THEN GOTO BW1 ENDCODE -[ELSE] +[ELSE] ; else if hardware multiplier CODE F/ PUSHM #4,R7 @@ -240,7 +251,7 @@ CODE F#S MOV R14,R11 MOV #0,R12 BEGIN MOV @R15,&$4C0 - MOV &BASE,&$4C8 + MOV &$1DDC,&$4C8 MOV &$4E4,0(R15) MOV &$4E6,R14 CMP #10,R14 @@ -253,7 +264,7 @@ BEGIN MOV @R15,&$4C0 MOV R11,R14 SUB #2,R15 MOV #$1D90,0(R15) - JMP HOLDS + GOTO BW3 ENDCODE [THEN] @@ -270,11 +281,16 @@ ENDCODE [THEN] +[UNDEFINED] SPACE [IF] +: SPACE +$20 EMIT ; +[THEN] + [UNDEFINED] F. [IF] CODE F. MOV R14,R12 MOV #4,R11 -MOV &BASE,R10 +MOV &$1DDC,R10 CMP ##10,R10 0= IF ADD #1,R11 @@ -301,27 +317,24 @@ CODE S>F ENDCODE [THEN] -[UNDEFINED] 2@ [IF] +RST_HERE + +[THEN] -CODE 2@ +[UNDEFINED] 2CONSTANT [IF] +: 2CONSTANT +CREATE , , +DOES> +HI2LO SUB #2,R15 MOV 2(R14),0(R15) MOV @R14,R14 +MOV @R1+,R13 MOV @R13+,R0 ENDCODE -[THEN] - -[UNDEFINED] 2CONSTANT [IF] -: 2CONSTANT -CREATE , , -DOES> 2@ ; [THEN] -RST_HERE - -[THEN] - ECHO ; ----------------------- @@ -332,11 +345,11 @@ ECHO 3,14159 2CONSTANT PI PI -1,0 F* 2CONSTANT -PI -$10 BASE ! PI F. +$10 $1DDC ! PI F. -PI F. -%10 BASE ! PI F. +%10 $1DDC ! PI F. -PI F. -#10 BASE ! PI F. +#10 $1DDC ! PI F. -PI F. PI 2,0 F* F. @@ -370,3 +383,4 @@ PI -2,0 F/ F. 181,01933598375 -181,01933598375 f* f. -181,01933598375 181,01933598375 f* f. -181,01933598375 -181,01933598375 f* f. + diff --git a/MSP430-FORTH/MSP_EXP430FR5994/MISC/TESTASM.4TH b/MSP430-FORTH/MSP_EXP430FR5994/MISC/TESTASM.4TH index 8a8b7e6..059bc71 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/MISC/TESTASM.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/MISC/TESTASM.4TH @@ -3,7 +3,125 @@ ; TEST_ASM.4th ; ----------------------------------------------------------------------- +[UNDEFINED] + [IF] +CODE + +ADD @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] MAX [IF] + +CODE MAX + CMP @R15,R14 + S< ?GOTO FW1 +BW1 ADD #2,R15 + MOV @R13+,R0 +ENDCODE + +CODE MIN + CMP @R15,R14 + S< ?GOTO BW1 +FW1 MOV @R15+,R14 + MOV @R13+,R0 +ENDCODE + +[THEN] + +[UNDEFINED] C@ [IF] +CODE C@ +MOV.B @R14,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] VARIABLE [IF] +: VARIABLE +DEFER +HI2LO +MOV @R1+,R13 +MOV #$1286,-4(R10) +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] CONSTANT [IF] +: CONSTANT +DEFER +HI2LO +MOV @R1+,R13 +MOV #$1285,-4(R10) +MOV R14,-2(R10) +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] SPACE [IF] +: SPACE +$20 EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +CODE SPACES +CMP #0,R14 +0<> IF + PUSH R13 + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,R13 + SUB #1,R14 + 0= UNTIL + MOV @R1+,R13 +THEN +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] OVER [IF] +CODE OVER +MOV R14,-2(R15) +MOV @R15,R14 +SUB #2,R15 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] U.R [IF] +: U.R + >R <# 0 # #S #> + R> OVER - 0 MAX SPACES TYPE +; +[THEN] + +[UNDEFINED] DUMP [IF] +CODE DUMP +PUSH R13 +PUSH &$1DDC +MOV #$10,&$1DDC +ADD @R15,R14 +LO2HI + SWAP + DO CR + I 4 U.R SPACE + I 8 + I + DO I C@ 3 U.R LOOP + SPACE + I $10 + I 8 + + DO I C@ 3 U.R LOOP + SPACE SPACE + I $10 + I + DO I C@ $7E MIN $20 MAX EMIT LOOP + $10 +LOOP + R> $1DDC ! +; +[THEN] + CODE TESTPUSHM +BW1 MOV #22222,R8 MOV #3,R9 MOV #2,R10 @@ -30,7 +148,7 @@ CODE TESTPUSHM TESTPUSHM ; you should see 11111 3 2 1 0 --> CODE TESTPOPM - JMP TESTPUSHM + GOTO BW1 ENDCODE @@ -40,24 +158,24 @@ TESTPOPM ; you should see 11111 3 2 1 0 --> CODE TEST1 - MOV &BASE,&BASE - CMP #%10,&BASE -0<> IF MOV #2,&BASE -ELSE MOV #$0A,&BASE + MOV &$1DDC,&$1DDC + CMP #%10,&$1DDC +0<> IF MOV #2,&$1DDC +ELSE MOV #$0A,&$1DDC THEN COLON - BASE @ U. + $1DDC @ U. ; : TEST2 - BASE @ U. + $1DDC @ U. HI2LO - CMP #2, &BASE -0<> IF MOV #2, &BASE -ELSE MOV #10,&BASE + CMP #2, &$1DDC +0<> IF MOV #2, &$1DDC +ELSE MOV #10,&$1DDC THEN MOV @R1+,R13 MOV @R13+,R0 @@ -65,11 +183,11 @@ ENDCODE CODE TEST3 - CMP #2, &BASE -0<> IF MOV #2, &BASE -ELSE MOV #10,&BASE + CMP #2, &$1DDC +0<> IF MOV #2, &$1DDC +ELSE MOV #10,&$1DDC THEN COLON - BASE @ U. + $1DDC @ U. ; @@ -95,6 +213,23 @@ TEST5 ; you should see : 9 8 7 6 5 4 3 2 1 0 --> +[UNDEFINED] C, [IF] +CODE C, +MOV &$1DC6,R10 +MOV.B R14,0(R10) +ADD #1,&$1DC6 +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] C@ [IF] +CODE C@ +MOV.B @R14,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + : BYTES_TABLE_IDX CREATE 0 DO I C, @@ -219,15 +354,20 @@ TABLE20 PFA_TABLE ! TABLE 10 DUMP ; create a primary DEFERred assembly word ; ----------------------------------------------------------------------- + DEFER TRUC ; here, TRUC is a secondary DEFERred word (i.e. without BODY) + CODENNM ; leaves its execution address (CFA) on stack SUB #2,R15 MOV R14,0(R15) MOV @R13+,R0 ENDCODE -DUP . IS TRUC ; TRUC becomes a primary DEFERred word + +DUP . + +IS TRUC ; TRUC becomes a primary DEFERred word ; with its default action (DUP) located at its BODY addresse. TRUC . ; display R14 value --> diff --git a/MSP430-FORTH/MSP_EXP430FR5994/PROG100K.4TH b/MSP430-FORTH/MSP_EXP430FR5994/PROG100K.4TH index f7a5cd0..0cce854 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/PROG100K.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/PROG100K.4TH @@ -1,43 +1,15 @@ ; ----------------------------------- -; PROG100k.4th = 110 x RC5toLCD.4th +; PROG100k.4th = 77 x RC5toLCD.4th ; ----------------------------------- -PWR_STATE +RST_STATE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -50,7 +22,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -69,9 +40,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -81,79 +52,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -170,15 +80,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -216,36 +128,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -259,98 +187,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -363,7 +244,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -382,9 +262,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -394,79 +274,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -483,15 +302,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -529,36 +350,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -572,98 +409,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -676,7 +466,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -695,9 +484,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -707,79 +496,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W +CODE LCD_WRF + BIC.B #2,&$243 + GOTO BW1 ENDCODE - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -796,15 +524,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -842,36 +572,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -885,98 +631,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -989,7 +688,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -1008,9 +706,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -1020,79 +718,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -1109,15 +746,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -1155,36 +794,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -1198,98 +853,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -1302,7 +910,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -1321,9 +928,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -1333,104 +940,45 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W + GOTO BW1 ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - +ASM WDT_INT +ADD #2,R1 +BIT.B #$20,&$240 +0= IF + CMP #19,&$3D6 + U< IF + ADD #1,&$3D6 + THEN +ELSE + BIT.B #$40,&$240 + 0= IF + CMP #3,&$3D6 + U>= IF + SUB #1,&$3D6 + THEN + THEN +THEN +BW1 +MOV @R1+,R0 +ENDASM ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -1468,36 +1016,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -1511,98 +1075,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -1615,7 +1132,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -1634,9 +1150,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -1646,79 +1162,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -1735,15 +1190,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -1781,36 +1238,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -1824,98 +1297,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -1928,7 +1354,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -1947,9 +1372,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -1959,79 +1384,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W + GOTO BW1 ENDCODE - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -2048,15 +1412,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -2094,36 +1460,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -2137,98 +1519,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -2241,7 +1576,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -2260,9 +1594,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -2272,79 +1606,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -2361,15 +1634,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -2407,36 +1682,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -2450,98 +1741,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -2554,7 +1798,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -2573,9 +1816,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -2585,79 +1828,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -2674,16 +1856,18 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] +MOV #1778,R9 MOV #14,R10 BEGIN MOV #%1011100100,&$380 @@ -2720,36 +1904,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -2763,98 +1963,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -2867,7 +2020,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -2886,9 +2038,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -2898,79 +2050,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -2987,15 +2078,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -3033,36 +2126,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -3076,98 +2185,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -3180,7 +2242,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -3199,9 +2260,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -3211,79 +2272,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -3300,15 +2300,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -3346,37 +2348,53 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 - MOV #19,&$3D2 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] + MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 BIS.B #$20,&$204 @@ -3389,98 +2407,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -3493,7 +2464,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -3512,9 +2482,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -3524,79 +2494,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -3613,15 +2522,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -3659,36 +2570,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -3702,98 +2629,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -3806,7 +2686,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -3825,9 +2704,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -3837,79 +2716,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -3926,15 +2744,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -3972,36 +2792,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -4015,97 +2851,50 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - +[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] +MARKER {RC5TOLCD} CODE 20_US BEGIN @@ -4119,7 +2908,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -4138,9 +2926,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -4150,79 +2938,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -4239,15 +2966,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -4285,36 +3014,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -4328,98 +3073,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -4432,7 +3130,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -4451,9 +3148,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -4463,79 +3160,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -4552,15 +3188,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -4598,36 +3236,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -4641,98 +3295,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -4745,7 +3352,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -4764,9 +3370,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -4776,79 +3382,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -4865,15 +3410,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -4911,36 +3458,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -4954,98 +3517,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -5058,7 +3574,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -5077,9 +3592,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -5089,79 +3604,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -5178,15 +3632,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -5224,36 +3680,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -5267,98 +3739,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -5371,7 +3796,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -5390,9 +3814,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -5402,79 +3826,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W + GOTO BW1 ENDCODE - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -5491,15 +3854,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -5537,36 +3902,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -5580,98 +3961,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -5684,7 +4018,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -5703,9 +4036,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -5715,79 +4048,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -5804,15 +4076,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -5850,36 +4124,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -5893,98 +4183,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -5997,7 +4240,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -6016,9 +4258,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -6028,104 +4270,45 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W + GOTO BW1 ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE +ASM WDT_INT +ADD #2,R1 +BIT.B #$20,&$240 +0= IF + CMP #19,&$3D6 + U< IF + ADD #1,&$3D6 + THEN +ELSE + BIT.B #$40,&$240 + 0= IF + CMP #3,&$3D6 + U>= IF + SUB #1,&$3D6 + THEN + THEN +THEN +BW1 +MOV @R1+,R0 +ENDASM +ASM RC5_INT +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 [THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 MOV #1778,R9 MOV #14,R10 BEGIN @@ -6163,36 +4346,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -6206,98 +4405,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -6310,7 +4462,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -6329,9 +4480,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -6341,79 +4492,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -6430,15 +4520,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -6476,36 +4568,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -6519,98 +4627,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -6623,7 +4684,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -6642,9 +4702,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -6654,79 +4714,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 + GOTO BW1 ENDCODE - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -6743,15 +4742,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -6789,36 +4790,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -6832,98 +4849,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -6936,7 +4906,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -6955,9 +4924,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -6967,79 +4936,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -7056,15 +4964,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -7102,36 +5012,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -7145,98 +5071,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -7249,7 +5128,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -7268,9 +5146,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -7280,79 +5158,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -7369,15 +5186,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -7415,36 +5234,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -7458,98 +5293,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -7562,7 +5350,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -7581,9 +5368,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -7593,79 +5380,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -7682,15 +5408,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -7728,36 +5456,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -7771,98 +5515,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -7875,7 +5572,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -7894,9 +5590,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -7906,79 +5602,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -7995,15 +5630,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -8041,36 +5678,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -8084,98 +5737,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR + ['] LCD_HOME IS CR + ['] LCD_WRC IS EMIT + CR ." I love you" + ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -8188,7 +5794,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -8207,9 +5812,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -8219,79 +5824,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -8308,15 +5852,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -8354,36 +5900,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -8397,98 +5959,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -8501,7 +6016,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -8520,9 +6034,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -8532,79 +6046,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -8621,15 +6074,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -8667,36 +6122,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -8710,97 +6181,50 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - +[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] +MARKER {RC5TOLCD} CODE 20_US BEGIN @@ -8814,7 +6238,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -8833,9 +6256,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -8845,79 +6268,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -8934,15 +6296,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -8980,36 +6344,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -9023,98 +6403,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -9127,7 +6460,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -9146,9 +6478,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -9158,79 +6490,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -9247,15 +6518,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -9293,36 +6566,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -9336,111 +6625,63 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 +CODE 20_US +BEGIN + BEGIN + BIT #1,&$3C0 + 0<> UNTIL + BIC #1,&$3C0 + SUB #1,R14 +U< UNTIL +MOV @R15+,R14 +MOV @R13+,R0 ENDCODE - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -9459,9 +6700,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -9471,79 +6712,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -9560,15 +6740,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -9606,36 +6788,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -9649,98 +6847,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -9753,7 +6904,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -9772,9 +6922,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -9784,79 +6934,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -9873,15 +6962,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -9919,36 +7010,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -9962,98 +7069,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -10066,7 +7126,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -10085,9 +7144,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -10097,79 +7156,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -10186,15 +7184,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -10232,36 +7232,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -10275,98 +7291,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -10379,7 +7348,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -10398,9 +7366,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -10410,79 +7378,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -10499,15 +7406,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -10545,36 +7454,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -10588,98 +7513,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -10692,7 +7570,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -10711,9 +7588,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -10723,79 +7600,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W + GOTO BW1 ENDCODE - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -10812,15 +7628,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -10858,36 +7676,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -10901,98 +7735,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -11005,7 +7792,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -11024,9 +7810,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -11036,79 +7822,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -11125,15 +7850,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -11171,36 +7898,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -11214,98 +7957,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -11318,7 +8014,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -11337,9 +8032,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -11349,79 +8044,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -11438,15 +8072,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -11484,36 +8120,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -11527,98 +8179,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -11631,7 +8236,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -11650,9 +8254,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -11662,79 +8266,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -11751,15 +8294,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -11797,36 +8342,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -11840,98 +8401,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -11944,7 +8458,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -11963,9 +8476,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -11975,79 +8488,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -12064,15 +8516,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -12110,36 +8564,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -12153,98 +8623,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR + ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -12257,7 +8680,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -12276,9 +8698,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -12288,79 +8710,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -12377,15 +8738,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -12423,36 +8786,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -12466,98 +8845,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -12570,7 +8902,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -12589,9 +8920,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -12601,79 +8932,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -12690,15 +8960,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -12736,36 +9008,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -12779,97 +9067,50 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - +[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] +MARKER {RC5TOLCD} CODE 20_US BEGIN @@ -12883,7 +9124,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -12902,9 +9142,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -12914,79 +9154,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -13003,15 +9182,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -13049,36 +9230,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -13092,98 +9289,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -13196,7 +9346,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -13215,9 +9364,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -13227,79 +9376,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -13316,15 +9404,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -13362,36 +9452,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -13405,111 +9511,63 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 +CODE 20_US +BEGIN + BEGIN + BIT #1,&$3C0 + 0<> UNTIL + BIC #1,&$3C0 + SUB #1,R14 +U< UNTIL +MOV @R15+,R14 +MOV @R13+,R0 ENDCODE - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -13528,9 +9586,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -13540,79 +9598,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -13629,15 +9626,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -13675,36 +9674,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -13718,98 +9733,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -13822,7 +9790,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -13841,9 +9808,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -13853,79 +9820,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -13942,15 +9848,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -13988,36 +9896,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -14031,98 +9955,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -14135,7 +10012,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -14154,9 +10030,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -14166,79 +10042,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -14255,15 +10070,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -14301,36 +10118,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -14344,98 +10177,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -14448,7 +10234,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -14467,9 +10252,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -14479,79 +10264,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -14568,15 +10292,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -14614,36 +10340,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -14657,98 +10399,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -14761,7 +10456,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -14780,9 +10474,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -14792,79 +10486,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 + GOTO BW1 ENDCODE - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -14881,15 +10514,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -14927,36 +10562,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -14970,98 +10621,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -15074,7 +10678,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -15093,9 +10696,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -15105,79 +10708,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -15194,15 +10736,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -15240,36 +10784,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -15283,98 +10843,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -15387,7 +10900,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -15406,9 +10918,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -15418,79 +10930,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -15507,15 +10958,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -15553,36 +11006,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -15596,98 +11065,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -15700,7 +11122,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -15719,9 +11140,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -15731,79 +11152,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -15820,15 +11180,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -15866,36 +11228,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -15909,98 +11287,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -16013,7 +11344,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -16032,9 +11362,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -16044,79 +11374,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -16133,15 +11402,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -16179,36 +11450,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -16222,98 +11509,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR + ['] LCD_HOME IS CR + ['] LCD_WRC IS EMIT + CR ." I love you" + ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -16326,7 +11566,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -16345,9 +11584,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -16357,79 +11596,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -16446,15 +11624,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -16492,36 +11672,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -16535,98 +11731,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -16639,7 +11788,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -16658,9 +11806,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -16670,79 +11818,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -16759,15 +11846,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -16805,36 +11894,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -16848,97 +11953,50 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - +[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] +MARKER {RC5TOLCD} CODE 20_US BEGIN @@ -16952,7 +12010,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -16971,9 +12028,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -16983,79 +12040,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -17072,15 +12068,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -17118,36 +12116,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -17161,98 +12175,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -17265,7 +12232,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -17284,9 +12250,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -17296,79 +12262,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -17385,15 +12290,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -17431,36 +12338,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -17474,111 +12397,63 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 +CODE 20_US +BEGIN + BEGIN + BIT #1,&$3C0 + 0<> UNTIL + BIC #1,&$3C0 + SUB #1,R14 +U< UNTIL +MOV @R15+,R14 +MOV @R13+,R0 ENDCODE - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -17597,9 +12472,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -17609,79 +12484,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -17698,15 +12512,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -17744,36 +12560,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -17787,98 +12619,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -17891,7 +12676,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -17910,9 +12694,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -17922,79 +12706,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -18011,15 +12734,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -18057,36 +12782,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -18100,98 +12841,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -18204,7 +12898,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -18223,9 +12916,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -18235,79 +12928,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -18324,15 +12956,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -18370,36 +13004,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -18413,98 +13063,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -18517,7 +13120,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -18536,9 +13138,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -18548,79 +13150,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -18637,15 +13178,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -18683,36 +13226,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -18726,98 +13285,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -18830,7 +13342,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -18849,9 +13360,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -18861,79 +13372,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W + GOTO BW1 ENDCODE - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -18950,15 +13400,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -18996,36 +13448,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -19039,98 +13507,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -19143,7 +13564,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -19162,9 +13582,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -19174,79 +13594,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -19263,15 +13622,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -19309,36 +13670,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -19352,98 +13729,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -19456,7 +13786,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -19475,9 +13804,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -19487,79 +13816,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -19576,15 +13844,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -19622,36 +13892,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -19665,98 +13951,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -19769,7 +14008,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -19788,9 +14026,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -19800,79 +14038,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -19889,15 +14066,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -19935,36 +14114,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -19978,98 +14173,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -20082,7 +14230,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -20101,9 +14248,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -20113,79 +14260,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -20202,15 +14288,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -20248,36 +14336,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -20291,98 +14395,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR + ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -20395,7 +14452,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -20414,9 +14470,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -20426,79 +14482,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -20515,15 +14510,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -20561,36 +14558,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -20604,98 +14617,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -20708,7 +14674,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -20727,9 +14692,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -20739,79 +14704,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -20828,15 +14732,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -20874,36 +14780,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -20917,97 +14839,50 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - +[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] +MARKER {RC5TOLCD} CODE 20_US BEGIN @@ -21021,7 +14896,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -21040,9 +14914,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -21052,79 +14926,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -21141,15 +14954,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -21187,36 +15002,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -21230,98 +15061,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -21334,7 +15118,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -21353,9 +15136,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -21365,79 +15148,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -21454,15 +15176,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -21500,36 +15224,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -21543,111 +15283,63 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 +CODE 20_US +BEGIN + BEGIN + BIT #1,&$3C0 + 0<> UNTIL + BIC #1,&$3C0 + SUB #1,R14 +U< UNTIL +MOV @R15+,R14 +MOV @R13+,R0 ENDCODE - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -21666,9 +15358,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -21678,79 +15370,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -21767,15 +15398,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -21813,36 +15446,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -21856,98 +15505,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -21960,7 +15562,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -21979,9 +15580,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -21991,79 +15592,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -22080,15 +15620,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -22126,36 +15668,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -22169,98 +15727,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -22273,7 +15784,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -22292,9 +15802,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -22304,79 +15814,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -22393,15 +15842,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -22439,36 +15890,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -22482,98 +15949,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -22586,7 +16006,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -22605,9 +16024,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -22617,79 +16036,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -22706,15 +16064,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -22752,36 +16112,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -22795,98 +16171,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -22899,7 +16228,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -22918,9 +16246,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -22930,10408 +16258,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 + GOTO BW1 ENDCODE - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE - - - -ASM WDT_INT -BIT.B #$20,&$240 -0= IF - CMP #19,&$3D6 - U< IF - ADD #1,&$3D6 - THEN -ELSE - BIT.B #$40,&$240 - 0= IF - CMP #3,&$3D6 - U>= IF - SUB #1,&$3D6 - THEN - THEN -THEN -BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI -ENDASM - - -ASM RC5_INT - MOV #1,&$3A0 -MOV #1778,R9 -MOV #14,R10 -BEGIN -MOV #%1011100100,&$380 - RRUM #1,R9 - MOV R9,R8 - RRUM #1,R8 - ADD R9,R8 - BEGIN CMP R8,&$390 - U>= UNTIL - BIT.B #4,&$200 - ADDC R11,R11 - MOV.B &$200,&$208 - BIC.B #4,&$20C - SUB #1,R10 -0<> WHILE - ADD R9,R8 - BEGIN - MOV &$390,R9 - CMP R8,R9 - U>= IF - BIC #$30,&$380 - GOTO BW1 - THEN - BIT.B #4,&$20C - 0<> UNTIL -REPEAT -BIC #$30,&$380 -RLAM #1,R11 -MOV.B R11,R9 -RRUM #2,R9 -BIT #$4000,R11 -0= IF BIS #$40,R9 -THEN -RRUM #3,R11 -XOR @R1,R11 -BIT #$400,R11 -0= ?GOTO BW2 -XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 -LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT -HI2LO -MOV R14,&BASE -MOV @R15+,R14 -GOTO BW3 -ENDASM - - -ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 -ENDASM - - -CODE START - MOV #%1011010100,&$3C0 - MOV #1,&$3E0 - MOV #19,&$3D2 - MOV #%01100000,&$3C6 - MOV #10,&$3D6 - BIS.B #$20,&$204 - BIS.B #$20,&$20A - BIS.B #7,&$245 - BIC.B #7,&$247 - BIS.B #$0F,&$224 - BIC.B #$0F,&$226 - BIS.B #4,&$20A - BIC.B #4,&$20C - MOV #RC5_INT,&$FFDE - MOV #%0100010100,&$340 - MOV ##1638,&$352 - MOV #%10000,&$342 - MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear - ['] LCD_HOME IS CR - ['] LCD_WRC IS EMIT - CR ." I love you" - ['] CR >BODY IS CR - ['] EMIT >BODY IS EMIT - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM - ABORT -; - - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] - -[DEFINED] ASM [IF] - -MARKER {RC5TOLCD} - -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - -CODE 20_US -BEGIN - BEGIN - BIT #1,&$3C0 - 0<> UNTIL - BIC #1,&$3C0 - SUB #1,R14 -U< UNTIL -MOV @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -CODE TOP_LCD - BIS.B #4,&$243 - BIT.B #1,&$241 -0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -33348,15 +16286,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -33394,36 +16334,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -33437,98 +16393,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -33541,110 +16450,48 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 0= IF - AND.B #$0F,R14 - MOV.B R14,&$222 - BIC.B #4,&$243 - MOV @R15+,R14 - MOV @R13+,R0 -THEN - SUB #2,R15 - MOV R14,0(R15) - BIC.B #4,&$243 - MOV.B &$220,R14 - AND.B #$0F,R14 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_W - SUB #2,R15 - MOV R14,0(R15) - RRUM #4,R14 - BIC.B #1,&$243 - BIS.B #$0F,&$224 -COLON - TOP_LCD 2 20_US - TOP_LCD 2 20_US -; - - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 + AND.B #$0F,R14 + MOV.B R14,&$222 + BIC.B #4,&$243 + MOV @R15+,R14 + MOV @R13+,R0 +THEN + SUB #2,R15 + MOV R14,0(R15) + BIC.B #4,&$243 + MOV.B &$220,R14 + AND.B #$0F,R14 MOV @R13+,R0 ENDCODE +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 + MOV R14,0(R15) + RRUM #4,R14 + BIC.B #1,&$243 + BIS.B #$0F,&$224 +COLON + TOP_LCD 2 20_US + TOP_LCD 2 20_US +; -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -33661,15 +16508,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -33707,36 +16556,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -33750,98 +16615,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - - - CODE 20_US BEGIN BEGIN @@ -33854,7 +16672,6 @@ MOV @R15+,R14 MOV @R13+,R0 ENDCODE - CODE TOP_LCD BIS.B #4,&$243 BIT.B #1,&$241 @@ -33873,9 +16690,9 @@ THEN MOV @R13+,R0 ENDCODE - -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -33885,79 +16702,18 @@ COLON TOP_LCD 2 20_US ; - -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - - -CODE LCD_WrF - BIC.B #2,&$243 - JMP LCD_W -ENDCODE - - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - - -: LCD_Home - $02 LCD_WrF 100 20_us -; - - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - - -CODE LCD_RdS +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_R + GOTO BW1 ENDCODE - -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -33974,15 +16730,17 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM - ASM RC5_INT - MOV #1,&$3A0 +ADD #2,R1 +$1806 @ 16000 = [IF] + MOV #1,&$3A0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3A0 +[THEN] MOV #1778,R9 MOV #14,R10 BEGIN @@ -34020,36 +16778,52 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM - ASM BACKGROUND -MOV #SLEEP,R9 -ADD #4,R9 -MOV R9,R0 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM +CODE STOP +BW1 MOV #SLEEP,R9 + ADD #4,R9 + MOV R9,-2(R9) +COLON +['] WARM >BODY IS WARM +ECHO +." RC5toLCD is removed. type START to restart" +COLD +; -CODE START - MOV #%1011010100,&$3C0 +CODE APP_INIT +MOV #%1011010100,&$3C0 +$1806 @ 16000 = [IF] MOV #1,&$3E0 +[THEN] +$1806 @ 24000 = [IF] + MOV #2,&$3E0 +[THEN] MOV #19,&$3D2 MOV #%01100000,&$3C6 MOV #10,&$3D6 @@ -34063,99 +16837,51 @@ CODE START BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) - -LO2HI - - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +BIC #1,&$130 +BIS.B #3,&$20D +MOV &$1808,R8 +CMP #4,R8 +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT - CR ." I love you" + CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; - -CODE STOP - MOV #SLEEP,R9 - ADD #4,R9 - MOV R9,-2(R9) - -COLON - ['] WARM >BODY IS WARM - - COLD -; - - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - -[THEN] - - - - - -; ----------------------------------- -; RC5toLCD.4th -; ----------------------------------- - +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] -[DEFINED] ASM [IF] - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - CODE 20_US BEGIN BEGIN @@ -34186,8 +16912,9 @@ THEN MOV @R13+,R0 ENDCODE -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -34197,70 +16924,18 @@ COLON TOP_LCD 2 20_US ; -CODE LCD_WrC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - -CODE LCD_WrF +CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W -ENDCODE - -: LCD_Clear - $01 LCD_WrF 100 20_us -; - -: LCD_Home - $02 LCD_WrF 100 20_us -; - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 -ENDCODE - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 + GOTO BW1 ENDCODE -CODE LCD_RdS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -34277,13 +16952,11 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM ASM RC5_INT +ADD #2,R1 $1806 @ 16000 = [IF] MOV #1,&$3A0 [THEN] @@ -34327,47 +17000,45 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WrC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM ASM BACKGROUND -BIS #$180A,R2 +BEGIN + CALL &$1814 + BIS &$180A,R2 +AGAIN ENDASM -CODENNM -JMP BACKGROUND -ENDCODE DROP - - CODE STOP - MOV #SLEEP,R9 +BW1 MOV #SLEEP,R9 ADD #4,R9 MOV R9,-2(R9) COLON ['] WARM >BODY IS WARM ECHO -." RC5toLCD is removed." CR -." type START to restart" +." RC5toLCD is removed. type START to restart" COLD ; -CODE START +CODE APP_INIT MOV #%1011010100,&$3C0 $1806 @ 16000 = [IF] MOV #1,&$3E0 @@ -34388,42 +17059,49 @@ $1806 @ 24000 = [IF] BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) BIC #1,&$130 BIS.B #3,&$20D MOV &$1808,R8 CMP #4,R8 -0= ?JMP STOP -COLON - $03E8 20_US - $03 TOP_LCD - $CD 20_US - $03 TOP_LCD - $5 20_US - $03 TOP_LCD - $2 20_US - $02 TOP_LCD - $2 20_US - $28 LCD_WRF - $08 LCD_WRF - LCD_Clear - $06 LCD_WRF - $0C LCD_WRF - LCD_Clear +0= ?GOTO BW1 +COLON + #1000 20_US + %011 TOP_LCD + #205 20_US + %011 TOP_LCD + #5 20_US + %011 TOP_LCD + #2 20_US + %010 TOP_LCD + #2 20_US + %00101000 LCD_WRF + %1000 LCD_WRF + LCD_CLEAR + %0110 LCD_WRF + %1100 LCD_WRF + LCD_CLEAR ['] LCD_HOME IS CR ['] LCD_WRC IS EMIT CR ." I love you" ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE + + + ECHO ; downloading RC5toLCD.4th is done RST_HERE ; this app is protected against diff --git a/MSP430-FORTH/MSP_EXP430FR5994/RC5TOLCD.4TH b/MSP430-FORTH/MSP_EXP430FR5994/RC5TOLCD.4TH index 884d44b..9bcf374 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/RC5TOLCD.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/RC5TOLCD.4TH @@ -3,37 +3,12 @@ ; RC5TOLCD.4th ; ----------------------------------- -PWR_STATE +RST_STATE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] - -CODE MAX - CMP @R15,R14 - S< ?GOTO FW1 -BW1 ADD #2,R15 - MOV @R13+,R0 -ENDCODE - -CODE MIN - CMP @R15,R14 - S< ?GOTO BW1 -FW1 MOV @R15+,R14 - MOV @R13+,R0 -ENDCODE - -[THEN] - -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - CODE 20_US BEGIN BEGIN @@ -64,8 +39,9 @@ THEN MOV @R13+,R0 ENDCODE -CODE LCD_W - SUB #2,R15 +CODE LCD_WRC + BIS.B #2,&$243 +BW1 SUB #2,R15 MOV R14,0(R15) RRUM #4,R14 BIC.B #1,&$243 @@ -75,70 +51,18 @@ COLON TOP_LCD 2 20_US ; -CODE LCD_WRC - BIS.B #2,&$243 - JMP LCD_W -ENDCODE - CODE LCD_WRF BIC.B #2,&$243 - JMP LCD_W -ENDCODE - -: LCD_CLEAR - $01 LCD_WRF 100 20_us -; - -: LCD_HOME - $02 LCD_WRF 100 20_us -; - -[UNDEFINED] OR [IF] - -CODE OR -BIS @R15+,R14 -MOV @R13+,R0 + GOTO BW1 ENDCODE -[THEN] - -: LCD_ENTRY_SET $04 OR LCD_WrF ; - -: LCD_DSP_CTRL $08 OR LCD_WrF ; - -: LCD_DSP_SHIFT $10 OR LCD_WrF ; - -: LCD_FN_SET $20 OR LCD_WrF ; +: LCD_CLEAR $01 LCD_WRF 100 20_us ; +: LCD_HOME $02 LCD_WRF 100 20_us ; -: LCD_CGRAM_SET $40 OR LCD_WrF ; - -: LCD_GOTO $80 OR LCD_WrF ; - -CODE LCD_R - BIC.B #$0F,&$224 - BIS.B #1,&$243 -COLON - TOP_LCD 2 20_us - TOP_LCD 2 20_us -HI2LO - RLAM #4,0(R15) - ADD.B @R15+,R14 - MOV @R1+,R13 - MOV @R13+,R0 -ENDCODE - -CODE LCD_RDS - BIC.B #2,&$243 - JMP LCD_R -ENDCODE - -CODE LCD_RDC - BIS.B #2,&$243 - JMP LCD_R -ENDCODE ASM WDT_INT +ADD #2,R1 BIT.B #$20,&$240 0= IF CMP #19,&$3D6 @@ -155,13 +79,11 @@ ELSE THEN THEN BW1 -BW2 -BW3 -BIC #$78,0(R1) -RETI +MOV @R1+,R0 ENDASM ASM RC5_INT +ADD #2,R1 $1806 @ 16000 = [IF] MOV #1,&$3A0 [THEN] @@ -205,44 +127,45 @@ THEN RRUM #3,R11 XOR @R1,R11 BIT #$400,R11 -0= ?GOTO BW2 +0= ?GOTO BW1 XOR #$400,0(R1) -SUB #4,R15 -MOV &BASE,2(R15) -MOV #$10,&BASE -MOV R14,0(R15) -MOV R9,R14 +SUB #8,R15 +MOV R14,6(R15) +MOV &$1DDC,4(R15) +MOV #$10,&$1DDC +MOV R9,0(R15) +MOV #0,R14 LO2HI - ['] LCD_CLEAR IS CR - ['] LCD_WRC IS EMIT - CR ." $" 2 U.R - ['] CR >BODY IS CR + LCD_CLEAR + <# # #S #36 HOLD #> + ['] LCD_WRC IS EMIT + TYPE ['] EMIT >BODY IS EMIT HI2LO -MOV R14,&BASE +MOV @R15+,&$1DDC MOV @R15+,R14 -GOTO BW3 +MOV @R1+,R0 ENDASM ASM BACKGROUND BEGIN + CALL &$1814 BIS &$180A,R2 AGAIN ENDASM CODE STOP - MOV #SLEEP,R9 +BW1 MOV #SLEEP,R9 ADD #4,R9 MOV R9,-2(R9) COLON ['] WARM >BODY IS WARM ECHO -." RC5toLCD is removed." CR -." type START to restart" +." RC5toLCD is removed. type START to restart" COLD ; -CODE START +CODE APP_INIT MOV #%1011010100,&$3C0 $1806 @ 16000 = [IF] MOV #1,&$3E0 @@ -263,16 +186,14 @@ $1806 @ 24000 = [IF] BIC.B #4,&$20C MOV #RC5_INT,&$FFDE MOV #%0100010100,&$340 - MOV ##1638,&$352 + MOV ##3276,&$352 MOV #%10000,&$342 MOV #WDT_INT,&$FFEA - MOV #SLEEP,R9 - MOV #BACKGROUND,2(R9) BIC #1,&$130 BIS.B #3,&$20D MOV &$1808,R8 CMP #4,R8 -0= ?JMP STOP +0= ?GOTO BW1 COLON #1000 20_US %011 TOP_LCD @@ -295,10 +216,17 @@ COLON ['] CR >BODY IS CR ['] EMIT >BODY IS EMIT ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM ABORT ; +CODE START +MOV #SLEEP,R9 +MOV #BACKGROUND,2(R9) +MOV #WARM,R9 +MOV #APP_INIT,2(R9) +MOV R9,R0 +ENDCODE + ECHO ; downloading RC5toLCD.4th is done RST_HERE ; this app is protected against diff --git a/MSP430-FORTH/MSP_EXP430FR5994/RTC.4TH b/MSP430-FORTH/MSP_EXP430FR5994/RTC.4TH index ec442ef..0d9145b 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/RTC.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/RTC.4TH @@ -27,6 +27,50 @@ ENDCODE [THEN] +[UNDEFINED] CONSTANT [IF] +: CONSTANT +DEFER +HI2LO +MOV @R1+,R13 +MOV #$1285,-4(R10) +MOV R14,-2(R10) +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] BL [IF] +#32 CONSTANT BL +[THEN] + +[UNDEFINED] SPACES [IF] +CODE SPACES +CMP #0,R14 +0<> IF + PUSH R13 + BEGIN + LO2HI + BL EMIT + HI2LO + SUB #2,R13 + SUB #1,R14 + 0= UNTIL + MOV @R1+,R13 +THEN +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] OVER [IF] +CODE OVER +MOV R14,-2(R15) +MOV @R15,R14 +SUB #2,R15 +MOV @R13+,R0 +ENDCODE +[THEN] + [UNDEFINED] U.R [IF] : U.R >R <# 0 # #S #> @@ -50,7 +94,7 @@ COLON ; : DATE! -DEPTH 2 > IF +2 DEPTH U< IF HI2LO MOV R14,&$4B6 MOV.B @R15,&$4B5 @@ -79,7 +123,7 @@ COLON ; : TIME! -DEPTH 2 > IF +2 DEPTH U< IF HI2LO MOV R14,&$4B0 MOV.B @R15,&$4B1 @@ -97,8 +141,8 @@ RST_HERE : ESC #27 EMIT ; -: [DEFERRED] - ' @ $4030 = +: [ISDEFERRED?] + DUP @ $4030 = ; IMMEDIATE CREATE ABUF 20 ALLOT @@ -112,18 +156,16 @@ ESC ." [1J" ESC ." [H" CR ." DATE (DMY): " -ABUF ABUF 20 - [DEFERRED] ACCEPT - [IF] ['] ACCEPT >BODY EXECUTE - [ELSE] ACCEPT - [THEN] +ABUF DUP 20 + ['] ACCEPT [ISDEFERRED?] + [IF] >BODY + [THEN] EXECUTE EVALUATE CR DATE! CR CR ." TIME (HMS): " -ABUF ABUF 20 - [DEFERRED] ACCEPT - [IF] ['] ACCEPT >BODY EXECUTE - [ELSE] ACCEPT - [THEN] +ABUF DUP 20 + ['] ACCEPT [ISDEFERRED?] + [IF] >BODY + [THEN] EXECUTE EVALUATE CR TIME! CR ; diff --git a/MSP430-FORTH/MSP_EXP430FR5994/SD_TEST.4TH b/MSP430-FORTH/MSP_EXP430FR5994/SD_TEST.4TH index fe00008..63c8b99 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/SD_TEST.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/SD_TEST.4TH @@ -9,9 +9,9 @@ PWR_STATE MARKER {SD_TEST} -[UNDEFINED] AND [IF] -CODE AND -AND @R15+,R14 +[UNDEFINED] PLUS [IF] +CODE + +ADD @R15+,R14 MOV @R13+,R0 ENDCODE [THEN] @@ -20,18 +20,58 @@ ENDCODE CODE MAX CMP @R15,R14 S< ?GOTO FW1 - BW1 ADD #2,R15 +BW1 ADD #2,R15 MOV @R13+,R0 ENDCODE CODE MIN CMP @R15,R14 S< ?GOTO BW1 - FW1 MOV @R15+,R14 +FW1 MOV @R15+,R14 MOV @R13+,R0 ENDCODE [THEN] +[UNDEFINED] C@ [IF] +CODE C@ +MOV.B @R14,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] SPACE [IF] +: SPACE +$20 EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +CODE SPACES +CMP #0,R14 +0<> IF + PUSH R13 + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,R13 + SUB #1,R14 + 0= UNTIL + MOV @R1+,R13 +THEN +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] OVER [IF] +CODE OVER +MOV R14,-2(R15) +MOV @R15,R14 +SUB #2,R15 +MOV @R13+,R0 +ENDCODE +[THEN] + [UNDEFINED] U.R [IF] : U.R >R <# 0 # #S #> @@ -42,25 +82,40 @@ R> OVER - 0 MAX SPACES TYPE [UNDEFINED] DUMP [IF] CODE DUMP PUSH R13 -PUSH &BASE -MOV #$10,&BASE +PUSH &$1DDC +MOV #$10,&$1DDC ADD @R15,R14 LO2HI - SWAP OVER OVER - U. U. - $FFF0 AND + SWAP DO CR - I 7 U.R SPACE - I $10 + I + I 4 U.R SPACE + I 8 + I + DO I C@ 3 U.R LOOP + SPACE + I $10 + I 8 + DO I C@ 3 U.R LOOP SPACE SPACE I $10 + I - DO I C@ $7E MIN BL MAX EMIT LOOP + DO I C@ $7E MIN $20 MAX EMIT LOOP $10 +LOOP - R> BASE ! + R> $1DDC ! ; [THEN] + +CODE SD_EMIT +CMP #512,&$201E +U>= IF + MOV #WRITE,R9 + CALL 2(R9) +THEN +MOV &$201E,R8 +MOV.B R14,$1E00(R8) +ADD #1,&$201E +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE + : SD_TEST PWR_HERE CR diff --git a/MSP430-FORTH/MSP_EXP430FR5994/SD_TOOLS.4TH b/MSP430-FORTH/MSP_EXP430FR5994/SD_TOOLS.4TH index daa0a8d..eb44ae8 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/SD_TOOLS.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/SD_TOOLS.4TH @@ -3,16 +3,19 @@ ; SD_TOOLS.4th : BASIC TOOLS for SD Card : DIR FAT SECTOR CLUSTER ; --------------------------------------------------------------- -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {SD_TOOLS} [IF] DEFINED! - -[ELSE] +[UNDEFINED] {SD_TOOLS} [IF] PWR_STATE MARKER {SD_TOOLS} +[UNDEFINED] + [IF] +CODE + +ADD @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + [UNDEFINED] MAX [IF] CODE MAX @@ -31,75 +34,105 @@ ENDCODE [THEN] -[UNDEFINED] U.R [IF] -: U.R - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; +[UNDEFINED] C@ [IF] +CODE C@ +MOV.B @R14,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] SPACE [IF] +: SPACE +$20 EMIT ; [THEN] -[UNDEFINED] AND [IF] +[UNDEFINED] SPACES [IF] +CODE SPACES +CMP #0,R14 +0<> IF + PUSH R13 + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,R13 + SUB #1,R14 + 0= UNTIL + MOV @R1+,R13 +THEN +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] -CODE AND -AND @R15+,R14 +[UNDEFINED] OVER [IF] +CODE OVER +MOV R14,-2(R15) +MOV @R15,R14 +SUB #2,R15 MOV @R13+,R0 ENDCODE +[THEN] +[UNDEFINED] U.R [IF] +: U.R + >R <# 0 # #S #> + R> OVER - 0 MAX SPACES TYPE +; [THEN] [UNDEFINED] DUMP [IF] CODE DUMP PUSH R13 -PUSH &BASE -MOV #$10,&BASE +PUSH &$1DDC +MOV #$10,&$1DDC ADD @R15,R14 LO2HI - SWAP OVER OVER - U. U. - $FFF0 AND + SWAP DO CR - I 7 U.R SPACE - I $10 + I + I 4 U.R SPACE + I 8 + I + DO I C@ 3 U.R LOOP + SPACE + I $10 + I 8 + DO I C@ 3 U.R LOOP SPACE SPACE I $10 + I - DO I C@ $7E MIN BL MAX EMIT LOOP + DO I C@ $7E MIN $20 MAX EMIT LOOP $10 +LOOP - R> BASE ! + R> $1DDC ! ; [THEN] CODE SECTOR - MOV R14,R9 +BW1 MOV R14,R9 MOV @R15,R10 CALL &$1818 COLON <# #S #> TYPE SPACE $1E00 $200 DUMP CR ; -CODE FAT - SUB #4,R15 - MOV R14,2(R15) - MOV &$2008,0(R15) - MOV #0,R14 - JMP SECTOR -ENDCODE - CODE CLUSTER - MOV.B &$2012,R10 +BW2 MOV.B &$2012,R10 MOV @R15,R9 - RRA R10 - U< IF - BEGIN - ADD R9,R9 - ADDC R14,R14 - RRA R10 - U>= UNTIL - THEN + GOTO FW1 + BEGIN + ADD R9,R9 + ADDC R14,R14 +FW1 RRA R10 + U>= UNTIL ADD &$2010,R9 MOV R9,0(R15) ADDC #0,R14 - JMP SECTOR + GOTO BW1 +ENDCODE + +CODE FAT + SUB #4,R15 + MOV R14,2(R15) + MOV &$2008,0(R15) + MOV #0,R14 + GOTO BW1 ENDCODE CODE DIR @@ -107,7 +140,12 @@ CODE DIR MOV R14,2(R15) MOV &$202C,0(R15) MOV &$202E,R14 - JMP CLUSTER + CMP #0,R14 + 0<> ?GOTO BW2 + CMP #1,0(R15) + 0<> ?GOTO BW2 + MOV &$200E,0(R15) + GOTO BW1 ENDCODE @@ -115,7 +153,3 @@ RST_HERE [THEN] ECHO -; added : FAT to DUMP first sector of FAT1 and DIR for that of current DIRectory. -; added : SECTOR to DUMP a sector and CLUSTER for first sector of a cluster: -; include a decimal point to force 32 bits number, example : .2 CLUSTER - diff --git a/MSP430-FORTH/MSP_EXP430FR5994/TESTXASM.4TH b/MSP430-FORTH/MSP_EXP430FR5994/TESTXASM.4TH index 740c74f..dbf5c4c 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/TESTXASM.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/TESTXASM.4TH @@ -7,6 +7,119 @@ ECHO PWR_STATE +[UNDEFINED] PLUS [IF] +CODE + +ADD @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] MAX [IF] + +CODE MAX + CMP @R15,R14 + S< ?GOTO FW1 +BW1 ADD #2,R15 + MOV @R13+,R0 +ENDCODE + +CODE MIN + CMP @R15,R14 + S< ?GOTO BW1 +FW1 MOV @R15+,R14 + MOV @R13+,R0 +ENDCODE + +[THEN] + +[UNDEFINED] C@ [IF] +CODE C@ +MOV.B @R14,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] CONSTANT [IF] +: CONSTANT +DEFER +HI2LO +MOV @R1+,R13 +MOV #$1285,-4(R10) +MOV R14,-2(R10) +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] BL [IF] +#32 CONSTANT BL +[THEN] + +[UNDEFINED] SPACE [IF] +: SPACE +BL EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +CODE SPACES +CMP #0,R14 +0<> IF + PUSH R13 + BEGIN + LO2HI + BL EMIT + HI2LO + SUB #2,R13 + SUB #1,R14 + 0= UNTIL + MOV @R1+,R13 +THEN +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] OVER [IF] +CODE OVER +MOV R14,-2(R15) +MOV @R15,R14 +SUB #2,R15 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] U.R [IF] +: U.R + >R <# 0 # #S #> + R> OVER - 0 MAX SPACES TYPE +; +[THEN] + +[UNDEFINED] DUMP [IF] +CODE DUMP +PUSH R13 +PUSH &$1DDC +MOV #$10,&$1DDC +ADD @R15,R14 +LO2HI + SWAP + DO CR + I 4 U.R SPACE + I 8 + I + DO I C@ 3 U.R LOOP + SPACE + I $10 + I 8 + + DO I C@ 3 U.R LOOP + SPACE SPACE + I $10 + I + DO I C@ $7E MIN BL MAX EMIT LOOP + $10 +LOOP + R> $1DDC ! +; +[THEN] + +PWR_HERE + ; -------------------------------------------------------------------------------- ; DTCforthMSP430FR5xxx ASSEMBLER, OPCODES IV : Adda|Cmpa|Mova|Suba (without extended word) ; -------------------------------------------------------------------------------- @@ -384,11 +497,11 @@ PWR_STATE : %. -BASE @ %10 BASE ! SWAP 8 EMIT . BASE ! +$1DDC @ %10 $1DDC ! SWAP 8 EMIT . $1DDC ! ; : %U. -BASE @ %10 BASE ! SWAP 8 EMIT U. BASE ! ; +$1DDC @ %10 $1DDC ! SWAP 8 EMIT U. $1DDC ! ; PWR_HERE @@ -404,7 +517,7 @@ RRUX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %. +MOV #%.,R0 ENDCODE RRUX_T ; you should see %111100001111000 --> % @@ -418,12 +531,12 @@ PWR_STATE CODE RRUX_T MOV #$F0F0,R8 -RPT #0 +RPT #1 RRUX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %. +MOV #%.,R0 ENDCODE RRUX_T ; you should see %111100001111000 --> % @@ -432,12 +545,12 @@ PWR_STATE CODE RRUX_T MOV #$F0F0,R8 -RPT #3 +RPT #4 RRUX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %. +MOV #%.,R0 ENDCODE RRUX_T ; you should see %111100001111 --> % @@ -446,12 +559,12 @@ PWR_STATE CODE RRUX_T MOV #$F0F0,R8 -RPT #7 +RPT #8 RRUX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %. +MOV #%.,R0 ENDCODE RRUX_T ; you should see %11110000 --> % @@ -471,7 +584,7 @@ RRCX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %U. +MOV #%U.,R0 ENDCODE RRCX_T ; you should see %100000000000000 --> % @@ -485,12 +598,12 @@ PWR_STATE CODE RRCX_T MOV #$8000,R8 BIC #1,R2 -RPT #0 +RPT #1 RRCX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %U. +MOV #%U.,R0 ENDCODE RRCX_T ; you should see %100000000000000 --> % @@ -500,12 +613,12 @@ PWR_STATE CODE RRCX_T MOV #$8000,R8 BIC #1,R2 -RPT #7 +RPT #8 RRCX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %U. +MOV #%U.,R0 ENDCODE RRCX_T ; you should see %10000000 --> % @@ -523,7 +636,7 @@ RRAX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %. +MOV #%.,R0 ENDCODE RRAX_T ; you should see %-100000000000000 --> % @@ -537,12 +650,12 @@ PWR_STATE CODE RRAX_T MOV #$8000,R8 -RPT #0 +RPT #1 RRAX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %. +MOV #%.,R0 ENDCODE RRAX_T ; you should see %-100000000000000 --> % @@ -551,12 +664,12 @@ PWR_STATE CODE RRAX_T MOV #$8000,R8 -RPT #1 +RPT #2 RRAX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %. +MOV #%.,R0 ENDCODE RRAX_T ; you should see %-10000000000000 --> % @@ -565,12 +678,12 @@ PWR_STATE CODE RRAX_T MOV #$8000,R8 -RPT #2 +RPT #3 RRAX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %. +MOV #%.,R0 ENDCODE RRAX_T ; you should see %-1000000000000 --> % @@ -579,12 +692,12 @@ PWR_STATE CODE RRAX_T MOV #$8000,R8 -RPT #6 +RPT #7 RRAX R8 SUB #2,R15 MOV R14,0(R15) MOV R8,R14 -JMP %. +MOV #%.,R0 ENDCODE RRAX_T ; you should see %-100000000 --> % @@ -616,7 +729,7 @@ PWR_STATE CODE RLAX_T MOV #-1,R8 -RPT #0 +RPT #1 ADDX R8,R8 SUB #2,R15 MOV R14,0(R15) @@ -630,7 +743,7 @@ PWR_STATE CODE RLAX_T MOV #-1,R8 -RPT #1 +RPT #2 ADDX R8,R8 SUB #2,R15 MOV R14,0(R15) @@ -644,7 +757,7 @@ PWR_STATE CODE RLAX_T MOV #-1,R8 -RPT #2 +RPT #3 ADDX R8,R8 SUB #2,R15 MOV R14,0(R15) @@ -658,7 +771,7 @@ PWR_STATE CODE RLAX_T MOV #-1,R8 -RPT #7 +RPT #8 ADDX R8,R8 SUB #2,R15 MOV R14,0(R15) @@ -697,7 +810,7 @@ PWR_STATE CODE ADDX_T MOV #0,R8 MOV #-1,R9 -RPT #0 +RPT #1 ADDX R9,R8 SUB #2,R15 MOV R14,0(R15) @@ -712,7 +825,7 @@ PWR_STATE CODE ADDX_T MOV #0,R8 MOV #-1,R9 -RPT #1 +RPT #2 ADDX R9,R8 SUB #2,R15 MOV R14,0(R15) @@ -727,7 +840,7 @@ PWR_STATE CODE ADDX_T MOV #0,R8 MOV #-1,R9 -RPT #7 +RPT #8 ADDX R9,R8 SUB #2,R15 MOV R14,0(R15) @@ -767,7 +880,7 @@ PWR_STATE CODE SUBX_T MOV #0,R8 MOV #-1,R9 -RPT #0 +RPT #1 SUBX R9,R8 SUB #2,R15 MOV R14,0(R15) @@ -782,7 +895,7 @@ PWR_STATE CODE SUBX_T MOV #0,R8 MOV #-1,R9 -RPT #1 +RPT #2 SUBX R9,R8 SUB #2,R15 MOV R14,0(R15) @@ -797,7 +910,7 @@ PWR_STATE CODE SUBX_T MOV #0,R8 MOV #-1,R9 -RPT #7 +RPT #8 SUBX R9,R8 SUB #2,R15 MOV R14,0(R15) @@ -855,3 +968,4 @@ ENDCODE SUBX_T ; you should see 2 --> +RST_STATE diff --git a/MSP430-FORTH/MSP_EXP430FR5994/TSTWORDS.4TH b/MSP430-FORTH/MSP_EXP430FR5994/TSTWORDS.4TH index 4134fbc..fb92b9c 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/TSTWORDS.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/TSTWORDS.4TH @@ -37,7 +37,7 @@ LOOP_TEST \ you should see 0 1 2 3 4 5 6 7 --> ; : FIND_TEST \ FIND_TEST -- - BL WORD \ -- c-addr + $20 WORD \ -- c-addr 50000 0 DO \ -- c-addr DUP @@ -51,35 +51,35 @@ LOOP_TEST \ you should see 0 1 2 3 4 5 6 7 --> \ seeking $ word, FIND jumps all words on their first character so time of word loop is 20 cycles \ see FIND in the source file for more information - +\ \ FIND_TEST result @ 8MHz, monothread : 1,2s - +\ \ FIND_TEST $ results @ 8MHz, monothread, 201 words in vocabulary FORTH : \ 27 seconds with only FORTH vocabulary in CONTEXT \ 540 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) \ 2.6866 us / word, 21,49 cycles / word (for 20 cycles calculated (see FIND in source file) - - +\ +\ \ FIND_TEST $ results @ 8MHz, 2 threads, 201 words in vocabulary FORTH : \ 13 second with only FORTH vocabulary in CONTEXT \ 260 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) \ 1,293 us / word, 10,34 cycles / word - +\ \ FIND_TEST $ results @ 8MHz, 4 threads, 201 words in vocabulary FORTH : \ 8 second with only FORTH vocabulary in CONTEXT \ 160 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) \ 0,796 us / word, 6,37 cycles / word - +\ \ FIND_TEST $ results @ 8MHz, 8 threads, 201 words in vocabulary FORTH : \ 4.66 second with only FORTH vocabulary in CONTEXT \ 93 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) \ 0,4463 us / word, 3,7 cycles / word - +\ \ FIND_TEST $ results @ 8MHz, 16 threads, 201 words in vocabulary FORTH : \ 2,8 second with only FORTH vocabulary in CONTEXT \ 56 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) \ 0,278 us / word, 2,22 cycles / word - +\ \ -------- \ KEY test \ -------- diff --git a/MSP430-FORTH/MSP_EXP430FR5994/UTILITY.4TH b/MSP430-FORTH/MSP_EXP430FR5994/UTILITY.4TH index 950c421..ecdd66f 100644 --- a/MSP430-FORTH/MSP_EXP430FR5994/UTILITY.4TH +++ b/MSP430-FORTH/MSP_EXP430FR5994/UTILITY.4TH @@ -4,11 +4,7 @@ ; ------------------------------------------------------------------------------ -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {TOOLS} [IF] DEFINED! - -[ELSE] +[UNDEFINED] {TOOLS} [IF] PWR_STATE @@ -21,6 +17,30 @@ CODE ? ENDCODE [THEN] +[UNDEFINED] SPACE [IF] +: SPACE +$20 EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +CODE SPACES +CMP #0,R14 +0<> IF + PUSH R13 + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,R13 + SUB #1,R14 + 0= UNTIL + MOV @R1+,R13 +THEN +MOV @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + [UNDEFINED] .S [IF] CODE .S MOV R14,-2(R15) @@ -38,16 +58,16 @@ COLON . $08 EMIT $3E EMIT SPACE - OVER OVER > - 0= IF + 2DUP 1+ + U< IF DROP DROP EXIT THEN - BASE @ >R - $10 BASE ! + $1DDC @ >R + $10 $1DDC ! DO I @ U. 2 +LOOP - R> BASE ! + R> $1DDC ! ; [THEN] @@ -60,36 +80,51 @@ CODE .RS ENDCODE [THEN] -[UNDEFINED] AND [IF] +[UNDEFINED] + [IF] +CODE + +ADD @R15+,R14 +MOV @R13+,R0 +ENDCODE +[THEN] + +[UNDEFINED] C@ [IF] +CODE C@ +MOV.B @R14,R14 +MOV @R13+,R0 +ENDCODE +[THEN] +[UNDEFINED] AND [IF] CODE AND AND @R15+,R14 MOV @R13+,R0 ENDCODE - [THEN] -[UNDEFINED] PAD [IF] - -$1CE4 CONSTANT PAD - +[UNDEFINED] ROT [IF] +CODE ROT +MOV @R15,R10 +MOV R14,0(R15) +MOV 2(R15),R14 +MOV R10,2(R15) +MOV @R13+,R0 +ENDCODE [THEN] - [UNDEFINED] WORDS [IF] : WORDS CR -$1DCA @ PAD +$1DCA @ $1CE4 $1800 @ DUP + MOVE BEGIN 0 DUP $1800 @ DUP + 0 DO - DUP I PAD + @ + DUP I $1CE4 + @ U< IF DROP DROP - I DUP PAD + @ + I DUP $1CE4 + @ THEN 2 +LOOP ?DUP @@ -97,7 +132,7 @@ WHILE DUP 2 - @ ROT - PAD + + $1CE4 + ! DUP COUNT $7F AND @@ -113,18 +148,27 @@ DROP CODE MAX CMP @R15,R14 S< ?GOTO FW1 - BW1 ADD #2,R15 +BW1 ADD #2,R15 MOV @R13+,R0 ENDCODE CODE MIN CMP @R15,R14 S< ?GOTO BW1 - FW1 MOV @R15+,R14 +FW1 MOV @R15+,R14 MOV @R13+,R0 ENDCODE [THEN] +[UNDEFINED] OVER [IF] +CODE OVER +MOV R14,-2(R15) +MOV @R15,R14 +SUB #2,R15 +MOV @R13+,R0 +ENDCODE +[THEN] + [UNDEFINED] U.R [IF] : U.R >R <# 0 # #S #> @@ -135,11 +179,11 @@ R> OVER - 0 MAX SPACES TYPE [UNDEFINED] DUMP [IF] CODE DUMP PUSH R13 -PUSH &BASE -MOV #$10,&BASE +PUSH &$1DDC +MOV #$10,&$1DDC ADD @R15,R14 LO2HI - SWAP OVER OVER + SWAP 2DUP U. U. $FFF0 AND DO CR @@ -151,13 +195,12 @@ LO2HI DO I C@ 3 U.R LOOP SPACE SPACE I $10 + I - DO I C@ $7E MIN BL MAX EMIT LOOP + DO I C@ $7E MIN $20 MAX EMIT LOOP $10 +LOOP - R> BASE ! + R> $1DDC ! ; [THEN] RST_HERE [THEN] -ECHO diff --git a/MSP430-FORTH/PROG100k.f b/MSP430-FORTH/PROG100k.f index b39bc71..0f63114 100644 --- a/MSP430-FORTH/PROG100k.f +++ b/MSP430-FORTH/PROG100k.f @@ -1,7 +1,7 @@ \ -*- coding: utf-8 -*- ; ----------------------------------- -; PROG100k.f = 110 x RC5toLCD.f +; PROG100k.f = 77 x RC5toLCD.f ; ----------------------------------- \ TARGET SELECTION @@ -94,68 +94,23 @@ \ \ rc5 <--- OUT IR_Receiver (1 TSOP32236) -PWR_STATE +RST_STATE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -176,10 +131,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -188,107 +143,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -303,24 +228,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -375,45 +298,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -441,33 +381,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -484,7 +414,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -500,8 +430,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -516,132 +445,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -662,10 +538,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -674,107 +550,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -789,24 +635,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -861,45 +705,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -927,33 +788,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -970,7 +821,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -986,8 +837,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -1002,132 +852,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -1148,10 +945,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -1160,107 +957,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -1275,24 +1042,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -1347,51 +1112,68 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ -\ ------------------------------\ - \ -CODE START \ \ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; + +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. +\ ------------------------------\ +\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 +\ - - \CNTL Counter lentgh \ 00 = 16 bits +\ -- \TBSSEL TimerB clock select \ 10 = SMCLK +\ -- \ID input divider \ 10 = /4 +\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 \ - \TBCLR TimerB Clear \ - \TBIE \ -\TBIFG @@ -1413,33 +1195,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -1456,7 +1228,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -1472,8 +1244,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -1488,132 +1259,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -1634,10 +1352,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -1646,107 +1364,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -1761,24 +1449,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -1833,45 +1519,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -1899,33 +1602,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -1942,7 +1635,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -1958,8 +1651,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -1974,132 +1666,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -2120,10 +1759,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -2132,107 +1771,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -2247,24 +1856,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -2319,45 +1926,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -2385,33 +2009,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -2428,7 +2042,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -2444,8 +2058,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -2460,133 +2073,80 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2 UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE -[THEN] - \ - -[UNDEFINED] U.R [IF] \ defined in {UTILITY} -: U.R \ u n -- display u unsigned in n width (n >= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- \ \ if read : -- %0000RRRR @@ -2606,10 +2166,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -2618,107 +2178,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -2733,24 +2263,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -2805,45 +2333,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -2871,33 +2416,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -2914,7 +2449,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -2930,8 +2465,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -2946,132 +2480,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -3092,10 +2573,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -3104,107 +2585,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -3219,24 +2670,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -3291,45 +2740,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -3357,33 +2823,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -3400,7 +2856,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -3416,8 +2872,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -3432,132 +2887,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -3578,10 +2980,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -3590,107 +2992,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -3705,24 +3077,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -3777,45 +3147,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -3843,33 +3230,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] + MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -3886,7 +3263,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -3902,8 +3279,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -3918,132 +3294,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -4064,10 +3387,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -4076,107 +3399,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -4191,24 +3484,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -4263,45 +3554,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -4329,33 +3637,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -4372,7 +3670,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -4388,8 +3686,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -4404,132 +3701,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -4550,10 +3794,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -4562,107 +3806,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -4677,24 +3891,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -4749,45 +3961,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -4815,33 +4044,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -4858,7 +4077,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -4874,8 +4093,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -4890,132 +4108,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -5036,10 +4201,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -5048,107 +4213,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -5163,24 +4298,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -5235,45 +4368,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -5301,33 +4451,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -5344,7 +4484,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -5360,8 +4500,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -5376,132 +4515,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -5522,10 +4608,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -5534,107 +4620,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -5649,24 +4705,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -5721,45 +4775,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -5787,33 +4858,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -5830,7 +4891,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -5846,8 +4907,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -5862,132 +4922,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -6008,10 +5015,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -6020,107 +5027,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -6135,24 +5112,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -6207,45 +5182,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -6273,33 +5265,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -6316,7 +5298,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -6332,8 +5314,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -6348,132 +5329,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -6494,10 +5422,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -6506,107 +5434,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -6621,24 +5519,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -6693,45 +5589,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -6759,33 +5672,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -6802,7 +5705,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -6818,8 +5721,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -6834,132 +5736,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -6980,10 +5829,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -6992,107 +5841,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -7107,24 +5926,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -7179,45 +5996,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -7245,33 +6079,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -7288,7 +6112,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -7304,8 +6128,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -7320,132 +6143,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -7466,10 +6236,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -7478,107 +6248,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -7593,24 +6333,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -7665,45 +6403,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -7731,33 +6486,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -7774,7 +6519,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -7790,8 +6535,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -7806,132 +6550,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -7952,10 +6643,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -7964,107 +6655,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -8079,24 +6740,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -8151,45 +6810,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -8217,33 +6893,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -8260,7 +6926,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -8276,8 +6942,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -8292,132 +6957,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -8438,10 +7050,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -8450,107 +7062,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -8565,24 +7147,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -8637,45 +7217,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -8703,33 +7300,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -8746,7 +7333,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -8762,8 +7349,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -8778,132 +7364,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -8924,10 +7457,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -8936,107 +7469,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -9051,24 +7554,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -9123,45 +7624,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -9189,33 +7707,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -9232,7 +7740,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -9248,8 +7756,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -9264,132 +7771,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -9410,10 +7864,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -9422,107 +7876,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -9537,24 +7961,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -9609,45 +8031,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -9675,33 +8114,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -9718,7 +8147,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -9734,8 +8163,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -9750,132 +8178,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -9896,10 +8271,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -9908,107 +8283,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -10023,24 +8368,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -10095,45 +8438,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -10161,33 +8521,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -10204,7 +8554,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -10220,8 +8570,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -10236,132 +8585,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -10382,10 +8678,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -10394,107 +8690,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -10509,24 +8775,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -10581,45 +8845,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -10647,33 +8928,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -10690,7 +8961,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -10706,8 +8977,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -10722,132 +8992,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -10868,10 +9085,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -10880,107 +9097,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -10995,24 +9182,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -11067,45 +9252,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -11133,33 +9335,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -11176,7 +9368,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -11192,8 +9384,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -11208,132 +9399,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -11354,10 +9492,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -11366,107 +9504,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -11481,24 +9589,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -11553,45 +9659,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ -\ ------------------------------\ - \ -CODE START \ +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; + +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -11619,33 +9742,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -11662,7 +9775,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -11678,8 +9791,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -11694,132 +9806,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -11840,10 +9899,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -11852,107 +9911,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -11967,24 +9996,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -12039,45 +10066,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -12105,33 +10149,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -12148,7 +10182,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -12164,8 +10198,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -12180,132 +10213,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -12326,10 +10306,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -12338,107 +10318,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -12453,24 +10403,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -12525,45 +10473,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -12591,33 +10556,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -12634,7 +10589,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -12650,8 +10605,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -12666,133 +10620,80 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2 UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE -[THEN] - \ - -[UNDEFINED] U.R [IF] \ defined in {UTILITY} -: U.R \ u n -- display u unsigned in n width (n >= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- \ \ if read : -- %0000RRRR @@ -12812,10 +10713,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -12824,107 +10725,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -12939,24 +10810,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -13011,45 +10880,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -13077,33 +10963,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -13120,7 +10996,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -13136,8 +11012,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -13152,132 +11027,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -13298,10 +11120,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -13310,107 +11132,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -13425,24 +11217,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -13497,45 +11287,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -13563,33 +11370,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -13606,7 +11403,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -13622,8 +11419,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -13638,132 +11434,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -13784,10 +11527,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -13796,107 +11539,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -13911,24 +11624,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -13983,45 +11694,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -14049,33 +11777,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -14092,7 +11810,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -14108,8 +11826,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -14124,132 +11841,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -14270,10 +11934,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -14282,107 +11946,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -14397,24 +12031,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -14469,45 +12101,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -14535,33 +12184,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -14578,7 +12217,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -14594,8 +12233,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -14610,132 +12248,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -14756,10 +12341,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -14768,107 +12353,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -14883,24 +12438,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -14955,45 +12508,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -15021,33 +12591,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -15064,7 +12624,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -15080,8 +12640,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -15096,132 +12655,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -15242,10 +12748,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -15254,107 +12760,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -15369,24 +12845,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] +MOV #1778,X \ RC5_Period * 1us +MOV #14,W \ count of loop +BEGIN \ +\ ******************************\ +\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -15441,45 +12915,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -15507,33 +12998,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -15550,7 +13031,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -15566,8 +13047,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -15582,132 +13062,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -15728,10 +13155,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -15740,107 +13167,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -15855,24 +13252,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -15927,45 +13322,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -15993,33 +13405,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -16036,7 +13438,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -16052,8 +13454,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -16068,132 +13469,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -16214,10 +13562,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -16226,107 +13574,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -16341,24 +13659,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -16413,45 +13729,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -16479,33 +13812,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -16522,7 +13845,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -16538,8 +13861,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -16554,132 +13876,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ +[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application +MARKER {RC5TOLCD} - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -16700,10 +13969,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -16712,107 +13981,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -16827,24 +14066,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -16899,45 +14136,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -16965,33 +14219,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -17008,7 +14252,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -17024,8 +14268,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -17040,132 +14283,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -17186,10 +14376,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -17198,107 +14388,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -17313,24 +14473,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -17385,45 +14543,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -17451,33 +14626,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -17494,7 +14659,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -17510,8 +14675,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -17526,132 +14690,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -17672,10 +14783,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -17684,107 +14795,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -17799,24 +14880,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -17871,47 +14950,64 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ -\ ------------------------------\ - \ -CODE START \ \ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; + +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. +\ ------------------------------\ +\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits \ -- \TBSSEL TimerB clock select \ 10 = SMCLK \ -- \ID input divider \ 10 = /4 @@ -17937,33 +15033,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -17980,7 +15066,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -17996,8 +15082,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -18012,132 +15097,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -18158,10 +15190,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -18170,107 +15202,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -18285,24 +15287,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -18357,45 +15357,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -18423,33 +15440,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -18466,7 +15473,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -18482,8 +15489,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -18498,132 +15504,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -18644,10 +15597,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -18656,107 +15609,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -18771,24 +15694,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -18843,45 +15764,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -18909,33 +15847,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -18952,7 +15880,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -18968,8 +15896,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -18984,133 +15911,80 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2 UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE -[THEN] - \ - -[UNDEFINED] U.R [IF] \ defined in {UTILITY} -: U.R \ u n -- display u unsigned in n width (n >= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- \ \ if read : -- %0000RRRR @@ -19130,10 +16004,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -19142,107 +16016,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -19257,24 +16101,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -19329,45 +16171,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -19395,33 +16254,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -19438,7 +16287,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -19454,8 +16303,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -19470,132 +16318,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -19616,10 +16411,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -19628,107 +16423,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -19743,24 +16508,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -19815,45 +16578,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -19881,33 +16661,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -19924,7 +16694,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -19940,8 +16710,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -19956,132 +16725,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -20102,10 +16818,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -20114,107 +16830,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -20229,24 +16915,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -20301,45 +16985,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -20367,33 +17068,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -20410,7 +17101,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -20426,8 +17117,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -20442,132 +17132,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -20588,10 +17225,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -20600,107 +17237,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -20715,24 +17322,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -20787,45 +17392,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -20853,33 +17475,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -20896,7 +17508,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -20912,8 +17524,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -20928,132 +17539,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -21074,10 +17632,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -21086,107 +17644,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -21201,24 +17729,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -21273,45 +17799,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -21339,33 +17882,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -21382,7 +17915,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -21398,8 +17931,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -21414,132 +17946,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -21560,10 +18039,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -21572,107 +18051,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -21687,24 +18136,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] +MOV #1778,X \ RC5_Period * 1us +MOV #14,W \ count of loop +BEGIN \ +\ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -21759,45 +18206,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -21825,33 +18289,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -21868,7 +18322,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -21884,8 +18338,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -21900,132 +18353,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -22046,10 +18446,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -22058,107 +18458,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -22173,24 +18543,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -22245,45 +18613,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -22311,33 +18696,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -22354,7 +18729,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -22370,8 +18745,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -22386,132 +18760,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -22532,10 +18853,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -22544,107 +18865,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -22659,24 +18950,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -22731,45 +19020,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -22797,33 +19103,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -22840,7 +19136,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -22856,8 +19152,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -22872,132 +19167,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE +[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application +MARKER {RC5TOLCD} - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -23018,10 +19260,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -23030,107 +19272,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -23145,24 +19357,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -23217,45 +19427,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -23283,33 +19510,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -23326,7 +19543,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -23342,8 +19559,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -23358,132 +19574,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -23504,10 +19667,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -23516,107 +19679,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -23631,24 +19764,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -23703,45 +19834,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -23769,33 +19917,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -23812,7 +19950,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -23828,8 +19966,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -23844,132 +19981,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -23990,10 +20074,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -24002,107 +20086,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -24117,24 +20171,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -24189,48 +20241,65 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ -\ ------------------------------\ - \ -CODE START \ \ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; + +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. +\ ------------------------------\ +\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 +\ - - \CNTL Counter lentgh \ 00 = 16 bits \ -- \TBSSEL TimerB clock select \ 10 = SMCLK \ -- \ID input divider \ 10 = /4 \ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 @@ -24255,33 +20324,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -24298,7 +20357,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -24314,8 +20373,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -24330,132 +20388,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -24476,10 +20481,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -24488,107 +20493,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -24603,24 +20578,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -24675,45 +20648,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -24741,33 +20731,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -24784,7 +20764,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -24800,8 +20780,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -24816,132 +20795,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -24962,10 +20888,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -24974,107 +20900,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -25089,24 +20985,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -25161,45 +21055,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -25227,33 +21138,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -25270,7 +21171,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -25286,8 +21187,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -25302,133 +21202,80 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2 UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE -[THEN] - \ - -[UNDEFINED] U.R [IF] \ defined in {UTILITY} -: U.R \ u n -- display u unsigned in n width (n >= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- \ \ if read : -- %0000RRRR @@ -25448,10 +21295,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -25460,107 +21307,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -25575,24 +21392,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -25647,45 +21462,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -25713,33 +21545,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -25756,7 +21578,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -25772,8 +21594,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -25788,132 +21609,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -25934,10 +21702,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -25946,107 +21714,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -26061,24 +21799,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -26133,45 +21869,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -26199,33 +21952,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -26242,7 +21985,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -26258,8 +22001,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -26274,132 +22016,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -26420,10 +22109,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -26432,107 +22121,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -26547,24 +22206,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -26619,45 +22276,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -26685,33 +22359,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -26728,7 +22392,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -26744,8 +22408,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -26760,132 +22423,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -26906,10 +22516,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -26918,107 +22528,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -27033,24 +22613,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -27105,45 +22683,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -27171,33 +22766,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -27214,7 +22799,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -27230,8 +22815,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -27246,132 +22830,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -27392,10 +22923,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -27404,107 +22935,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -27519,24 +23020,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -27591,45 +23090,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -27657,33 +23173,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -27700,7 +23206,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -27716,8 +23222,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -27732,132 +23237,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -27878,10 +23330,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -27890,107 +23342,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -28005,24 +23427,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] +MOV #1778,X \ RC5_Period * 1us +MOV #14,W \ count of loop +BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -28077,45 +23497,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -28143,33 +23580,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -28186,7 +23613,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -28202,8 +23629,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -28218,132 +23644,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -28364,10 +23737,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -28376,107 +23749,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -28491,24 +23834,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -28563,45 +23904,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -28629,33 +23987,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -28672,7 +24020,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -28688,8 +24036,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -28704,132 +24051,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -28850,10 +24144,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -28862,107 +24156,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -28977,24 +24241,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -29049,45 +24311,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -29115,33 +24394,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -29158,7 +24427,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -29174,8 +24443,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -29190,132 +24458,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -29336,10 +24551,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -29348,107 +24563,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -29463,24 +24648,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -29535,45 +24718,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -29601,33 +24801,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -29644,7 +24834,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -29660,8 +24850,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -29676,132 +24865,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -29822,10 +24958,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -29834,107 +24970,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -29949,24 +25055,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -30021,45 +25125,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -30087,33 +25208,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -30130,7 +25241,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -30146,8 +25257,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -30162,132 +25272,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -30308,10 +25365,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -30320,107 +25377,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -30435,24 +25462,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -30507,45 +25532,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -30573,33 +25615,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -30616,7 +25648,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -30632,8 +25664,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -30648,132 +25679,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -30794,10 +25772,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -30806,107 +25784,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -30921,24 +25869,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -30993,45 +25939,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -31059,33 +26022,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -31102,7 +26055,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -31118,8 +26071,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -31134,132 +26086,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -31280,10 +26179,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -31292,107 +26191,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -31407,24 +26276,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -31479,45 +26346,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -31545,33 +26429,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -31588,7 +26462,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -31604,8 +26478,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -31620,132 +26493,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -31766,10 +26586,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -31778,107 +26598,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -31893,24 +26683,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -31965,45 +26753,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -32031,33 +26836,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -32074,7 +26869,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -32090,8 +26885,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -32106,132 +26900,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -32252,10 +26993,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -32264,107 +27005,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -32379,24 +27090,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -32451,45 +27160,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -32517,33 +27243,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -32560,7 +27276,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -32576,8 +27292,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -32592,132 +27307,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -32738,10 +27400,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -32750,107 +27412,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -32865,24 +27497,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -32937,45 +27567,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -33003,33 +27650,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -33046,7 +27683,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -33062,8 +27699,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -33078,132 +27714,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -33224,10 +27807,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -33236,107 +27819,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -33351,24 +27904,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -33423,45 +27974,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -33489,33 +28057,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -33532,7 +28090,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -33548,8 +28106,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -33564,132 +28121,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -33710,10 +28214,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -33722,107 +28226,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -33837,24 +28311,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -33909,45 +28381,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -33975,33 +28464,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -34018,7 +28497,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -34034,8 +28513,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -34050,132 +28528,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -34196,10 +28621,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -34208,107 +28633,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -34323,24 +28718,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -34395,45 +28788,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -34461,33 +28871,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -34504,7 +28904,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -34520,8 +28920,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -34536,132 +28935,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -34682,10 +29028,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -34694,107 +29040,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -34809,24 +29125,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -34881,45 +29195,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -34947,33 +29278,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -34990,7 +29311,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -35006,8 +29327,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -35022,132 +29342,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -35168,10 +29435,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -35180,107 +29447,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -35295,24 +29532,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -35367,45 +29602,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -35433,33 +29685,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -35476,7 +29718,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -35492,8 +29734,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -35508,133 +29749,80 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2 UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE -[THEN] - \ - -[UNDEFINED] U.R [IF] \ defined in {UTILITY} -: U.R \ u n -- display u unsigned in n width (n >= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- \ \ if read : -- %0000RRRR @@ -35654,10 +29842,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -35666,107 +29854,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -35781,24 +29939,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -35853,45 +30009,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -35919,33 +30092,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -35962,7 +30125,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -35978,8 +30141,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -35994,132 +30156,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -36140,10 +30249,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -36152,107 +30261,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE - \ -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -36267,24 +30346,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -36339,45 +30416,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + +\ ------------------------------\ +CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ - \ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -36405,33 +30499,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -36448,7 +30532,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -36464,8 +30548,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -36480,132 +30563,79 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet +\ ------------------------------\ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP +\ ------------------------------\ +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - \ MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... +CODE 20_US \ n -- n * 20 us +BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 + BIT #1,&LCD_TIM_CTL \ 3 + 0<> UNTIL \ 2 loop until LCD_TIM_IFG set + BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG + SUB #1,TOS \ 1 +U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= +MOV @PSP+,TOS \ 2 +MOV @IP+,PC \ 4 ENDCODE - \ CODE TOP_LCD \ LCD Sample \ \ if write : %xxxxWWWW -- @@ -36626,10 +30656,10 @@ THEN \ read LCD bits pattern AND.B #LCD_DB,TOS \ MOV @IP+,PC ENDCODE - \ -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -36638,107 +30668,77 @@ COLON \ high level word starts here TOP_LCD 2 20_US \ write high nibble first TOP_LCD 2 20_US ; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC + GOTO BW1 ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM - \ \ ******************************\ ASM RC5_INT \ wake up on Px.RC5 change interrupt @@ -36753,24 +30753,22 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 +\ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? +\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value +\ [THEN] +FREQ_KHZ @ 16000 = [IF] \ 16 MHz ? + MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register +[THEN] +FREQ_KHZ @ 24000 = [IF] \ 24 MHz ? + MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register +[THEN] MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) MOV #14,W \ count of loop BEGIN \ \ ******************************\ \ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period \ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R \ RC5_Compute_3/4_Period: \ | RRUM #1,X \ X=1/2 cycle | @@ -36825,45 +30823,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM - \ \ ------------------------------\ -ASM BACKGROUND \ +ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ +\ ******************************\ +\ here start all interrupts \ +\ ******************************\ +\ here return all interrupts \ +\ ******************************\ +AGAIN \ ENDASM \ + \ ------------------------------\ - \ +CODE STOP \ stops multitasking, must to be used before downloading app +\ ------------------------------\ +\ restore default action of primary DEFERred word SLEEP (assembly version) +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. + ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP + MOV X,-2(X) \ restore the default background +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM +ECHO \ +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. +; -CODE START \ +\ ------------------------------\ +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -36891,33 +30906,23 @@ CODE START \ \ -------------------------------\ \ LCD_TIM_EX0 \ \ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) +\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ +[THEN] +FREQ_KHZ @ 24000 = [IF] \ if 24 MHz + MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) +[THEN] MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -36934,7 +30939,7 @@ CODE START \ BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -36950,8 +30955,7 @@ CODE START \ \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -36966,16234 +30970,68 @@ CODE START \ \ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet \ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - -\ ------------------------------\ -\ Init LCD 2x20 \ -\ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME - ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -[DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application - -[DEFINED] ASM [IF] \ security test - \ -MARKER {RC5TOLCD} - \ -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - \ -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - \ - -\ CODE 20_US \ n -- n * 20 us -\ BEGIN \ 3 cycles loop + 6~ -\ \ MOV #5,W \ 3 MCLK = 1 MHz -\ \ MOV #23,W \ 3 MCLK = 4 MHz -\ \ MOV #51,W \ 3 MCLK = 8 MHz -\ MOV #104,W \ 3 MCLK = 16 MHz -\ \ MOV #158,W \ 3 MCLK = 24 MHz -\ BEGIN \ 3 cycles loop ==> 3 * W / F us = 100 us - 1 @ 8 MHz -\ SUB #1,W \ 1 -\ 0= UNTIL \ 2 -\ SUB #1,TOS \ 1 -\ 0= UNTIL \ 2 -\ MOV @PSP+,TOS \ 2 -\ MOV @IP+,PC \ 4 -\ ENDCODE -\ \ - -CODE 20_US \ n -- n * 20 us -BEGIN \ here we presume that LCD_TIM_IFG = 1... - BEGIN - BIT #1,&LCD_TIM_CTL \ 3 - 0<> UNTIL \ 2 loop until LCD_TIM_IFG set - BIC #1,&LCD_TIM_CTL \ 3 clear LCD_TIM_IFG - SUB #1,TOS \ 1 -U< UNTIL \ 2 ...so add a dummy loop with U< instead of 0= -MOV @PSP+,TOS \ 2 -MOV @IP+,PC \ 4 -ENDCODE - \ - -CODE TOP_LCD \ LCD Sample -\ \ if write : %xxxxWWWW -- -\ \ if read : -- %0000RRRR - BIS.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 0-->1 - BIT.B #LCD_RW,&LCD_CMD_IN \ lcd_rw test -0= IF \ write LCD bits pattern - AND.B #LCD_DB,TOS \ - MOV.B TOS,&LCD_DB_OUT \ send LCD_Data - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV @PSP+,TOS \ - MOV @IP+,PC -THEN \ read LCD bits pattern - SUB #2,PSP - MOV TOS,0(PSP) - BIC.B #LCD_EN,&LCD_CMD_OUT \ lcd_en 1-->0 ==> strobe data - MOV.B &LCD_DB_IN,TOS \ get LCD_Data - AND.B #LCD_DB,TOS \ - MOV @IP+,PC -ENDCODE - \ - -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ - MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL - RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH - BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 - BIS.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as output -COLON \ high level word starts here - TOP_LCD 2 20_US \ write high nibble first - TOP_LCD 2 20_US -; - \ - -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - \ - -CODE LCD_WrF \ func -- Write Fonction - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - \ - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - \ - -: LCD_Home - $02 LCD_WrF 100 20_us -; - \ - -[UNDEFINED] OR [IF] - \ -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - \ - -[THEN] - \ -: LCD_Entry_set $04 OR LCD_WrF ; - \ -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - \ -: LCD_DSP_Shift $10 OR LCD_WrF ; - \ -: LCD_Fn_Set $20 OR LCD_WrF ; - \ -: LCD_CGRAM_Set $40 OR LCD_WrF ; - \ -: LCD_Goto $80 OR LCD_WrF ; - \ -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - \ - -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - \ - -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE - \ - - -\ ******************************\ -ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! -\ ******************************\ -\ XOR.B #LED1,&LED1_OUT \ to visualise WDT -BIT.B #SW2,&SW2_IN \ test switch S2 -0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 - U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment - THEN -ELSE - BIT.B #SW1,&SW1_IN \ test switch S1 input - 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V - U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement - THEN \ - THEN \ -THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 -ENDASM - \ - -\ ******************************\ -ASM RC5_INT \ wake up on Px.RC5 change interrupt -\ ******************************\ -\ IR_RC5 driver \ IP,S,T,W,X,Y registers are free for use -\ ******************************\ -\ \ in : SR(9)=old Toggle bit memory (ADD on) -\ \ SMclock = 8|16|24 MHz -\ \ use : T,W,X,Y, RC5_TIM_ timer, RC5_TIM_R register -\ \ out : X = 0 C6 C5 C4 C3 C2 C1 C0 -\ \ SR(9)=new Toggle bit memory (ADD on) -\ ******************************\ -\ RC5_FirstStartBitHalfCycle: \ -\ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) -\ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register ( 125kHz| 1MHz | 2MHZ | 4MHZ | 8MHZ ), reset value - MOV #1,&RC5_TIM_EX0 \ predivide by 2 in RC5_TIM_EX0 register ( 250kHZ| 2MHz | 4MHZ | 8MHZ | 16MHZ ) -\ MOV #2,&RC5_TIM_EX0 \ predivide by 3 in RC5_TIM_EX0 register ( 375kHz| 3MHz | 6MHZ | 12MHZ | 24MHZ ) -\ MOV #3,&RC5_TIM_EX0 \ predivide by 4 in RC5_TIM_EX0 register ( 500kHZ| 4MHz | 8MHZ | 16MHZ ) -\ MOV #4,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 625kHz| 5MHz | 10MHZ | 20MHZ ) -\ MOV #5,&RC5_TIM_EX0 \ predivide by 6 in RC5_TIM_EX0 register ( 750kHz| 6MHz | 12MHZ | 24MHZ ) -\ MOV #6,&RC5_TIM_EX0 \ predivide by 7 in RC5_TIM_EX0 register ( 875kHz| 7MHz | 14MHZ | 28MHZ ) -\ MOV #7,&RC5_TIM_EX0 \ predivide by 8 in RC5_TIM_EX0 register ( 1MHz | 8MHz | 16MHZ | 32MHZ ) -MOV #1778,X \ RC5_Period * 1us -\ MOV #222,X \ RC5_Period * 8us (SMCLK/1 and first column above) -MOV #14,W \ count of loop -BEGIN \ -\ ******************************\ -\ RC5_HalfCycle \ <--- loop back ---+ with readjusted RC5_Period -\ ******************************\ | -\ MOV #%1000100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/1 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1002100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/2 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ MOV #%1010100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/4 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -MOV #%1011100100,&RC5_TIM_CTL \ (re)start timer_A | SMCLK/8 time interval,free running,clear RC5_TIM__IFG and RC5_TIM_R -\ RC5_Compute_3/4_Period: \ | - RRUM #1,X \ X=1/2 cycle | - MOV X,Y \ ^ - RRUM #1,Y \ Y=1/4 - ADD X,Y \ Y=3/4 cycle - BEGIN CMP Y,&RC5_TIM_R \ 3 wait 1/2 + 3/4 cycle = n+1/4 cycles - U>= UNTIL \ 2 -\ ******************************\ -\ RC5_SampleOnFirstQuarter \ at n+1/4 cycles, we sample RC5_input, ST2/C6 bit first -\ ******************************\ - BIT.B #RC5,&IR_IN \ C_flag = IR bit - ADDC T,T \ C_flag <-- T(15):T(0) <-- C_flag - MOV.B &IR_IN,&IR_IES \ preset Px_IES.y state for next IFG - BIC.B #RC5,&IR_IFG \ clear Px_IFG.y after 4/4 cycle pin change - SUB #1,W \ decrement count loop -\ \ count = 13 ==> T = x x x x x x x x |x x x x x x x /C6 -\ \ count = 0 ==> T = x x /C6 Tg A4 A3 A2 A1|A0 C5 C4 C3 C2 C1 C0 1 -0<> WHILE \ ----> out of loop ----+ - ADD X,Y \ | Y = n+3/4 cycles = time out because n+1/2 cycles edge is always present - BEGIN \ | - MOV &RC5_TIM_R,X \ 3 | X grows from n+1/4 up to n+3/4 cycles - CMP Y,X \ 1 | cycle time out of bound ? - U>= IF \ 2 ^ | yes: - BIC #$30,&RC5_TIM_CTL \ | | stop timer - GOTO BW1 \ | | quit on truncated RC5 message - THEN \ | | - BIT.B #RC5,&IR_IFG \ 3 | | n+1/2 cycles edge is always present - 0<> UNTIL \ 2 | | -REPEAT \ ----> loop back --+ | with X = new RC5_period value -\ ******************************\ | -\ RC5_SampleEndOf: \ <---------------------+ -\ ******************************\ -BIC #$30,&RC5_TIM_CTL \ stop timer -\ ******************************\ -\ RC5_ComputeNewRC5word \ -\ ******************************\ -RLAM #1,T \ T = x /C6 Tg A4 A3 A2 A1 A0|C5 C4 C3 C2 C1 C0 1 0 -MOV.B T,X \ X = C5 C4 C3 C2 C1 C0 1 0 -RRUM #2,X \ X = 0 0 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_ComputeC6bit \ -\ ******************************\ -BIT #BIT14,T \ test /C6 bit in T -0= IF BIS #BIT6,X \ set C6 bit in X -THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 -\ ******************************\ -\ RC5_CommandByteIsDone \ -- BASE RC5_code -\ ******************************\ -\ Only New_RC5_Command ADD_ON \ use SR(9) bit as toggle bit -\ ******************************\ -RRUM #3,T \ new toggle bit = T(13) ==> T(10) -XOR @RSP,T \ (new XOR old) Toggle bits -BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! -XOR #UF10,0(RSP) \ 5 toggle bit memory -\ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR - ['] LCD_WrC IS EMIT \ redirects EMIT - CR ." $" 2 U.R \ print IR_RC5 code - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ -ENDASM - \ - -\ ------------------------------\ -ASM BACKGROUND \ -\ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -MOV #SLEEP,X \ 2 Must be the last statement of BACKGROUND -ADD #4,X \ 1 X = BODY of SLEEP -MOV X,PC \ 3 -ENDASM \ -\ ------------------------------\ - \ - -CODE START \ -\ ------------------------------\ -\ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 -\ - - \CNTL Counter lentgh \ 00 = 16 bits -\ -- \TBSSEL TimerB clock select \ 10 = SMCLK -\ -- \ID input divider \ 10 = /4 -\ -- \MC Mode Control \ 01 = up to LCD_TIM_CCR0 -\ - \TBCLR TimerB Clear -\ - \TBIE -\ -\TBIFG -\ -------------------------------\ -\ LCD_TIM_CCTLx = %0000 0000 0110 0000\$3C{2,4,6,8,A,C,E} -\ -- \CM Capture Mode -\ -- \CCIS -\ - \SCS -\ -- \CLLD -\ - \CAP -\ --- \OUTMOD \ 011 = set/reset -\ - \CCIE -\ - \CCI -\ - \OUT -\ - \COV -\ -\CCIFG -\ -------------------------------\ -\ LCD_TIM_CCRx \ -\ -------------------------------\ -\ LCD_TIM_EX0 \ -\ ------------------------------\ -\ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo, works without interrupt -\ ------------------------------\ -\ MOV #%1000010100,&LCD_TIM_CTL \ SMCLK/1, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (1 MHZ) -\ ------------------------------\ -\ MOV #%1001010100,&LCD_TIM_CTL \ SMCLK/2, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (2 MHZ) -\ ------------------------------\ -\ MOV #%1010010100,&LCD_TIM_CTL \ SMCLK/4, up mode, clear timer, no int -\ MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (4 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) -\ ------------------------------\ - MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int - MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) -\ ------------------------------\ -\ MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int -\ MOV #2,&LCD_TIM_EX0 \ predivide by 3 in LCD_TIM_EX0 register (24 MHZ) -\ ------------------------------\ - MOV #19,&LCD_TIM_CCR0 \ 19+1=20*1us=20us -\ ------------------------------\ -\ set LCD_TIM_.2 to generate PWM for LCD_Vo -\ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) -\ ------------------------------\ - BIS.B #LCDVo,&LCDVo_DIR \ - BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 -\ ------------------------------\ - BIS.B #LCD_CMD,&LCD_CMD_DIR \ lcd_cmd as outputs - BIC.B #LCD_CMD,&LCD_CMD_REN \ lcd_cmd pullup/down disable -\ ------------------------------\ - BIS.B #LCD_DB,&LCD_DB_DIR \ as output, wired to DB(4-7) LCD_Data - BIC.B #LCD_DB,&LCD_DB_REN \ LCD_Data pullup/down disable -\ ******************************\ -\ init RC5_Int \ -\ ******************************\ - BIS.B #RC5,&IR_IE \ enable RC5_Int - BIC.B #RC5,&IR_IFG \ reset RC5_Int flag - MOV #RC5_INT,&IR_Vec \ init interrupt vector -\ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ -\ ******************************\ -\ %01 0001 0100 \ TAxCTL -\ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz -\ -- \ ID divided by 1 -\ -- \ MC MODE = up to TAxCCRn -\ - \ TACLR clear timer count -\ - \ TAIE -\ - \ TAIFG -\ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, -\ ------------------------------\ -\ 000 \ TAxEX0 -\ --- \ TAIDEX pre divisor -\ ------------------------------\ -\ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ init WDT for LFXT: 32768/20=1638 ==> 50ms -\ MOV ##400,&WDT_TIM_CCR0 \ init WDT for VLO: 8000/20=400 ==> 50ms -\ ------------------------------\ -\ %0000 0000 0001 0000 \ TAxCCTL0 -\ - \ CAP capture/compare mode = compare -\ - \ CCIEn -\ - \ CCIFGn - MOV #%10000,&WDT_TIM_CCTL0 \ enable compare interrupt, clear CCIFG0 -\ ------------------------------\ - MOV #WDT_INT,&WDT_TIM_0_Vec \ for only CCIFG0 int, this interrupt clears automatically CCIFG0 -\ ------------------------------\ -\ define LPM mode for ACCEPT \ -\ ------------------------------\ -\ MOV #LPM4,&LPM_MODE \ with MSP430FR59xx -\ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 -\ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value - -\ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory +\ CMP #2,Y \ Power_ON event +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... +CMP #4,Y \ +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... +\ CMP #6,Y \ +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. +\ CMP #$0A,Y \ +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP +\ CMP #$16,Y \ +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP \ ------------------------------\ - -LO2HI \ no need to push IP because (WARM) resets the Return Stack ! - +COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" - LIT RECURSE IS WARM \ replace WARM by this START routine - ABORT \ and continue with the next word after WARM... -; \ ...until interpreter falls in sleep mode within ACCEPT. - \ - -CODE STOP \ stops multitasking, must to be used before downloading app -\ restore default action of primary DEFERred word SLEEP, assembly version - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. - ADD #4,X \ X = BODY of SLEEP - MOV X,-2(X) \ restore the default background - -COLON -\ restore default action of primary DEFERred word WARM, FORTH version - ['] WARM >BODY IS WARM \ remove START app from FORTH init process - - COLD \ because we want to reset CPU and interrupt vectors -; - \ - - - ; downloading RC5toLCD.4th is done -RST_HERE ; this app is protected against - \ -[THEN] \ ASM - \ - - - - -; ----------------------------------- -; RC5toLCD.f -; ----------------------------------- -\ -\ FastForth Compiling options used : -\ DTC=2, FREQUENCY=8/16/24MHz, THREADS=16, -\ 921600 bauds, 3WIRES, 4WIRES, -\ ASSEMBLER, CONDCOMP, LOWERCASE, NONAME, UTILITY. + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ -\ TARGET SELECTION -\ MSP_EXP430FR5739 MSP_EXP430FR5969 MSP_EXP430FR5994 MSP_EXP430FR6989 -\ MSP_EXP430FR2355 -\ MY_MSP430FR5738_1 MY_MSP430FR5738 MY_MSP430FR5948 MY_MSP430FR5948_1 -\ -\ Copyright (C) <2016> -\ -\ This program is free software: you can redistribute it and/or modify -\ it under the terms of the GNU General Public License as published by -\ the Free Software Foundation, either version 3 of the License, or -\ (at your option) any later version. -\ -\ This program is distributed in the hope that it will be useful, -\ but WITHOUT ANY WARRANTY\ without even the implied warranty of -\ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -\ GNU General Public License for more details. -\ -\ You should have received a copy of the GNU General Public License -\ along with this program. If not, see . -\ -\ -\ =========================================================================== -\ remember: for good downloading to target, all lines must be ended with CR+LF ! -\ =========================================================================== -\ -\ -\ REGISTERS USAGE -\ R4 to R7 must be saved before use and restored after -\ scratch registers Y to S are free for use -\ under interrupt, IP is free for use -\ interrupts reset SR register ! -\ -\ PUSHM order : PSP,TOS, IP, S, T, W, X, Y, rEXIT,rDOVAR,rDOCON, rDODOES, R3, SR,RSP, PC -\ PUSHM order : R15,R14,R13,R12,R11,R10, R9, R8, R7 , R6 , R5 , R4 , R3, R2, R1, R0 -\ -\ example : PUSHM #6,IP pushes IP,S,T,W,X,Y registers to return stack -\ -\ POPM order : PC,RSP, SR, R3, rDODOES,rDOCON,rDOVAR,rEXIT, Y, X, W, T, S, IP,TOS,PSP -\ POPM order : R0, R1, R2, R3, R4 , R5 , R6 , R7 , R8, R9,R10,R11,R12,R13,R14,R15 -\ -\ example : POPM #6,IP pop Y,X,W,T,S,IP registers from return stack -\ -\ ASSEMBLER conditionnal usage after IF UNTIL WHILE : S< S>= U< U>= 0= 0<> 0>= -\ ASSEMBLER conditionnal usage before ?JMP ?GOTO : S< S>= U< U>= 0= 0<> 0< -\ -\ FORTH conditionnal : 0= 0< = < > U< -\ -\ display on a LCD 2x20 CHAR the code sent by an IR remote under philips RC5 protocol -\ target : any TI MSP-EXP430FRxxxx launchpad (FRAM) -\ LPM_MODE = LPM0 because use SMCLK for LCDVo -\ -\ DEMO : driver for IR remote compatible with the PHILIPS RC5 protocol -\ plus : driver for 5V LCD 2x20 characters display with 4 bits data interface -\ without usage of an auxiliary 5V to feed the LCD_Vo -\ and without potentiometer to adjust the LCD contrast : -\ to adjust LCD contrast, just press S1 (-) or S2 (+) -\ LCDVo current consumption ~ 500 uA. -\ -\ =================================================================================== -\ notice : adjust WDT_TIM_EX0,LCD_TIM_CTL,LCD_TIM_EX0 and 20_us to the target frequency if <> 8MHz ! -\ =================================================================================== -\ -\ -\ layout : I/O are defined in the launchpad.pat file (don't work with ChipStick_FR2433) -\ -\ GND <-------o---0V0----------> 1 LCD_Vss -\ VCC >-------|---3V6-----o----> 2 LCD_Vdd -\ | | -\ ___ 470n --- -\ ^ --- -\ / \ 1N4148 | -\ --- | -\ 100n | 2k2 | -\ TB0.2 >---||--o--^/\/\/v--o----> 3 LCD_Vo (= 0V6 without modulation) -\ -------------------------> 4 LCD_RW -\ -------------------------> 5 LCD_RW -\ -------------------------> 6 LCD_EN -\ <------------------------> 11 LCD_DB4 -\ <------------------------> 12 LCD_DB5 -\ <------------------------> 13 LCD_DB5 -\ <------------------------> 14 LCD_DB7 -\ -\ <----- LCD contrast + <--- Sw1 <--- (finger) :-) -\ <----- LCD contrast - <--- Sw2 <--- (finger) :-) -\ -\ rc5 <--- OUT IR_Receiver (1 TSOP32236) +\ ------------------------------\ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. +\ ------------------------------\ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application -[DEFINED] ASM [IF] \ security test - MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - CODE 20_US \ n -- n * 20 us BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN @@ -53226,8 +31064,9 @@ THEN \ read LCD bits pattern MOV @IP+,PC ENDCODE -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -53237,95 +31076,75 @@ COLON \ high level word starts here TOP_LCD 2 20_US ; -CODE LCD_WrC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - -CODE LCD_WrF \ func -- Write Fonction +CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W -ENDCODE - -: LCD_Clear - $01 LCD_WrF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - -: LCD_Home - $02 LCD_WrF 100 20_us -; - -[UNDEFINED] OR [IF] - -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - -[THEN] - -: LCD_Entry_set $04 OR LCD_WrF ; - -: LCD_DSP_Ctrl $08 OR LCD_WrF ; - -: LCD_DSP_Shift $10 OR LCD_WrF ; - -: LCD_Fn_Set $20 OR LCD_WrF ; - -: LCD_CGRAM_Set $40 OR LCD_WrF ; - -: LCD_Goto $80 OR LCD_WrF ; - -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ + GOTO BW1 ENDCODE -CODE LCD_RdS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; -CODE LCD_RdC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM \ ******************************\ @@ -53341,6 +31160,7 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? \ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value \ [THEN] @@ -53410,67 +31230,62 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR to LCD - ['] LCD_WrC IS EMIT \ redirects EMIT to LCD - CR ." $" 2 U.R \ print IR_RC5 code to LCD - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 -\ ******************************\ +\ Display IR_RC5 code \ +\ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM \ ------------------------------\ ASM BACKGROUND \ \ ------------------------------\ -\ ... \ insert here your background task -\ ... \ -\ ... \ -BIS #LPM_MODE,SR \ -ENDASM \ +BEGIN +\ ... \ insert here your background task +\ ... \ +\ ... \ + CALL &RXON \ comment this line to disable TERMINAL + BIS &LPM_MODE,SR \ \ ******************************\ \ here start all interrupts \ \ ******************************\ \ here return all interrupts \ \ ******************************\ -CODENNM \ -JMP BACKGROUND \ -ENDCODE DROP \ - - +AGAIN \ +ENDASM \ \ ------------------------------\ CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ \ restore default action of primary DEFERred word SLEEP (assembly version) - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP MOV X,-2(X) \ restore the default background -COLON -\ restore default action of primary DEFERred word WARM (FORTH version) -['] WARM >BODY IS WARM \ remove START from FORTH init process +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM ECHO \ -." RC5toLCD is removed." CR \ display message -." type START to restart" \ -COLD \ performs reset +." RC5toLCD is removed. type START to restart" +COLD \ performs reset to reset all interrupt vectors. ; \ ------------------------------\ -CODE START \ this routine completes the init of system, i.e. FORTH + this app. +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -53512,9 +31327,9 @@ FREQ_KHZ @ 24000 = [IF] \ if 24 MHz \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%01100000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -53531,7 +31346,7 @@ FREQ_KHZ @ 24000 = [IF] \ if 24 MHz BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -53547,7 +31362,7 @@ FREQ_KHZ @ 24000 = [IF] \ if 24 MHz \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -53563,61 +31378,64 @@ FREQ_KHZ @ 24000 = [IF] \ if 24 MHz \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value \ ------------------------------\ -\ redirects to background task \ +\ activate I/O \ \ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ usefull only when any RESET event occurs -\ activate I/O \ because when we type START, it is already done by WARM -\ ------------------------------\ before its redirection by executing START ! -BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works ! -BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use; if not configured, no TERMINAL ! +BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! +BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, otherwise no TERMINAL ! \ ------------------------------\ -\ RESET events handling \ search "SYSRSTIV" in your device datasheet +\ RESET events handling \ search "SYSRSTIV" in your MSP430FRxxxx datasheet \ ------------------------------\ -MOV &SAVE_SYSRSTIV,Y \ +MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory \ CMP #2,Y \ Power_ON event -\ 0= ?JMP STOP \ uncomment if you want to loose application in this case... +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... CMP #4,Y \ -0= ?JMP STOP \ hardware RESET performs STOP. Should be mandatory... +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... \ CMP #6,Y \ -\ 0= ?JMP STOP \ COLD event performs STOP... uncomment if it's that you want. +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. \ CMP #$0A,Y \ -\ 0= ?JMP STOP \ fault event (violation memory protected areas) performs STOP +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP \ CMP #$16,Y \ -\ U>= ?JMP STOP \ all other fault events + Deep Reset perform STOP +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP \ ------------------------------\ COLON \ \ ------------------------------\ \ Init LCD 2x20 \ \ ------------------------------\ - $03E8 20_US \ 1- wait 20 ms - $03 TOP_LCD \ 2- send DB5=DB4=1 - $CD 20_US \ 3- wait 4,1 ms - $03 TOP_LCD \ 4- send again DB5=DB4=1 - $5 20_US \ 5- wait 0,1 ms - $03 TOP_LCD \ 6- send again again DB5=DB4=1 - $2 20_US \ wait 40 us = LCD cycle - $02 TOP_LCD \ 7- send DB5=1 DB4=0 - $2 20_US \ wait 40 us = LCD cycle - $28 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal - $08 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" - $06 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM - $0C LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. - LCD_Clear \ 10- "LCD_Clear" + #1000 20_US \ 1- wait 20 ms + %011 TOP_LCD \ 2- send DB5=DB4=1 + #205 20_US \ 3- wait 4,1 ms + %011 TOP_LCD \ 4- send again DB5=DB4=1 + #5 20_US \ 5- wait 0,1 ms + %011 TOP_LCD \ 6- send again again DB5=DB4=1 + #2 20_US \ wait 40 us = LCD cycle + %010 TOP_LCD \ 7- send DB5=1 DB4=0 + #2 20_US \ wait 40 us = LCD cycle + %00101000 LCD_WRF \ 8- %001DNFxx "FonctionSet" D=8/4 DataBus width, Number of lines=2/1, Font bold/normal + %1000 LCD_WRF \ 9- %1DCB "DisplayControl" : Display off, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" + %0110 LCD_WRF \ 11- %01xx "LCD_EntrySet" : address and cursor shift after writing in RAM + %1100 LCD_WRF \ 12- %1DCB "DisplayControl" : Display on, Cursor off, Blink off. + LCD_CLEAR \ 10- "LCD_Clear" ['] LCD_HOME IS CR \ ' CR redirected to LCD_HOME ['] LCD_WRC IS EMIT \ ' EMIT redirected to LCD_WrC - CR ." I love you" \ display on LCD - ['] CR >BODY IS CR \ - ['] EMIT >BODY IS EMIT \ - ." RC5toLCD is running. Type STOP to quit" \ display on FastForth Terminal + CR ." I love you" \ display message on LCD + ['] CR >BODY IS CR \ CR executes its default value + ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value + ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ + \ ------------------------------\ -\ START replaces WARM \ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. \ ------------------------------\ - LIT RECURSE IS WARM \ START replaces WARM... - ABORT \ ...and continue with ABORT -; \ +MOV #SLEEP,X \ replace default background process +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE + + ECHO ; downloading RC5toLCD.4th is done diff --git a/MSP430-FORTH/RC5toLCD.f b/MSP430-FORTH/RC5toLCD.f index f00fe82..a66a6b2 100644 --- a/MSP430-FORTH/RC5toLCD.f +++ b/MSP430-FORTH/RC5toLCD.f @@ -72,37 +72,12 @@ \ \ rc5 <--- OUT IR_Receiver (1 TSOP32236) -PWR_STATE +RST_STATE [DEFINED] {RC5TOLCD} [IF] {RC5TOLCD} [THEN] \ remove application MARKER {RC5TOLCD} -[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} - -CODE MAX \ n1 n2 -- n3 signed maximum - CMP @PSP,TOS \ n2-n1 - S< ?GOTO FW1 \ n2= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; -[THEN] - CODE 20_US \ n -- n * 20 us BEGIN \ here we presume that LCD_TIM_IFG = 1... BEGIN @@ -135,8 +110,9 @@ THEN \ read LCD bits pattern MOV @IP+,PC ENDCODE -CODE LCD_W \ byte -- write byte to LCD - SUB #2,PSP \ +CODE LCD_WRC \ char -- Write Char + BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +BW1 SUB #2,PSP \ MOV TOS,0(PSP) \ -- %xxxxLLLL %HHHHLLLL RRUM #4,TOS \ -- %xxxxLLLL %xxxxHHHH BIC.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=0 @@ -146,95 +122,75 @@ COLON \ high level word starts here TOP_LCD 2 20_US ; -CODE LCD_WRC \ char -- Write Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_W -ENDCODE - CODE LCD_WRF \ func -- Write Fonction BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_W + GOTO BW1 ENDCODE -: LCD_CLEAR - $01 LCD_WRF 100 20_us \ $01 LCD_WrF 80 20_us ==> bad init ! -; - -: LCD_HOME - $02 LCD_WRF 100 20_us -; - -[UNDEFINED] OR [IF] - -\ https://forth-standard.org/standard/core/OR -\ C OR x1 x2 -- x3 logical OR -CODE OR -BIS @PSP+,TOS -MOV @IP+,PC -ENDCODE - -[THEN] - -: LCD_ENTRY_SET $04 OR LCD_WrF ; - -: LCD_DSP_CTRL $08 OR LCD_WrF ; - -: LCD_DSP_SHIFT $10 OR LCD_WrF ; - -: LCD_FN_SET $20 OR LCD_WrF ; - -: LCD_CGRAM_SET $40 OR LCD_WrF ; - -: LCD_GOTO $80 OR LCD_WrF ; - -CODE LCD_R \ -- byte read byte from LCD - BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput - BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 -COLON \ starts a FORTH word - TOP_LCD 2 20_us \ -- %0000HHHH - TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL -HI2LO \ switch from FORTH to assembler - RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL - ADD.B @PSP+,TOS \ -- %HHHHLLLL - MOV @RSP+,IP \ restore IP saved by COLON - MOV @IP+,PC \ -ENDCODE - -CODE LCD_RDS \ -- status Read Status - BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 - JMP LCD_R -ENDCODE - -CODE LCD_RDC \ -- char Read Char - BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 - JMP LCD_R -ENDCODE +: LCD_CLEAR $01 LCD_WRF 100 20_us ; \ $01 LCD_WrF 80 20_us ==> bad init ! +: LCD_HOME $02 LCD_WRF 100 20_us ; + +\ [UNDEFINED] OR [IF] +\ +\ \ https://forth-standard.org/standard/core/OR +\ \ C OR x1 x2 -- x3 logical OR +\ CODE OR +\ BIS @PSP+,TOS +\ MOV @IP+,PC +\ ENDCODE +\ +\ [THEN] +\ +\ : LCD_ENTRY_SET $04 OR LCD_WrF ; +\ : LCD_DSP_CTRL $08 OR LCD_WrF ; +\ : LCD_DSP_SHIFT $10 OR LCD_WrF ; +\ : LCD_FN_SET $20 OR LCD_WrF ; +\ : LCD_CGRAM_SET $40 OR LCD_WrF ; +\ : LCD_GOTO $80 OR LCD_WrF ; +\ +\ +\ CODE LCD_RDS \ -- status Read Status +\ BIC.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=0 +\ BW1 BIC.B #LCD_DB,&LCD_DB_DIR \ LCD_Data as intput +\ BIS.B #LCD_RW,&LCD_CMD_OUT \ lcd_rw=1 +\ COLON \ starts a FORTH word +\ TOP_LCD 2 20_us \ -- %0000HHHH +\ TOP_LCD 2 20_us \ -- %0000HHHH %0000LLLL +\ HI2LO \ switch from FORTH to assembler +\ RLAM #4,0(PSP) \ -- %HHHH0000 %0000LLLL +\ ADD.B @PSP+,TOS \ -- %HHHHLLLL +\ MOV @RSP+,IP \ restore IP saved by COLON +\ MOV @IP+,PC \ +\ ENDCODE +\ +\ CODE LCD_RDC \ -- char Read Char +\ BIS.B #LCD_RS,&LCD_CMD_OUT \ lcd_rs=1 +\ GOTO BW1 +\ ENDCODE \ ******************************\ ASM WDT_INT \ Watchdog interrupt routine, warning : not FORTH executable ! \ ******************************\ +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ XOR.B #LED1,&LED1_OUT \ to visualise WDT BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #19,&LCD_TIM_CCR2 \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 + CMP #19,&LCD_TIM_CCRn \ maxi Ton = 19/20 & VDD=3V6 ==> LCD_Vo = -1V4 U< IF - ADD #1,&LCD_TIM_CCR2 \ action for switch S2 (P2.5) : 150 mV / increment + ADD #1,&LCD_TIM_CCRn \ action for switch S2 (P2.5) : 150 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #3,&LCD_TIM_CCR2 \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V + CMP #3,&LCD_TIM_CCRn \ mini Ton = 3/20 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&LCD_TIM_CCR2 \ action for switch S1 (P2.6) : -150 mV / decrement + SUB #1,&LCD_TIM_CCRn \ action for switch S1 (P2.6) : -150 mV / decrement THEN \ THEN \ THEN \ -BW1 \ from quit on truncated RC5 message -BW2 \ from repeated RC5 command -BW3 \ from end of RC5_INT -BIC #$78,0(RSP) \ 4 SCG0,OSCOFF,CPUOFF and GIE are OFF in retiSR to force LPM0_LOOP despite pending interrupt -RETI \ 5 +BW1 \ from quit on truncated RC5 message, repeated RC5 command +RET \ 5 ENDASM \ ******************************\ @@ -250,6 +206,7 @@ ASM RC5_INT \ wake up on Px.RC5 change interrupt \ ******************************\ \ RC5_FirstStartBitHalfCycle: \ \ ******************************\ division in RC5_TIM_CTL (SMCLK/1|SMCLK/1|SMCLK/2|SMCLK/4|SMCLK/8) +ADD #2,RSP \ 1 smart and fast RETI with GIE=0 \ FREQ_KHZ @ 8000 = [IF] \ 8 MHz ? \ MOV #0,&RC5_TIM_EX0 \ predivide by 1 in RC5_TIM_EX0 register, reset value \ [THEN] @@ -319,37 +276,37 @@ THEN \ X = 0 C6 C5 C4 C3 C2 C1 C0 RRUM #3,T \ new toggle bit = T(13) ==> T(10) XOR @RSP,T \ (new XOR old) Toggle bits BIT #UF10,T \ repeated RC5_command ? -0= ?GOTO BW2 \ yes, RETI without UF10 change and without action ! +0= ?GOTO BW1 \ yes, RETI without UF10 change and without action ! XOR #UF10,0(RSP) \ 5 toggle bit memory \ ******************************\ -\ Display IR_RC5 code \ X = RC5 code -\ ******************************\ -SUB #4,PSP \ -MOV &BASE,2(PSP) \ save current base -MOV #$10,&BASE \ set hex base -MOV TOS,0(PSP) \ save TOS -MOV X,TOS \ -LO2HI \ switch from assembler to FORTH - ['] LCD_CLEAR IS CR \ redirects CR to LCD - ['] LCD_WRC IS EMIT \ redirects EMIT to LCD - CR ." $" 2 U.R \ print IR_RC5 code to LCD - ['] CR >BODY IS CR \ restore CR - ['] EMIT >BODY IS EMIT \ restore EMIT -HI2LO \ switch from FORTH to assembler -MOV TOS,&BASE \ restore current BASE -MOV @PSP+,TOS \ -\ ******************************\ -GOTO BW3 +\ Display IR_RC5 code \ \ ******************************\ +SUB #8,PSP \ TOS -- x x x x TOS +MOV TOS,6(PSP) \ -- Save_TOS x x x TOS +MOV &BASEADR,4(PSP) \ -- Save_TOS Save_Base x x TOS +MOV #$10,&BASEADR \ set hexadecimal base +MOV X,0(PSP) \ -- Save_TOS Save_Base x RC5_code TOS convert number to ascii low word = RC5 byte +MOV #0,TOS \ -- Save_TOS Save_Base x RC5_code 0 convert number to ascii high word = 0 +LO2HI \ switch from assembler to FORTH + LCD_CLEAR \ set LCD cursor at home + <# # #S #36 HOLD #> \ 32 bits conversion as "$xx" + ['] LCD_WRC IS EMIT \ redirect EMIT to LCD + TYPE \ -- Save_TOS Save_Base x adr cnt display "$xx" on LCD + ['] EMIT >BODY IS EMIT \ -- Save_TOS Save_Base TOS restore EMIT +HI2LO \ -- switch from FORTH to assembler +MOV @PSP+,&BASEADR \ -- Save_TOS TOS restore current BASE +MOV @PSP+,TOS \ -- TOS +RET ENDASM -\ ------------------------------\ +\ ******************************\ ASM BACKGROUND \ -\ ------------------------------\ +\ ******************************\ BEGIN \ ... \ insert here your background task \ ... \ \ ... \ + CALL &RXON \ comment this line to disable TERMINAL_INPUT BIS &LPM_MODE,SR \ \ ******************************\ \ here start all interrupts \ @@ -358,25 +315,24 @@ BEGIN \ ******************************\ AGAIN \ ENDASM \ +\ ******************************\ \ ------------------------------\ CODE STOP \ stops multitasking, must to be used before downloading app \ ------------------------------\ \ restore default action of primary DEFERred word SLEEP (assembly version) - MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. +BW1 MOV #SLEEP,X \ the ASM word SLEEP is only visible in mode assembler. ADD #4,X \ X = BODY of SLEEP, X-2 = PFA of SLEEP - MOV X,-2(X) \ restore the default background -COLON -\ restore default action of primary DEFERred word WARM (FORTH version) -['] WARM >BODY IS WARM \ remove START from FORTH init process + MOV X,-2(X) \ restore the default background: SLEEP +COLON \ restore default action of primary DEFERred word WARM (FORTH version) +['] WARM >BODY IS WARM \ restore the default WARM ECHO \ -." RC5toLCD is removed." CR \ display message -." type START to restart" \ +." RC5toLCD is removed. type START to restart" COLD \ performs reset to reset all interrupt vectors. ; \ ------------------------------\ -CODE START \ this routine completes the init of system, i.e. FORTH + this app. +CODE APP_INIT \ this routine completes the init of system, i.e. FORTH + this app. \ ------------------------------\ \ LCD_TIM_CTL = %0000 0010 1001 0100\$3C0 \ - - \CNTL Counter lentgh \ 00 = 16 bits @@ -406,7 +362,7 @@ CODE START \ this routine completes the init of system, i.e \ ------------------------------\ \ set LCD_TIM_ to make 50kHz PWM \ for LCD_Vo; works without interrupt \ ------------------------------\ -MOV #%1011010100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int +MOV #%10_1101_0100,&LCD_TIM_CTL \ SMCLK/8, up mode, clear timer, no int \ MOV #0,&LCD_TIM_EX0 \ predivide by 1 in LCD_TIM_EX0 register (8 MHZ) FREQ_KHZ @ 16000 = [IF] \ if 16 MHz MOV #1,&LCD_TIM_EX0 \ predivide by 2 in LCD_TIM_EX0 register (16 MHZ) @@ -418,9 +374,9 @@ FREQ_KHZ @ 24000 = [IF] \ if 24 MHz \ ------------------------------\ \ set LCD_TIM_.2 to generate PWM for LCD_Vo \ ------------------------------\ - MOV #%01100000,&LCD_TIM_CCTL2 \ output mode = set/reset \ clear CCIFG - MOV #10,&LCD_TIM_CCR2 \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) -\ MOV #12,&LCD_TIM_CCR2 \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) +MOV #%0110_0000,&LCD_TIM_CCTLn \ output mode = set/reset \ clear CCIFG + MOV #10,&LCD_TIM_CCRn \ contrast adjust : 10/20 ==> LCD_Vo = -0V6|+3V6 (Vcc=3V6) +\ MOV #12,&LCD_TIM_CCRn \ contrast adjust : 12/20 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ BIS.B #LCDVo,&LCDVo_DIR \ BIS.B #LCDVo,&LCDVo_SEL \ SEL.2 @@ -437,7 +393,7 @@ FREQ_KHZ @ 24000 = [IF] \ if 24 MHz BIC.B #RC5,&IR_IFG \ reset RC5_Int flag MOV #RC5_INT,&IR_Vec \ init interrupt vector \ ******************************\ -\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ +\ init WatchDog WDT_TIM_ \ eUSCI_A0 (FORTH terminal) has higher priority than WDT_TIM_ \ ******************************\ \ %01 0001 0100 \ TAxCTL \ -- \ TASSEL CLK = ACLK = LFXT = 32768 Hz @@ -447,13 +403,13 @@ FREQ_KHZ @ 24000 = [IF] \ if 24 MHz \ - \ TAIE \ - \ TAIFG \ ------------------------------\ - MOV #%0100010100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, +MOV #%01_0001_0100,&WDT_TIM_CTL \ start WDT_TIM_, ACLK, up mode, disable int, \ ------------------------------\ \ 000 \ TAxEX0 \ --- \ TAIDEX pre divisor \ ------------------------------\ \ %0000 0000 0000 0101 \ TAxCCR0 - MOV ##1638,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 50ms + MOV ##3276,&WDT_TIM_CCR0 \ else init WDT_TIM_ for LFXT: 32768/20=1638 ==> 100ms \ ------------------------------\ \ %0000 0000 0001 0000 \ TAxCCTL0 \ - \ CAP capture/compare mode = compare @@ -469,11 +425,6 @@ FREQ_KHZ @ 24000 = [IF] \ if 24 MHz \ MOV #LPM2,&LPM_MODE \ with MSP430FR57xx, terminal input don't work for LPMx > 2 \ \ with MSP430FR2xxx, terminal input don't work for LPMx > 0 ; LPM0 is the default value \ ------------------------------\ -\ redirects to background task \ -\ ------------------------------\ - MOV #SLEEP,X \ - MOV #BACKGROUND,2(X) \ -\ ------------------------------\ \ activate I/O \ \ ------------------------------\ BIC #1,&PM5CTL0 \ activate all previous I/O settings; if not activated, nothing works after reset ! @@ -483,15 +434,15 @@ BIS.B #TERM_BUS,&TERM_SEL \ Configure pins TXD & RXD for TERM_UART use, ot \ ------------------------------\ MOV &SAVE_SYSRSTIV,Y \ Y = SYSRSTIV register memory \ CMP #2,Y \ Power_ON event -\ 0= ?JMP STOP \ uncomment if you want to loose application in this case... +\ 0= ?GOTO BW1 \ uncomment if you want to loose application in this case... CMP #4,Y \ -0= ?JMP STOP \ hardware RESET performs STOP. Should be mandatory... +0= ?GOTO BW1 \ hardware RESET performs STOP. Should be mandatory... \ CMP #6,Y \ -\ 0= ?JMP STOP \ COLD event performs STOP... uncomment if it's that you want. +\ 0= ?GOTO BW1 \ COLD event performs STOP... uncomment if it's that you want. \ CMP #$0A,Y \ -\ 0= ?JMP STOP \ fault event (violation memory protected areas) performs STOP +\ 0= ?GOTO BW1 \ fault event (violation memory protected areas) performs STOP \ CMP #$16,Y \ -\ U>= ?JMP STOP \ all other fault events + Deep Reset perform STOP +\ U>= ?GOTO BW1 \ all other fault events + Deep Reset perform STOP \ ------------------------------\ COLON \ \ ------------------------------\ @@ -518,16 +469,21 @@ COLON \ ['] CR >BODY IS CR \ CR executes its default value ['] EMIT >BODY IS EMIT \ EMIT executes its defaulte value ." RC5toLCD is running. Type STOP to quit" \ display message on FastForth Terminal + ABORT \ ...and end APP_INIT with ABORT, no return. +; \ + \ ------------------------------\ -\ START replaces WARM \ +CODE START \ this routine replaces WARM and SLEEP default values by these of this application. \ ------------------------------\ - LIT RECURSE IS WARM \ START replaces WARM... -\ ['] WARM >BODY EXECUTE \ ...and end START with default WARM, no return. - ABORT \ ...and end START with ABORT, no return. -; \ +MOV #SLEEP,X \ replace default background process SLEEP +MOV #BACKGROUND,2(X) \ by RC5toLCD BACKGROUND +MOV #WARM,X \ replace default WARM +MOV #APP_INIT,2(X) \ by RC5toLCD APP_INIT +MOV X,PC \ then execute it +ENDCODE ECHO ; downloading RC5toLCD.4th is done RST_HERE ; this app is protected against -\ START +\ START cold diff --git a/MSP430-FORTH/RTC.f b/MSP430-FORTH/RTC.f index 4e00879..c722225 100644 --- a/MSP430-FORTH/RTC.f +++ b/MSP430-FORTH/RTC.f @@ -15,7 +15,6 @@ \ \ TARGET SELECTION \ MSP_EXP430FR5739 MSP_EXP430FR5969 MSP_EXP430FR5994 MSP_EXP430FR6989 -\ MSP_EXP430FR4133 CHIPSTICK_FR2433 MSP_EXP430FR2433 MSP_EXP430FR2355 \ \ REGISTERS USAGE \ R4 to R7 must be saved before use and restored after @@ -71,6 +70,38 @@ ENDCODE [THEN] \ MAX +[UNDEFINED] SPACES [IF] +\ https://forth-standard.org/standard/core/SPACES +\ SPACES n -- output n spaces +CODE SPACES +CMP #0,TOS +0<> IF + PUSH IP + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,IP + SUB #1,TOS + 0= UNTIL + MOV @RSP+,IP +THEN +MOV @PSP+,TOS \ -- drop n +NEXT +ENDCODE +[THEN] + +[UNDEFINED] OVER [IF] +\ https://forth-standard.org/standard/core/OVER +\ OVER x1 x2 -- x1 x2 x1 +CODE OVER +MOV TOS,-2(PSP) \ 3 -- x1 (x2) x2 +MOV @PSP,TOS \ 2 -- x1 (x2) x1 +SUB #2,PSP \ 1 -- x1 x2 x1 +MOV @IP+,PC +ENDCODE +[THEN] + [UNDEFINED] U.R [IF] : U.R \ u n -- display u unsigned in n width (n >= 2) >R <# 0 # #S #> @@ -94,7 +125,7 @@ COLON ; : DATE! -DEPTH 2 > IF +2 DEPTH U< IF HI2LO MOV TOS,&RTCYEARL \ year MOV.B @PSP,&RTCMON \ month \ @PSP+ don't work because byte format ! @@ -123,7 +154,7 @@ COLON ; : TIME! -DEPTH 2 > IF +2 DEPTH U< IF HI2LO MOV TOS,&RTCSEC \ seconds MOV.B @PSP,&RTCMIN \ minutes \ @PSP+ don't work because byte format ! @@ -142,8 +173,8 @@ RST_HERE : ESC #27 EMIT ; \ create a word to test DEFERred words -: [DEFERRED] \ [DEFERRED] -- flag - ' @ $4030 = \ CFA of = MOV @PC+,PC ? +: [ISDEFERRED?] \ [ISDEFERRED?] xt -- xt flag + DUP @ $4030 = \ CFA of = MOV @PC+,PC ? ; IMMEDIATE CREATE ABUF 20 ALLOT @@ -157,18 +188,16 @@ ESC ." [1J" \ erase up (42 empty lines) ESC ." [H" \ cursor home CR ." DATE (DMY): " -ABUF ABUF 20 - [DEFERRED] ACCEPT - [IF] ['] ACCEPT >BODY EXECUTE \ execute default part of ACCEPT - [ELSE] ACCEPT - [THEN] +ABUF DUP 20 + ['] ACCEPT [ISDEFERRED?] + [IF] >BODY \ execute default part of ACCEPT + [THEN] EXECUTE EVALUATE CR DATE! CR CR ." TIME (HMS): " -ABUF ABUF 20 - [DEFERRED] ACCEPT - [IF] ['] ACCEPT >BODY EXECUTE \ execute default part of ACCEPT - [ELSE] ACCEPT - [THEN] +ABUF DUP 20 + ['] ACCEPT [ISDEFERRED?] + [IF] >BODY \ execute default part of ACCEPT + [THEN] EXECUTE EVALUATE CR TIME! CR ; diff --git a/MSP430-FORTH/SD_TEST.f b/MSP430-FORTH/SD_TEST.f index aec447a..df673a9 100644 --- a/MSP430-FORTH/SD_TEST.f +++ b/MSP430-FORTH/SD_TEST.f @@ -74,11 +74,11 @@ PWR_STATE MARKER {SD_TEST} -[UNDEFINED] AND [IF] -\ https://forth-standard.org/standard/core/AND -\ C AND x1 x2 -- x3 logical AND -CODE AND -AND @PSP+,TOS +[UNDEFINED] + [IF] +\ https://forth-standard.org/standard/core/Plus +\ + n1/u1 n2/u2 -- n3/u3 add n1+n2 +CODE + +ADD @PSP+,TOS MOV @IP+,PC ENDCODE [THEN] @@ -87,48 +87,112 @@ ENDCODE CODE MAX \ n1 n2 -- n3 signed maximum CMP @PSP,TOS \ n2-n1 S< ?GOTO FW1 \ n2 IF + PUSH IP + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,IP + SUB #1,TOS + 0= UNTIL + MOV @RSP+,IP +THEN +MOV @PSP+,TOS \ -- drop n +NEXT +ENDCODE +[THEN] + +[UNDEFINED] OVER [IF] +\ https://forth-standard.org/standard/core/OVER +\ OVER x1 x2 -- x1 x2 x1 +CODE OVER +MOV TOS,-2(PSP) \ 3 -- x1 (x2) x2 +MOV @PSP,TOS \ 2 -- x1 (x2) x1 +SUB #2,PSP \ 1 -- x1 x2 x1 +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] U.R [IF] \ defined in {UTILITY} : U.R \ u n -- display u unsigned in n width (n >= 2) >R <# 0 # #S #> R> OVER - 0 MAX SPACES TYPE ; [THEN] -[UNDEFINED] DUMP [IF] \ defined in {UTILITY} +[UNDEFINED] DUMP [IF] \ defined in {UTILITY} \ https://forth-standard.org/standard/tools/DUMP CODE DUMP \ adr n -- dump memory PUSH IP -PUSH &BASE \ save current base -MOV #$10,&BASE \ HEX base +PUSH &BASEADR \ save current base +MOV #$10,&BASEADR \ HEX base ADD @PSP,TOS \ -- ORG END LO2HI - SWAP OVER OVER \ -- END ORG END ORG - U. U. \ -- END ORG display org end - $FFF0 AND \ -- END ORG_modulo_16 + SWAP \ -- END ORG DO CR \ generate line - I 7 U.R SPACE \ generate address - I $10 + I \ display 16 bytes + I 4 U.R SPACE \ generate address + I 8 + I + DO I C@ 3 U.R LOOP + SPACE + I $10 + I 8 + DO I C@ 3 U.R LOOP SPACE SPACE I $10 + I \ display 16 chars - DO I C@ $7E MIN BL MAX EMIT LOOP + DO I C@ $7E MIN $20 MAX EMIT LOOP $10 +LOOP - R> BASE ! \ restore current base + R> BASEADR ! \ restore current base ; [THEN] + +\ SD_EMIT c -- output char c to a SD_CARD file opened as write +CODE SD_EMIT +CMP #512,&BufferPtr \ 512 bytes by sector +U>= IF \ if file buffer is full + MOV #WRITE,X \ CALL WRITEFILE + CALL 2(X) \ BufferPtr = 0 +THEN +MOV &BufferPtr,Y \ 3 +MOV.B TOS,SD_BUF(Y) \ 3 +ADD #1,&BufferPtr \ 4 +MOV @PSP+,TOS \ 2 +MOV @IP+,PC +ENDCODE + : SD_TEST PWR_HERE \ remove all volatile programs from MAIN memory CR diff --git a/MSP430-FORTH/SD_TOOLS.f b/MSP430-FORTH/SD_TOOLS.f index c2bb40d..c86e8c1 100644 --- a/MSP430-FORTH/SD_TOOLS.f +++ b/MSP430-FORTH/SD_TOOLS.f @@ -32,16 +32,21 @@ \ ASSEMBLER conditionnal usage with IF UNTIL WHILE S< S>= U< U>= 0= 0<> 0>= \ ASSEMBLER conditionnal usage with ?JMP ?GOTO S< S>= U< U>= 0= 0<> 0< -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {SD_TOOLS} [IF] DEFINED! - -[ELSE] +[UNDEFINED] {SD_TOOLS} [IF] PWR_STATE MARKER {SD_TOOLS} +[UNDEFINED] + [IF] +\ https://forth-standard.org/standard/core/Plus +\ + n1/u1 n2/u2 -- n3/u3 add n1+n2 +CODE + +ADD @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] + [UNDEFINED] MAX [IF] \ MAX and MIN are defined in {UTILITY} CODE MAX \ n1 n2 -- n3 signed maximum @@ -60,44 +65,82 @@ ENDCODE [THEN] -[UNDEFINED] U.R [IF] \ defined in {UTILITY} -: U.R \ u n -- display u unsigned in n width (n >= 2) - >R <# 0 # #S #> - R> OVER - 0 MAX SPACES TYPE -; +[UNDEFINED] C@ [IF] +\ https://forth-standard.org/standard/core/CFetch +\ C@ c-addr -- char fetch char from memory +CODE C@ +MOV.B @TOS,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] SPACE [IF] +\ https://forth-standard.org/standard/core/SPACE +\ SPACE -- output a space +: SPACE +$20 EMIT ; [THEN] -[UNDEFINED] AND [IF] +[UNDEFINED] SPACES [IF] +\ https://forth-standard.org/standard/core/SPACES +\ SPACES n -- output n spaces +CODE SPACES +CMP #0,TOS +0<> IF + PUSH IP + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,IP + SUB #1,TOS + 0= UNTIL + MOV @RSP+,IP +THEN +MOV @PSP+,TOS \ -- drop n +NEXT +ENDCODE +[THEN] -\ https://forth-standard.org/standard/core/AND -\ C AND x1 x2 -- x3 logical AND -CODE AND -AND @PSP+,TOS +[UNDEFINED] OVER [IF] +\ https://forth-standard.org/standard/core/OVER +\ OVER x1 x2 -- x1 x2 x1 +CODE OVER +MOV TOS,-2(PSP) \ 3 -- x1 (x2) x2 +MOV @PSP,TOS \ 2 -- x1 (x2) x1 +SUB #2,PSP \ 1 -- x1 x2 x1 MOV @IP+,PC ENDCODE +[THEN] +[UNDEFINED] U.R [IF] \ defined in {UTILITY} +: U.R \ u n -- display u unsigned in n width (n >= 2) + >R <# 0 # #S #> + R> OVER - 0 MAX SPACES TYPE +; [THEN] [UNDEFINED] DUMP [IF] \ defined in {UTILITY} \ https://forth-standard.org/standard/tools/DUMP CODE DUMP \ adr n -- dump memory PUSH IP -PUSH &BASE \ save current base -MOV #$10,&BASE \ HEX base +PUSH &BASEADR \ save current base +MOV #$10,&BASEADR \ HEX base ADD @PSP,TOS \ -- ORG END LO2HI - SWAP OVER OVER \ -- END ORG END ORG - U. U. \ -- END ORG display org end - $FFF0 AND \ -- END ORG_modulo_16 + SWAP \ -- END ORG DO CR \ generate line - I 7 U.R SPACE \ generate address - I $10 + I \ display 16 bytes + I 4 U.R SPACE \ generate address + I 8 + I + DO I C@ 3 U.R LOOP + SPACE + I $10 + I 8 + DO I C@ 3 U.R LOOP SPACE SPACE I $10 + I \ display 16 chars - DO I C@ $7E MIN BL MAX EMIT LOOP + DO I C@ $7E MIN $20 MAX EMIT LOOP $10 +LOOP - R> BASE ! \ restore current base + R> BASEADR ! \ restore current base ; [THEN] @@ -105,7 +148,7 @@ LO2HI \ ----------------------------------\ CODE SECTOR \ sector. -- don't forget to add decimal point to your sector number \ ----------------------------------\ - MOV TOS,X \ X = SectorH +BW1 MOV TOS,X \ X = SectorH MOV @PSP,W \ W = sectorL CALL &ReadSectorWX \ W = SectorLO X = SectorHI COLON \ @@ -113,35 +156,33 @@ COLON \ SD_BUF $200 DUMP CR ; \ then dump the sector \ ----------------------------------\ -\ ----------------------------------\ -CODE FAT \ Display CurFATsector -\ ----------------------------------\ - SUB #4,PSP \ - MOV TOS,2(PSP) \ - MOV &OrgFAT1,0(PSP) \ - MOV #0,TOS \ FATsectorHI = 0 - JMP SECTOR \ jump to a defined word -ENDCODE -\ ----------------------------------\ - \ display first sector of a Cluster \ ----------------------------------\ CODE CLUSTER \ cluster. -- don't forget to add decimal point to your cluster number \ ----------------------------------\ - MOV.B &SecPerClus,W \ SecPerClus(54321) = multiplicator +BW2 MOV.B &SecPerClus,W \ SecPerClus(54321) = multiplicator MOV @PSP,X \ X = ClusterL - RRA W \ - U< IF \ case of SecPerClus>1 - BEGIN - ADD X,X \ (RLA) shift one left MULTIPLICANDlo16 - ADDC TOS,TOS \ (RLC) shift one left MULTIPLICANDhi8 - RRA W \ shift one right multiplicator - U>= UNTIL \ carry set - THEN \ + GOTO FW1 \ + BEGIN + ADD X,X \ (RLA) shift one left MULTIPLICANDlo16 + ADDC TOS,TOS \ (RLC) shift one left MULTIPLICANDhi8 +FW1 RRA W \ shift one right multiplicator + U>= UNTIL \ carry set ADD &OrgClusters,X \ add OrgClusters = sector of virtual cluster 0 (word size) MOV X,0(PSP) ADDC #0,TOS \ don't forget carry - JMP SECTOR \ jump to a defined word + GOTO BW1 \ jump to SECTOR +ENDCODE +\ ----------------------------------\ + +\ ----------------------------------\ +CODE FAT \ Display CurFATsector +\ ----------------------------------\ + SUB #4,PSP \ + MOV TOS,2(PSP) \ + MOV &OrgFAT1,0(PSP) \ + MOV #0,TOS \ FATsectorHI = 0 + GOTO BW1 \ jump to SECTOR ENDCODE \ ----------------------------------\ @@ -152,7 +193,12 @@ CODE DIR \ Display CurrentDir first sector MOV TOS,2(PSP) \ save TOS MOV &DIRclusterL,0(PSP) \ MOV &DIRclusterH,TOS \ - JMP CLUSTER \ + CMP #0,TOS + 0<> ?GOTO BW2 \ jump to CLUSTER + CMP #1,0(PSP) \ cluster 1 ? + 0<> ?GOTO BW2 \ jump to CLUSTER + MOV &OrgRootDir,0(PSP) \ if yes, special case of FAT16 OrgRootDir + GOTO BW1 \ jump to SECTOR ENDCODE \ ----------------------------------\ @@ -161,7 +207,4 @@ RST_HERE [THEN] ECHO -; added : FAT to DUMP first sector of FAT1 and DIR for that of current DIRectory. -; added : SECTOR to DUMP a sector and CLUSTER for first sector of a cluster: -; include a decimal point to force 32 bits number, example : .2 CLUSTER diff --git a/MSP430-FORTH/TESTASM.F b/MSP430-FORTH/TESTASM.F index 86956ee..337747d 100644 --- a/MSP430-FORTH/TESTASM.F +++ b/MSP430-FORTH/TESTASM.F @@ -23,10 +23,143 @@ \ \ FORTH conditionnal : 0= 0< = < > U< +[UNDEFINED] + [IF] +\ https://forth-standard.org/standard/core/Plus +\ + n1/u1 n2/u2 -- n3/u3 add n1+n2 +CODE + +ADD @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {UTILITY} + +CODE MAX \ n1 n2 -- n3 signed maximum + CMP @PSP,TOS \ n2-n1 + S< ?GOTO FW1 \ n2 -- define a Forth VARIABLE +: VARIABLE +DEFER +HI2LO +MOV @RSP+,IP +MOV #DOVAR,-4(W) \ CFA = DOVAR +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] CONSTANT [IF] +\ https://forth-standard.org/standard/core/CONSTANT +\ CONSTANT n -- define a Forth CONSTANT +: CONSTANT +DEFER +HI2LO +MOV @RSP+,IP +MOV #DOCON,-4(W) \ CFA = DOCON +MOV TOS,-2(W) \ PFA = n +MOV @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] SPACE [IF] +\ https://forth-standard.org/standard/core/SPACE +\ SPACE -- output a space +: SPACE +$20 EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +\ https://forth-standard.org/standard/core/SPACES +\ SPACES n -- output n spaces +CODE SPACES +CMP #0,TOS +0<> IF + PUSH IP + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,IP + SUB #1,TOS + 0= UNTIL + MOV @RSP+,IP +THEN +MOV @PSP+,TOS \ -- drop n +NEXT +ENDCODE +[THEN] + +[UNDEFINED] OVER [IF] +\ https://forth-standard.org/standard/core/OVER +\ OVER x1 x2 -- x1 x2 x1 +CODE OVER +MOV TOS,-2(PSP) \ 3 -- x1 (x2) x2 +MOV @PSP,TOS \ 2 -- x1 (x2) x1 +SUB #2,PSP \ 1 -- x1 x2 x1 +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] U.R [IF] \ defined in {UTILITY} +: U.R \ u n -- display u unsigned in n width (n >= 2) + >R <# 0 # #S #> + R> OVER - 0 MAX SPACES TYPE +; +[THEN] + +[UNDEFINED] DUMP [IF] \ defined in {UTILITY} +\ https://forth-standard.org/standard/tools/DUMP +CODE DUMP \ adr n -- dump memory +PUSH IP +PUSH &BASEADR \ save current base +MOV #$10,&BASEADR \ HEX base +ADD @PSP,TOS \ -- ORG END +LO2HI + SWAP \ -- END ORG + DO CR \ generate line + I 4 U.R SPACE \ generate address + I 8 + I + DO I C@ 3 U.R LOOP + SPACE + I $10 + I 8 + + DO I C@ 3 U.R LOOP + SPACE SPACE + I $10 + I \ display 16 chars + DO I C@ $7E MIN $20 MAX EMIT LOOP + $10 +LOOP + R> BASEADR ! \ restore current base +; +[THEN] + \ ----------------------------------------------------------------------- \ test CPUx instructions PUSHM, POPM, RLAM, RRAM, RRCM, RRUM \ ----------------------------------------------------------------------- CODE TESTPUSHM +BW1 \ PUSHM #16,R14 \ uncomment to test error "out of bounds" \ PUSHM #2,R0 \ uncomment to test error "out of bounds" \ PUSHM #0,IP \ uncomment to test error "out of bounds" @@ -61,7 +194,7 @@ CODE TESTPUSHM TESTPUSHM ; you should see 11111 3 2 1 0 --> CODE TESTPOPM - JMP TESTPUSHM + GOTO BW1 \ JMP TESTPUSHM ENDCODE \ @@ -75,13 +208,13 @@ TESTPOPM ; you should see 11111 3 2 1 0 --> \ ----------------------------------------------------------------------- CODE TEST1 \ the word "CODE" add ASSEMBLER as CONTEXT vocabulary... - MOV &BASE,&BASE \ to test &xxxx src operand - CMP #%10,&BASE -0<> IF MOV #2,&BASE \ if base <> 2 -ELSE MOV #$0A,&BASE \ else base = 2 + MOV &BASEADR,&BASEADR \ to test &xxxx src operand + CMP #%10,&BASEADR +0<> IF MOV #2,&BASEADR \ if base <> 2 +ELSE MOV #$0A,&BASEADR \ else base = 2 THEN COLON \ tips : no "ok" displayed in start of line <==> compilation mode - BASE @ U. \ always display 10 ! + BASEADR @ U. \ always display 10 ! ; \ @@ -89,13 +222,13 @@ THEN \ test a word that starts as word FORTH and ends as assembly word \ ----------------------------------------------------------------------- : TEST2 \ ":" starts compilation - BASE @ U. \ always display 10 ! + BASEADR @ U. \ always display 10 ! HI2LO \ switch FORTH to ASM : compile one word (next address) \ add vocabulary ASSEMBLER as CONTEXT vocabulary \ switch in interpret mode - CMP #2, &BASE -0<> IF MOV #2, &BASE \ if variable system BASE <> 2 -ELSE MOV #10,&BASE \ else (BASE = 2) + CMP #2, &BASEADR +0<> IF MOV #2, &BASEADR \ if variable system BASE <> 2 +ELSE MOV #10,&BASEADR \ else (BASE = 2) THEN \ MOV #EXIT,PC \ to pair with ":" i.e. to restore IP saved by : then execute NEXT. \ but even compile two words, it's better to compile an inline EXIT : @@ -108,11 +241,11 @@ ENDCODE \ ends assembler : remove vocabulary ASSEMBLER from \ test a word that starts as assembly word and ends as FORTH word \ ----------------------------------------------------------------------- CODE TEST3 \ "CODE" starts assembler, i.e. add ASSEMBLER as CONTEXT vocabulary - CMP #2, &BASE -0<> IF MOV #2, &BASE \ if variable system BASE <> 2 -ELSE MOV #10,&BASE \ else (BASE = 2) + CMP #2, &BASEADR +0<> IF MOV #2, &BASEADR \ if variable system BASE <> 2 +ELSE MOV #10,&BASEADR \ else (BASE = 2) THEN COLON \ - BASE @ U. \ always display 10 ! + BASEADR @ U. \ always display 10 ! ; \ \ @@ -145,6 +278,27 @@ TEST5 ; you should see : 9 8 7 6 5 4 3 2 1 0 --> \ tests indexing address \ ----------------------------------------------------------------------- +[UNDEFINED] C, [IF] +\ https://forth-standard.org/standard/core/CComma +\ C, char -- append char +CODE C, +MOV &DP,W +MOV.B TOS,0(W) +ADD #1,&DP +MOV @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] C@ [IF] +\ https://forth-standard.org/standard/core/CFetch +\ C@ c-addr -- char fetch char from memory +CODE C@ +MOV.B @TOS,TOS +MOV @IP+,PC +ENDCODE +[THEN] + : BYTES_TABLE_IDX CREATE 0 DO I C, @@ -279,15 +433,20 @@ TABLE20 PFA_TABLE ! TABLE 10 DUMP ; create a primary DEFERred assembly word ; ----------------------------------------------------------------------- + DEFER TRUC ; here, TRUC is a secondary DEFERred word (i.e. without BODY) \ + CODENNM ; leaves its execution address (CFA) on stack SUB #2,PSP MOV TOS,0(PSP) MOV @IP+,PC ENDCODE -DUP . IS TRUC ; TRUC becomes a primary DEFERred word + +DUP . + +IS TRUC ; TRUC becomes a primary DEFERred word ; with its default action (DUP) located at its BODY addresse. TRUC . ; display TOS value --> @@ -299,7 +458,7 @@ TRUC . ; display TOS value --> TRUC . ; display TOS value --> \ ' DROP IS TRUC ; TRUC is redirected to DROP -\ +\ \ TRUC ; The generated error displays stack empty! in reverse video, removes the TRUC definition and restarts the interpretation after the end of the file. And as you see, FastForth is able to display long lines, interesting, doesn't it? --> \ \ bla diff --git a/MSP430-FORTH/TESTXASM.F b/MSP430-FORTH/TESTXASM.F index e70dd06..cffa9e3 100644 --- a/MSP430-FORTH/TESTXASM.F +++ b/MSP430-FORTH/TESTXASM.F @@ -26,6 +26,134 @@ ECHO PWR_STATE +[UNDEFINED] + [IF] +\ https://forth-standard.org/standard/core/Plus +\ + n1/u1 n2/u2 -- n3/u3 add n1+n2 +CODE + +ADD @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] MAX [IF] \ MAX and MIN are defined in {UTILITY} + +CODE MAX \ n1 n2 -- n3 signed maximum + CMP @PSP,TOS \ n2-n1 + S< ?GOTO FW1 \ n2 n -- define a Forth CONSTANT +: CONSTANT +DEFER +HI2LO +MOV @RSP+,IP +MOV #DOCON,-4(W) \ CFA = DOCON +MOV TOS,-2(W) \ PFA = n +MOV @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] BL [IF] +\ https://forth-standard.org/standard/core/BL +\ BL -- char an ASCII space +#32 CONSTANT BL +[THEN] + +[UNDEFINED] SPACE [IF] +\ https://forth-standard.org/standard/core/SPACE +\ SPACE -- output a space +: SPACE +BL EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +\ https://forth-standard.org/standard/core/SPACES +\ SPACES n -- output n spaces +CODE SPACES +CMP #0,TOS +0<> IF + PUSH IP + BEGIN + LO2HI + BL EMIT + HI2LO + SUB #2,IP + SUB #1,TOS + 0= UNTIL + MOV @RSP+,IP +THEN +MOV @PSP+,TOS \ -- drop n +NEXT +ENDCODE +[THEN] + +[UNDEFINED] OVER [IF] +\ https://forth-standard.org/standard/core/OVER +\ OVER x1 x2 -- x1 x2 x1 +CODE OVER +MOV TOS,-2(PSP) \ 3 -- x1 (x2) x2 +MOV @PSP,TOS \ 2 -- x1 (x2) x1 +SUB #2,PSP \ 1 -- x1 x2 x1 +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] U.R [IF] \ defined in {UTILITY} +: U.R \ u n -- display u unsigned in n width (n >= 2) + >R <# 0 # #S #> + R> OVER - 0 MAX SPACES TYPE +; +[THEN] + +[UNDEFINED] DUMP [IF] \ defined in {UTILITY} +\ https://forth-standard.org/standard/tools/DUMP +CODE DUMP \ adr n -- dump memory +PUSH IP +PUSH &BASEADR \ save current base +MOV #$10,&BASEADR \ HEX base +ADD @PSP,TOS \ -- ORG END +LO2HI + SWAP \ -- END ORG + DO CR \ generate line + I 4 U.R SPACE \ generate address + I 8 + I + DO I C@ 3 U.R LOOP + SPACE + I $10 + I 8 + + DO I C@ 3 U.R LOOP + SPACE SPACE + I $10 + I \ display 16 chars + DO I C@ $7E MIN BL MAX EMIT LOOP + $10 +LOOP + R> BASEADR ! \ restore current base +; +[THEN] + +PWR_HERE + ; -------------------------------------------------------------------------------- ; DTCforthMSP430FR5xxx ASSEMBLER, OPCODES IV : Adda|Cmpa|Mova|Suba (without extended word) ; -------------------------------------------------------------------------------- @@ -403,11 +531,11 @@ PWR_STATE : %. -BASE @ %10 BASE ! SWAP 8 EMIT . BASE ! +BASEADR @ %10 BASEADR ! SWAP 8 EMIT . BASEADR ! ; : %U. -BASE @ %10 BASE ! SWAP 8 EMIT U. BASE ! ; +BASEADR @ %10 BASEADR ! SWAP 8 EMIT U. BASEADR ! ; PWR_HERE @@ -424,7 +552,7 @@ RRUX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %. +MOV #%.,PC ENDCODE RRUX_T ; you should see %111100001111000 --> % @@ -438,12 +566,12 @@ PWR_STATE CODE RRUX_T MOV #$F0F0,Y -RPT #0 +RPT #1 RRUX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %. +MOV #%.,PC ENDCODE RRUX_T ; you should see %111100001111000 --> % @@ -452,12 +580,12 @@ PWR_STATE CODE RRUX_T MOV #$F0F0,Y -RPT #3 +RPT #4 RRUX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %. +MOV #%.,PC ENDCODE RRUX_T ; you should see %111100001111 --> % @@ -466,12 +594,12 @@ PWR_STATE CODE RRUX_T MOV #$F0F0,Y -RPT #7 +RPT #8 RRUX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %. +MOV #%.,PC ENDCODE RRUX_T ; you should see %11110000 --> % @@ -491,7 +619,7 @@ RRCX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %U. +MOV #%U.,PC ENDCODE RRCX_T ; you should see %100000000000000 --> % @@ -505,12 +633,12 @@ PWR_STATE CODE RRCX_T MOV #$8000,Y BIC #C,SR -RPT #0 +RPT #1 RRCX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %U. +MOV #%U.,PC ENDCODE RRCX_T ; you should see %100000000000000 --> % @@ -520,12 +648,12 @@ PWR_STATE CODE RRCX_T MOV #$8000,Y BIC #C,SR -RPT #7 +RPT #8 RRCX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %U. +MOV #%U.,PC ENDCODE RRCX_T ; you should see %10000000 --> % @@ -543,7 +671,7 @@ RRAX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %. +MOV #%.,PC ENDCODE RRAX_T ; you should see %-100000000000000 --> % @@ -557,12 +685,12 @@ PWR_STATE CODE RRAX_T MOV #$8000,Y -RPT #0 +RPT #1 RRAX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %. +MOV #%.,PC ENDCODE RRAX_T ; you should see %-100000000000000 --> % @@ -571,12 +699,12 @@ PWR_STATE CODE RRAX_T MOV #$8000,Y -RPT #1 +RPT #2 RRAX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %. +MOV #%.,PC ENDCODE RRAX_T ; you should see %-10000000000000 --> % @@ -585,12 +713,12 @@ PWR_STATE CODE RRAX_T MOV #$8000,Y -RPT #2 +RPT #3 RRAX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %. +MOV #%.,PC ENDCODE RRAX_T ; you should see %-1000000000000 --> % @@ -599,12 +727,12 @@ PWR_STATE CODE RRAX_T MOV #$8000,Y -RPT #6 +RPT #7 RRAX Y SUB #2,PSP MOV TOS,0(PSP) MOV Y,TOS -JMP %. +MOV #%.,PC ENDCODE RRAX_T ; you should see %-100000000 --> % @@ -636,7 +764,7 @@ PWR_STATE CODE RLAX_T MOV #-1,Y -RPT #0 +RPT #1 ADDX Y,Y SUB #2,PSP MOV TOS,0(PSP) @@ -650,7 +778,7 @@ PWR_STATE CODE RLAX_T MOV #-1,Y -RPT #1 +RPT #2 ADDX Y,Y SUB #2,PSP MOV TOS,0(PSP) @@ -664,7 +792,7 @@ PWR_STATE CODE RLAX_T MOV #-1,Y -RPT #2 +RPT #3 ADDX Y,Y SUB #2,PSP MOV TOS,0(PSP) @@ -678,7 +806,7 @@ PWR_STATE CODE RLAX_T MOV #-1,Y -RPT #7 +RPT #8 ADDX Y,Y SUB #2,PSP MOV TOS,0(PSP) @@ -717,7 +845,7 @@ PWR_STATE CODE ADDX_T MOV #0,Y MOV #-1,X -RPT #0 +RPT #1 ADDX X,Y SUB #2,PSP MOV TOS,0(PSP) @@ -732,7 +860,7 @@ PWR_STATE CODE ADDX_T MOV #0,Y MOV #-1,X -RPT #1 +RPT #2 ADDX X,Y SUB #2,PSP MOV TOS,0(PSP) @@ -747,7 +875,7 @@ PWR_STATE CODE ADDX_T MOV #0,Y MOV #-1,X -RPT #7 +RPT #8 ADDX X,Y SUB #2,PSP MOV TOS,0(PSP) @@ -787,7 +915,7 @@ PWR_STATE CODE SUBX_T MOV #0,Y MOV #-1,X -RPT #0 +RPT #1 SUBX X,Y SUB #2,PSP MOV TOS,0(PSP) @@ -802,7 +930,7 @@ PWR_STATE CODE SUBX_T MOV #0,Y MOV #-1,X -RPT #1 +RPT #2 SUBX X,Y SUB #2,PSP MOV TOS,0(PSP) @@ -817,7 +945,7 @@ PWR_STATE CODE SUBX_T MOV #0,Y MOV #-1,X -RPT #7 +RPT #8 SUBX X,Y SUB #2,PSP MOV TOS,0(PSP) @@ -830,7 +958,7 @@ SUBX_T ; you should see 8 --> PWR_STATE CODE SUBX_T \ W register = R10 -MOV #15,W \ RPT [W] times, modulo 16 <--> RPT #15 +MOV #15,W \ RPT [W] times, modulo 16 <--> RPT #16 MOV #0,Y MOV #-1,X RPT W @@ -846,7 +974,7 @@ SUBX_T ; you should see 16 --> PWR_STATE CODE SUBX_T -MOV #32,W \ RPT [W] times, modulo 16 <--> RPT #0 +MOV #32,W \ RPT [W] times, modulo 16 <--> RPT #1 MOV #0,Y MOV #-1,X RPT W @@ -862,7 +990,7 @@ SUBX_T ; you should see 1 --> PWR_STATE CODE SUBX_T -MOV #33,W \ RPT [W] times, modulo 16 <--> RPT #1 +MOV #33,W \ RPT [W] times, modulo 16 <--> RPT #2 MOV #0,Y MOV #-1,X RPT W @@ -875,3 +1003,4 @@ ENDCODE SUBX_T ; you should see 2 --> +RST_STATE diff --git a/MSP430-FORTH/TSTWORDS.4th b/MSP430-FORTH/TSTWORDS.4th deleted file mode 100644 index 4134fbc..0000000 --- a/MSP430-FORTH/TSTWORDS.4th +++ /dev/null @@ -1,90 +0,0 @@ -\ ----------------------------- -\ MSP-EXP430FR5969_TSTWORDS.4th -\ ----------------------------- - -PWR_STATE - -\ ----------------------------------------------------------------------- -\ test some assembler words and show how to mix FORTH/ASSEMBLER routines -\ ----------------------------------------------------------------------- -LOAD" \misc\TestASM.4th" - -\ ------------------------------------- -\ here we returned in the TestWords.4th -\ ------------------------------------- -ECHO -\ ---------- -\ LOOP tests -\ ---------- -: LOOP_TEST 8 0 DO I . LOOP -; - -LOOP_TEST \ you should see 0 1 2 3 4 5 6 7 --> - - -: LOOP_TEST1 \ n --- - - BEGIN DUP U. 1 - - ?DUP - 0= UNTIL -; - -: LOOP_MAX \ FIND_NOTHING -- - 0 0 - DO - LOOP \ 14 cycles by loop - ABORT" 65536 LOOP " -; - - : FIND_TEST \ FIND_TEST -- - BL WORD \ -- c-addr - 50000 0 - DO \ -- c-addr - DUP - FIND DROP DROP - LOOP - FIND - 0= IF ABORT" <-- not found !" - ELSE ABORT" <-- found !" - THEN - ; - -\ seeking $ word, FIND jumps all words on their first character so time of word loop is 20 cycles -\ see FIND in the source file for more information - -\ FIND_TEST result @ 8MHz, monothread : 1,2s - -\ FIND_TEST $ results @ 8MHz, monothread, 201 words in vocabulary FORTH : -\ 27 seconds with only FORTH vocabulary in CONTEXT -\ 540 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) -\ 2.6866 us / word, 21,49 cycles / word (for 20 cycles calculated (see FIND in source file) - - -\ FIND_TEST $ results @ 8MHz, 2 threads, 201 words in vocabulary FORTH : -\ 13 second with only FORTH vocabulary in CONTEXT -\ 260 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) -\ 1,293 us / word, 10,34 cycles / word - -\ FIND_TEST $ results @ 8MHz, 4 threads, 201 words in vocabulary FORTH : -\ 8 second with only FORTH vocabulary in CONTEXT -\ 160 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) -\ 0,796 us / word, 6,37 cycles / word - -\ FIND_TEST $ results @ 8MHz, 8 threads, 201 words in vocabulary FORTH : -\ 4.66 second with only FORTH vocabulary in CONTEXT -\ 93 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) -\ 0,4463 us / word, 3,7 cycles / word - -\ FIND_TEST $ results @ 8MHz, 16 threads, 201 words in vocabulary FORTH : -\ 2,8 second with only FORTH vocabulary in CONTEXT -\ 56 us for one search ( which gives the delay for QNUMBER in INTERPRET routine) -\ 0,278 us / word, 2,22 cycles / word - -\ -------- -\ KEY test -\ -------- -: KEY_TEST - ." type a key : " - KEY EMIT \ wait for a KEY, then emit it -; -\ KEY_TEST diff --git a/MSP430-FORTH/UTILITY.f b/MSP430-FORTH/UTILITY.f index 0ccccec..64128c4 100644 --- a/MSP430-FORTH/UTILITY.f +++ b/MSP430-FORTH/UTILITY.f @@ -33,11 +33,7 @@ \ ASSEMBLER conditionnal usage with ?JMP ?GOTO S< S>= U< U>= 0= 0<> 0< -: DEFINED! ECHO 1 ABORT" already loaded!" ; - -[DEFINED] {TOOLS} [IF] DEFINED! - -[ELSE] +[UNDEFINED] {TOOLS} [IF] PWR_STATE @@ -52,6 +48,34 @@ CODE ? ENDCODE [THEN] +[UNDEFINED] SPACE [IF] +\ https://forth-standard.org/standard/core/SPACE +\ SPACE -- output a space +: SPACE +$20 EMIT ; +[THEN] + +[UNDEFINED] SPACES [IF] +\ https://forth-standard.org/standard/core/SPACES +\ SPACES n -- output n spaces +CODE SPACES +CMP #0,TOS +0<> IF + PUSH IP + BEGIN + LO2HI + $20 EMIT + HI2LO + SUB #2,IP + SUB #1,TOS + 0= UNTIL + MOV @RSP+,IP +THEN +MOV @PSP+,TOS \ -- drop n +NEXT +ENDCODE +[THEN] + [UNDEFINED] .S [IF] \ \ https://forth-standard.org/standard/tools/DotS \ .S -- display of param Stack and stack contents in hedadecimal if not empty @@ -71,16 +95,16 @@ COLON . \ display #cells $08 EMIT \ backspace $3E EMIT SPACE \ char '>' SPACE - OVER OVER > \ - 0= IF + 2DUP 1+ \ + U< IF DROP DROP EXIT THEN \ display content of stack in hexadecimal - BASE @ >R - $10 BASE ! + BASEADR @ >R + $10 BASEADR ! DO I @ U. 2 +LOOP - R> BASE ! + R> BASEADR ! ; [THEN] @@ -94,51 +118,70 @@ CODE .RS ENDCODE [THEN] -[UNDEFINED] AND [IF] +[UNDEFINED] + [IF] +\ https://forth-standard.org/standard/core/Plus +\ + n1/u1 n2/u2 -- n3/u3 add n1+n2 +CODE + +ADD @PSP+,TOS +MOV @IP+,PC +ENDCODE +[THEN] + +[UNDEFINED] C@ [IF] +\ https://forth-standard.org/standard/core/CFetch +\ C@ c-addr -- char fetch char from memory +CODE C@ +MOV.B @TOS,TOS +MOV @IP+,PC +ENDCODE +[THEN] +[UNDEFINED] AND [IF] \ https://forth-standard.org/standard/core/AND \ C AND x1 x2 -- x3 logical AND CODE AND AND @PSP+,TOS MOV @IP+,PC ENDCODE - [THEN] -[UNDEFINED] PAD [IF] - -\ https://forth-standard.org/standard/core/PAD -\ C PAD -- addr -PAD_ORG CONSTANT PAD - +[UNDEFINED] ROT [IF] +\ https://forth-standard.org/standard/core/ROT +\ ROT x1 x2 x3 -- x2 x3 x1 +CODE ROT +MOV @PSP,W \ 2 fetch x2 +MOV TOS,0(PSP) \ 3 store x3 +MOV 2(PSP),TOS \ 3 fetch x1 +MOV W,2(PSP) \ 3 store x2 +MOV @IP+,PC +ENDCODE [THEN] - [UNDEFINED] WORDS [IF] \ https://forth-standard.org/standard/tools/WORDS \ list all words of vocabulary first in CONTEXT. : WORDS \ -- CR -CONTEXT @ PAD \ -- VOC_BODY PAD MOVE all threads of VOC_BODY in PAD -INI_THREAD @ DUP + \ -- VOC_BODY PAD THREAD*2 -MOVE \ -- vocabumary entries are copied in PAD +CONTEXT @ PAD_ORG \ -- VOC_BODY PAD_ORG MOVE all threads of VOC_BODY in PAD_ORG +INI_THREAD @ DUP + \ -- VOC_BODY PAD_ORG THREAD*2 +MOVE \ -- vocabumary entries are copied in PAD_ORG BEGIN \ -- 0 DUP \ -- ptr=0 MAX=0 INI_THREAD @ DUP + 0 \ -- ptr=0 MAX=0 THREADS*2 0 DO \ -- ptr MAX I = PAD_ptr = thread*2 - DUP I PAD + @ \ -- ptr MAX MAX NFAx + DUP I PAD_ORG + @ \ -- ptr MAX MAX NFAx U< IF \ -- ptr MAX if MAX U< NFAx DROP DROP \ -- drop ptr and MAX - I DUP PAD + @ \ -- new_ptr new_MAX + I DUP PAD_ORG + @ \ -- new_ptr new_MAX THEN \ 2 +LOOP \ -- ptr MAX - ?DUP \ -- ptr MAX MAX | -- ptr 0 (all threads in PAD = 0) + ?DUP \ -- ptr MAX MAX | -- ptr 0 (all threads in PAD_ORG = 0) WHILE \ -- ptr MAX replace it by its LFA DUP \ -- ptr MAX MAX 2 - @ \ -- ptr MAX [LFA] ROT \ -- MAX [LFA] ptr - PAD + \ -- MAX [LFA] thread - ! \ -- MAX [LFA]=new_NFA updates PAD+ptr + PAD_ORG + \ -- MAX [LFA] thread + ! \ -- MAX [LFA]=new_NFA updates PAD_ORG+ptr DUP \ -- MAX MAX COUNT $7F AND \ -- MAX addr count (with suppr. of immediate bit) TYPE \ -- MAX @@ -146,25 +189,36 @@ WHILE \ -- ptr MAX replace it by it $10 SWAP - SPACES \ -- complete with spaces modulo 16 chars REPEAT \ -- DROP \ ptr -- -; \ all threads in PAD are filled with 0 +; \ all threads in PAD_ORG are filled with 0 [THEN] [UNDEFINED] MAX [IF] \ MAX and MIN are defined in {ANS_COMP} CODE MAX \ n1 n2 -- n3 signed maximum CMP @PSP,TOS \ n2-n1 S< ?GOTO FW1 \ n2= 2) >R <# 0 # #S #> @@ -176,11 +230,11 @@ R> OVER - 0 MAX SPACES TYPE \ https://forth-standard.org/standard/tools/DUMP CODE DUMP \ adr n -- dump memory PUSH IP -PUSH &BASE \ save current base -MOV #$10,&BASE \ HEX base +PUSH &BASEADR \ save current base +MOV #$10,&BASEADR \ HEX base ADD @PSP,TOS \ -- ORG END LO2HI - SWAP OVER OVER \ -- END ORG END ORG + SWAP 2DUP \ -- END ORG END ORG U. U. \ -- END ORG display org end $FFF0 AND \ -- END ORG_modulo_16 DO CR \ generate line @@ -192,9 +246,9 @@ LO2HI DO I C@ 3 U.R LOOP SPACE SPACE I $10 + I \ display 16 chars - DO I C@ $7E MIN BL MAX EMIT LOOP + DO I C@ $7E MIN $20 MAX EMIT LOOP $10 +LOOP - R> BASE ! \ restore current base + R> BASEADR ! \ restore current base ; [THEN] \ endof [UNDEFINED] DUMP diff --git a/MSP430-FORTH/lib/I2C_Slave_to_LCD_2x20.f b/MSP430-FORTH/lib/I2C_Slave_to_LCD_2x20.f index 8cc696b..d5161fd 100644 --- a/MSP430-FORTH/lib/I2C_Slave_to_LCD_2x20.f +++ b/MSP430-FORTH/lib/I2C_Slave_to_LCD_2x20.f @@ -182,16 +182,16 @@ ASM WDT_Int \ Watchdog interrupt routine, warning : not FORT \ ------------------------------\ BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #34,&TB0CCR2 \ maxi Ton = 34/40 & VDD=3V6 ==> LCD_Vo = -2V2 + CMP #34,&TB0CCRn \ maxi Ton = 34/40 & VDD=3V6 ==> LCD_Vo = -2V2 U< IF - ADD #1,&TB0CCR2 \ action for switch S2 (P2.5) : 78 mV / increment + ADD #1,&TB0CCRn \ action for switch S2 (P2.5) : 78 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #7,&TB0CCR2 \ mini Ton = 6/40 & VDD=3V6 ==> LCD_Vo = 0V + CMP #7,&TB0CCRn \ mini Ton = 6/40 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&TB0CCR2 \ action for switch S1 (P2.6) : -78 mV / decrement + SUB #1,&TB0CCRn \ action for switch S1 (P2.6) : -78 mV / decrement THEN \ THEN \ THEN \ @@ -470,9 +470,9 @@ BIC.B #LCD_DB,&LCD_DB_REN \ lcd_db pullup/down disable \ ------------------------------\ \ set TimerB to generate LCD_V0 via TB0.2 and P1.5/P2.2 \ ------------------------------\ - MOV #%1100000,&TB0CCTL2 \ output mode = set/reset \ clear CCIFG -\ MOV #20,&TB0CCR2 \ contrast adjust : 20/40 ==> LCD_Vo = -1V1|+3V6 (Vcc=3V6) - MOV #25,&TB0CCR2 \ contrast adjust : 25/40 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%1100000,&TB0CCTLn \ output mode = set/reset \ clear CCIFG +\ MOV #20,&TB0CCRn \ contrast adjust : 20/40 ==> LCD_Vo = -1V1|+3V6 (Vcc=3V6) + MOV #25,&TB0CCRn \ contrast adjust : 25/40 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ \ WDT interval init part \ \ ------------------------------\ diff --git a/MSP430-FORTH/lib/LCD_2x20.f b/MSP430-FORTH/lib/LCD_2x20.f index 98ff652..7f4a459 100644 --- a/MSP430-FORTH/lib/LCD_2x20.f +++ b/MSP430-FORTH/lib/LCD_2x20.f @@ -186,16 +186,16 @@ BIC #$F8,0(RSP) \ set CPU ON and GIE OFF in retiSR \ ------------------------------\ BIT.B #SW2,&SW2_IN \ test switch S2 0= IF \ case of switch S2 pressed - CMP #34,&TB0CCR2 \ maxi Ton = 34/40 & VDD=3V6 ==> LCD_Vo = -2V2 + CMP #34,&TB0CCRn \ maxi Ton = 34/40 & VDD=3V6 ==> LCD_Vo = -2V2 U< IF - ADD #1,&TB0CCR2 \ action for switch S2 (P2.5) : 78 mV / increment + ADD #1,&TB0CCRn \ action for switch S2 (P2.5) : 78 mV / increment THEN ELSE BIT.B #SW1,&SW1_IN \ test switch S1 input 0= IF \ case of Switch S1 pressed - CMP #7,&TB0CCR2 \ mini Ton = 6/40 & VDD=3V6 ==> LCD_Vo = 0V + CMP #7,&TB0CCRn \ mini Ton = 6/40 & VDD=3V6 ==> LCD_Vo = 0V U>= IF \ - SUB #1,&TB0CCR2 \ action for switch S1 (P2.6) : -78 mV / decrement + SUB #1,&TB0CCRn \ action for switch S1 (P2.6) : -78 mV / decrement THEN \ THEN \ THEN \ @@ -252,9 +252,9 @@ CODE START \ \ ------------------------------\ \ set TimerB to generate LCD_V0 via TB0.2 and P1.5/P2.2 \ ------------------------------\ - MOV #%1100000,&TB0CCTL2 \ output mode = set/reset \ clear CCIFG -\ MOV #20,&TB0CCR2 \ contrast adjust : 20/40 ==> LCD_Vo = -1V1|+3V6 (Vcc=3V6) - MOV #25,&TB0CCR2 \ contrast adjust : 25/40 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) + MOV #%1100000,&TB0CCTLn \ output mode = set/reset \ clear CCIFG +\ MOV #20,&TB0CCRn \ contrast adjust : 20/40 ==> LCD_Vo = -1V1|+3V6 (Vcc=3V6) + MOV #25,&TB0CCRn \ contrast adjust : 25/40 ==> LCD_Vo = -1V4|+3V3 (Vcc=3V3) \ ------------------------------\ \ ------------------------------\ \ WDT interval init part \ diff --git a/README.md b/README.md index 34b04dc..4861bf5 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,22 @@ FastForth for MSP430FRxxxx TI's chips, from 16k FRAM ================================================== -Tested on all MSP-EXP430FRxxxx TI launchpads (5739,5969,5994,6989,4133,2355,2433) and CHIPSTICKFR2433, at 0.5, 1, 2, 4, 8, 12, 16 MHz plus 20MHz and 24MHz with FR23xx,FR57xx devices. +Tested on all MSP-EXP430FRxxxx TI launchpads (5739,5969,5994,6989,4133,2355,2433,2476), at 0.5, 1, 2, 4, 8, 12, 16 MHz plus 20MHz and 24MHz with FR23xx,FR57xx devices. -Fast Forth is a fast and well-made embedded interpreter/assembler/compiler, very interesting because of its size of 6 KB. -This includes the FORTH language, a symbolic assembler without labels, conditional compilation, a 16-input search engine which -speeds up the Forth interpreter by a factor of 4 and a connection to the serial terminal (TERATERM.exe), with 3 wires software flow control (XON/XOFF) and/or 4 wires hardware control flow, up to 6 Mbds. -If your goal is to program a MSP430FRxxxx in assembler, FAST FORTH is the Swiss Army knife you absolutely need! +Fast Forth is a fast and well-made embedded interpreter/assembler/compiler, very interesting because of its size under 5.5 KB. +This includes the FORTH language, an amazing and powerful assembler with conditional compilation, a 16-input search engine which +speeds up the Forth interpreter by a factor of 4, and a connection to the serial terminal (TERATERM.exe), with 3 wires software flow control (XON/XOFF) and/or 4 wires hardware control flow, up to 6 Mbds. +If your goal is to program a MSP430FRxxxx in assembler or just to learn assembler, enjoy yourself, try it! However, if the IDE works well with Windows 10, it works less well with Linux which suffers from the lack of a good alternative to TERATERM... For only 3 kbytes in addition, you have the primitives to access the SD\_CARD FAT16 and FAT32: read, write, del, download source files and to copy them from PC to the SD_Card. -It works with all SD\_CARD memories from 64MB to 64GB. The cycle of read/write byte is below 1 us @ 16 MHz. +It works with all SD\_CARD memories from 64MB to 64GB. The cycle of read/write a byte is below 1 us @ 16 MHz. This enables to make a fast data logger with a small footprint as a MSP430FR5738 QFN24. -With all kernel options, including extended_ASM, FastForth size is 11kB. +With all kernel options, including extended_ASM and SD_Card driver, FastForth size is below 10.5 kB. - The files launchpad_xMHz.txt are the executables ready to use with - a PL2303HXD cable and a serial terminal (TERATERM.exe) at 115200Bds with XON/XOFF, - or RTS hardware flow control + The files launchpad_xMHz.txt are the executables ready to use with a PL2303HXD cable and + a serial terminal (TERATERM.exe) at 115200Bds with XON/XOFF, or RTS hardware flow control ------------------------------------------------------------------------------------------ WARNING! don't use it to supply your launchpad: red wire is 5V ==> MSP430FRxxxx destroyed! ------------------------------------------------------------------------------------------ @@ -33,20 +32,20 @@ With all kernel options, including extended_ASM, FastForth size is 11kB. The interest of XON/XOFF flow control is to allow 3.75kV galvanic isolation of terminal input with SOIC8 Si8622EC|ISO7421E, or better yet, powered 5kV galvanic isolation with SOIC16 ISOW7821. - If you want to change the terminal baudrate on the fly (230400 bds up to 6 Mbds), - download to your launchpad the file \MSP430-FORTH\CHNGBAUD.4th. - - To see all compilation options, download \MSP430-FORTH\FF_SPECS.4th. - Once the Fast Forth kernel is loaded in the target FRAM memory, you add assembly code or FORTH code, or both, by downloading your source files that the embedded FastForth interprets and compiles. Beforehand, the preprocessor GEMA, by means of a \config\gema\target.pat file, will have translated - the generic source file.f in a targeted source file.4th. This allows the assembler to use - symbolic addresses for all peripheral registers without having to declare them in the embedded FORTH. + your generic source file.f in a targeted source file.4th. This allows the embedded assembler to use + symbolic addresses for all peripheral registers without having to declare them with FORTH words. A set of .bat files in \MSP430-FORTH folder is furnished to do all this automatically. + + If you want to change the terminal baudrate on the fly (230400 bds up to 6 Mbds), + download to your launchpad the file \MSP430-FORTH\CHNGBAUD.f. + + To see all compilation options, download \MSP430-FORTH\FF_SPECS.f. - The download/interpret/compile/execute of a source_file.4th (without comments) is done + The download/interpret/compile/execute of a source_file is done at a throughput of 40/80/120 kbytes/s with a 8/16/24 MHz clock and at maximum allowed baudrate. Considering a ratio 5/1, that of the compiled code is 8/16/24 kbytes/s. @@ -54,14 +53,35 @@ With all kernel options, including extended_ASM, FastForth size is 11kB. without errors which ensures its compatibility with the FORTH CORE ANS94 standard. Notice that FAST FORTH interprets lines up to 84 chars, only SPACE as delimiter, only CR+LF as - End Of Line, and BACKSPACE. + End Of Line, and BACKSPACE. And that the high limit of FORTH program memory is $FF80. Finally, using the SCITE editor as IDE, all is ready to do everything from its "tools" menu. + Once the Forth kernel is programmed, say goodbye to owner's any DLL and FET dongle... What is new ? ------------- +V301 + + -584 bytes, Kernel+CondComp+Assembler is under 5.5 kb. + + the FORTH kernel is drastically reduced to 82 words, just what the operating system needs. + All others are moved in the \ADDON\ANS_COMPLEMENT.asm file, the conditionnal compilation + allowing you to use them on request. + + Taking into account the new TI launchpad LP_MSP430FR2476. + + Fixed: :NONAME (now aligned), LOAD" (no more crash on error). + Modified: ACCEPT, WORD, HEADER, CODE, ENDCODE, ASM, GOTO, ?GOTO, RPT. + Removed JMP and ?JMP from assembler (replaced by GOTO BWx and ?GOTO BWx). + + ACCEPT is modified to include the RXON call in the word SLEEP. + By rewriting the defered word SLEEP, we can easily disable the TERMINAL_INPUT interrupt. + See BACKGROUND, START and STOP in \MSP430-FORTH\RC5toLCD.f. + + + V300 -4 bytes. @@ -1078,6 +1098,9 @@ I have added possibility of several "non canonical" jumps, up to 3 backward and MOV @IP+,PC \ 4 ENDCODE +Forward labels FWx are for single use, Backward labels BWx can solve several jumps. + + SYMBOLIC ASSEMBLER ? YES ! -- diff --git a/SciTEDirectory.properties b/SciTEDirectory.properties index 0c2329b..83146f9 100644 --- a/SciTEDirectory.properties +++ b/SciTEDirectory.properties @@ -611,11 +611,11 @@ import \config\hex import \config\others #if PLAT_GTK -import /media/jeanmi/DATA/CloudStation/config/asm -import /media/jeanmi/DATA/CloudStation/config/forth -import /media/jeanmi/DATA/CloudStation/config/fortran -import /media/jeanmi/DATA/CloudStation/config/hex -import /media/jeanmi/DATA/CloudStation/config/others +import /media/jeanmi/DATA/CloudStation/projets/msp430/config/asm +import /media/jeanmi/DATA/CloudStation/projets/msp430/config/forth +import /media/jeanmi/DATA/CloudStation/projets/msp430/config/fortran +import /media/jeanmi/DATA/CloudStation/projets/msp430/config/hex +import /media/jeanmi/DATA/CloudStation/projets/msp430/config/others # Error list styles diff --git a/binaries/CHIPSTICK_FR2433_16MHz.txt b/binaries/CHIPSTICK_FR2433_16MHz.txt index c9fa607..6408f17 100644 --- a/binaries/CHIPSTICK_FR2433_16MHz.txt +++ b/binaries/CHIPSTICK_FR2433_16MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 A1 F7 80 3E 05 00 18 00 C4 DC 8A D2 -2C 01 7B 30 FC C7 0E C8 +10 00 08 00 A1 F7 80 3E 05 00 18 00 66 DA D0 D0 +2D 01 6B 30 B6 C6 C8 C6 @C400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 E2 C2 22 02 30 41 B2 40 -13 00 0E 05 E2 D2 22 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 C8 CB 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 C8 CB 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C4 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C4 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C4 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C4 02 3E 52 00 0E 12 3E 4F 30 4D 70 C4 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C4 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C4 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C4 +01 21 BE 4F 00 00 3E 4F 30 4D CC C4 02 30 3D 00 +1E 83 0E 7E 30 4D FC C4 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C5 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C4 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 C5 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 C5 02 23 53 00 87 12 88 C5 C0 C5 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C5 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C4 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C5 34 C4 86 C4 D4 C4 BA C5 +92 C4 F8 C5 D4 C5 D6 C7 42 CB 82 C7 2A C4 22 C5 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C5 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C6 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 C6 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 C6 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 E2 C2 22 02 30 41 B2 40 13 00 0E 05 E2 D2 +22 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C6 +B0 12 B6 C6 12 D2 0A 18 F9 3F F0 C4 06 41 43 43 +45 50 54 00 3C 40 64 C7 3B 40 2E C7 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C7 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A C7 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C4 04 45 4D 49 +54 00 30 40 86 C7 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C C7 04 45 43 48 4F 00 B2 40 82 48 +52 C7 82 43 DE 21 30 4D 32 C6 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C7 92 43 DE 21 30 4D 20 C6 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C7 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C7 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C5 +02 43 52 00 30 40 08 C8 87 12 1E C8 02 0D 0A 00 +D6 C7 2A C4 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C5 82 53 22 00 82 43 B4 21 87 12 14 C8 +1E C8 B0 CA 14 C8 22 00 80 C8 4C C8 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA C7 82 2E 22 00 87 12 38 C8 14 C8 D6 C7 +B0 CA 2A C4 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,301 +86,281 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D A2 C5 07 3E +00 00 35 40 0E C4 34 40 00 C4 30 4D 82 C4 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 CB 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 CB 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C5 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 CB 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A CC B0 C5 -B6 C9 44 CC 3D 40 4C CC E2 22 5D 3E 4E CC 0A 4E -3E 4F 3D 40 64 CC 39 27 3D 40 3E CC 1A E2 BE 21 -B3 27 AD 23 66 CC 3E 4F 3D 40 3E CC BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CF -CD 3F B6 CB 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 3A CC -A2 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 C9 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C9 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C6 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 C4 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC C6 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 C7 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE CA 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 C8 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C8 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 CB 42 CB 80 C8 50 CB +3D 40 58 CB CC 22 82 3E 5A CB 0A 4E 3E 4F 3D 40 +70 CB 23 27 3D 40 4A CB 1A E2 BE 21 A1 27 B5 23 +72 CB 3E 4F 3D 40 4A CB B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CE CB 3F D2 CA +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C4 46 CB AE CB B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 C5 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A C4 -42 C9 92 C8 DC C8 3A CC DE C4 70 C5 52 C9 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CD 34 C4 -30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CD 24 C7 D0 CC C0 C7 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C CD 86 41 42 4F 52 54 -22 00 87 12 6C C9 34 C4 2E CD C8 CB 2A C4 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D4 B0 12 -FC C7 92 C3 1C 05 38 40 A0 AA 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 87 12 -6A D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B 5B 37 -6D 00 14 C9 54 C4 28 C7 8A CD 42 C9 52 C9 05 6C -69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 04 1B -5B 30 6D 00 14 C9 12 CD 00 00 83 5B 27 5D 87 12 -B0 CD 34 C4 34 C4 C8 CB C8 CB 2A C4 08 CA 01 27 -87 12 B0 C5 B6 C9 0E CA 28 C7 BE CD 2A C4 6E CC -CE C5 81 5C 92 42 C0 21 C4 21 30 4D 9A CD 81 5B -82 43 BE 21 30 4D C2 CD 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 87 12 -C8 C5 F2 C4 28 C7 02 CE 9E CD 34 C4 E0 CD C8 CB -2A C4 B0 CD E0 CD 2A C4 EA CD 09 49 4D 4D 45 44 +04 C8 8C C7 42 CB 82 C7 46 CB A4 C4 0C C5 1E C8 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CC +14 C8 30 FF A0 CA 26 C5 1E C8 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CC 3C C6 E0 CB C2 CA 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E CC 86 41 42 4F +52 54 22 00 87 12 38 C8 14 C8 40 CC B0 CA 2A C4 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 D1 +B0 12 B6 C6 92 C3 1C 05 38 40 A0 AA 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 1C 05 F3 23 87 12 +42 D1 14 C8 DE 21 EA C4 AC C7 1E C8 04 1B 5B 37 +6D 00 D6 C7 58 C4 40 C6 9A CC 04 C8 1E C8 05 6C +69 6E 65 3A D6 C7 D0 C4 24 C6 D6 C7 1E C8 04 1B +5B 30 6D 00 D6 C7 24 CC 00 00 83 5B 27 5D 87 12 +C0 CC 14 C8 14 C8 B0 CA B0 CA 2A C4 E8 C8 01 27 +87 12 42 CB 80 C8 EE C8 40 C6 CE CC 2A C4 7A CB +32 C5 81 5C 92 42 C0 21 C4 21 30 4D AA CC 81 5B +82 43 BE 21 30 4D D2 CC 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A CA 82 49 53 00 87 12 +BE CB EA C4 40 C6 12 CD AE CC 14 C8 F0 CC B0 CA +2A C4 C0 CC F0 CC 2A C4 FA CC 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 CC 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA 54 C4 -28 C7 BE CD 70 C5 28 C7 66 CE 34 C4 34 C4 C8 CB -C8 CB 34 C4 C8 CB C8 CB 2A C4 CE CD 81 3B 82 93 -BE 21 A8 27 87 12 34 C4 2A C4 C8 CB 04 CF D0 CD -2A C4 6C CE 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CE BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 CE 01 3A 30 12 A4 CE -87 12 92 C9 B0 C5 B6 C9 CA CE 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CE 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C9 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CD B0 C9 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CE BA 40 86 12 FC FF E4 3F 16 CC 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CE BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CF 06 43 52 45 41 54 -45 00 B0 12 C0 CE BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CC 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CF 05 44 -45 46 45 52 30 12 12 CF 8B 3F 6E CA 05 3E 42 4F -44 59 2E 52 30 4D 6A CF 04 43 4F 44 45 00 B0 12 -C0 CE 2A 82 82 4A C6 21 87 12 B2 CE 94 D2 66 D2 -2A C4 B8 CF 07 43 4F 44 45 4E 4E 4D 87 12 8C CE -D0 CD C2 CF 2A C4 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D2 04 CF 2A C4 1A CD 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A D2 DA 21 D9 3F E8 CF 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE D2 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A C4 02 00 A2 52 C6 21 ED 3F 0A CE 85 48 49 32 -4C 4F 87 12 F2 C6 8C D0 C8 CB D0 CD 94 D2 66 D2 -2A C4 5C D0 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 30 4D -9E CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C9 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 CF 85 42 45 47 49 4E 30 40 F2 C6 B2 D0 -85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CF -85 41 47 41 49 4E 39 40 24 C7 EF 3F 34 CF 85 57 -48 49 4C 45 87 12 78 D0 78 C4 2A C4 22 CE 86 52 -45 50 45 41 54 00 87 12 F6 D0 B8 D0 2A C4 92 D0 -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA CB 84 4C 4F 4F 50 00 39 40 -5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B 4C 4F -4F 50 39 40 4C C7 E5 3F 48 D1 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A D1 04 4D 4F 56 45 00 0A 4E +C4 CB 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 CB +80 C8 EE C8 58 C4 40 C6 CE CC 0C C5 40 C6 5C CD +14 C8 14 C8 B0 CA B0 CA 14 C8 B0 CA B0 CA 2A C4 +DE CC 81 3B 82 93 BE 21 B5 27 87 12 14 C8 2A C4 +B0 CA FA CD E0 CC 2A C4 62 CD 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CD 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A CD 01 3A 30 12 A0 CD 92 B3 C6 21 A2 63 C6 21 +87 12 42 CB 80 C8 C8 CD 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C8 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CC 90 CB 05 44 45 46 45 52 +B0 12 B8 CD BA 40 30 40 FC FF BA 40 AE CD FE FF +E3 3F 1E CB 06 43 52 45 41 54 45 00 B0 12 B8 CD +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CE 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C9 05 3E 42 4F 44 59 2E 52 +30 4D 44 CE 04 43 4F 44 45 00 B0 12 B8 CD A2 82 +C6 21 87 12 D2 D0 AC D0 2A C4 84 CE 07 43 4F 44 +45 4E 4E 4D B0 12 86 CD F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 D0 FA CD 2A C4 2C CC 03 41 +53 4D B2 40 B0 D0 DA 21 E0 3F AC CE 06 45 4E 44 +41 53 4D 00 87 12 B4 CE F4 D0 2A C4 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 D0 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A C4 +02 00 A2 52 C6 21 ED 3F 1A CD 85 48 49 32 4C 4F +87 12 A0 CA 4A CF B0 CA E0 CC D2 D0 AC D0 2A C4 +1A CF 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 C6 00 00 2E 53 30 4D 5E CE +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C C6 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C7 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C CE 85 42 45 47 49 4E 30 40 A0 CA 70 CF 85 55 +4E 54 49 4C 39 40 40 C6 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CE 85 41 +47 41 49 4E 39 40 3C C6 EF 3F 7A C8 85 57 48 49 +4C 45 87 12 36 CF 76 C4 2A C4 34 C8 86 52 45 50 +45 41 54 00 87 12 B4 CF 76 CF 2A C4 50 CF 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 C6 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 CA 84 4C 4F 4F 50 00 39 40 76 C6 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C6 85 2B 4C 4F 4F 50 +39 40 64 C6 E5 3F 06 D0 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE D0 -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CF -34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 C8 CB -5E C7 0A D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 C8 CB -FA C4 8A CF 34 C4 CA 21 FA C4 2A C4 AE CD 05 46 -4F 52 54 48 84 12 24 D2 8E D2 C4 D5 CC D2 2E D2 -74 D0 7C D1 F8 D3 BE D2 8E D4 A8 D4 D0 D0 34 D5 -00 00 CC D3 D8 CD AC CF 00 00 F0 D0 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D2 AE DB 16 DC 62 DB -80 DC 28 DB A4 DC 54 D8 00 00 1E DB CE DB 80 DB -BE DB 64 D9 00 00 00 00 B2 DC 58 D2 5C D2 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C CE 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 D1 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 D0 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CE 86 5B 54 48 45 4E 5D 00 30 4D 14 D3 -86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 36 C5 -B0 C5 B6 C9 1C CC 44 C4 28 C7 8E D3 8A C4 8A C4 -52 C9 06 5B 54 48 45 4E 5D 00 EA D2 32 C7 5C D3 -36 C9 40 C5 54 C4 32 C7 30 D3 2A C4 8A C4 8A C4 -52 C9 06 5B 45 4C 53 45 5D 00 EA D2 32 C7 7C D3 -36 C9 40 C5 54 C4 32 C7 2E D3 2A C4 52 C9 04 5B -49 46 5D 00 EA D2 32 C7 30 D3 24 C7 2E D3 36 C9 -52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 2A CC 24 C7 -30 D3 20 D3 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C5 B6 C9 0E CA 6C C4 2A C4 B4 D3 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 0E CA -6C C4 64 C5 2A C4 E8 D3 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 D1 06 4D 41 52 4B 45 52 00 -B0 12 C0 CE BA 40 84 12 FC FF BA 40 E6 D3 FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A CF 34 D2 C4 D2 D8 D2 2C D4 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D2 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D4 8A D2 -C4 DC 0E D1 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D4 92 42 0C 18 70 D4 EF 3F 60 D4 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E D4 92 42 -C6 21 70 D4 30 4D 74 D4 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 D1 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C8 24 C8 B2 40 3E D5 3C D5 -B2 40 8A D2 0E 18 B2 40 C4 DC 0C 18 30 12 7E D4 -B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 A0 C7 -9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 BC C4 -35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 D4 04 57 41 52 4D 00 30 40 3E D5 3D 40 -74 D5 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 -10 00 00 02 02 20 3E E3 1E 53 F2 D0 30 00 0A 02 -3E 90 0A 00 B1 27 3E 90 16 00 AE 2F 2E 93 7D 27 -86 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -8A CD E2 D2 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 43 02 02 -B2 D3 06 02 D2 43 24 02 F2 D3 26 02 F2 40 FD 00 -22 02 E2 D2 24 02 F2 40 A5 00 A1 01 F2 40 10 00 -A0 01 D2 43 A1 01 B2 40 00 A5 60 01 B2 40 29 01 -80 01 B2 40 0B 00 82 01 B2 40 E9 01 84 01 39 40 -00 01 B2 D0 10 00 86 01 92 D2 5E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 -89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 D6 D5 -DA FF FB 23 B2 40 2C C8 E4 FF B2 40 81 00 00 05 -92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 -92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 3A D5 -40 3F 38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 -09 9A 03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A -C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 0E CA 32 C7 -BA D6 CA CA 28 C7 BE CD DC D6 BC D6 29 4E 39 90 -86 12 02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E -02 00 04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 -3E 40 28 00 B0 12 A4 D6 19 42 C6 21 A2 53 C6 21 +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C8 +CA 21 F2 C4 2A C4 84 12 7E D0 AE CF 4C D3 DE CF +BE CC 32 CF 3A D0 60 D4 64 C8 66 D1 80 D1 8E CF +00 D2 00 00 32 D4 E8 CC 78 CE 00 00 84 12 7E D0 +7E D9 E0 D9 32 D9 54 DA F8 D8 00 00 28 D6 00 00 +EE D8 9E D9 50 D9 8E D9 38 D7 00 00 00 00 30 DA +AA D0 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 D0 EE D0 +F4 D0 04 D1 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CD 09 50 57 52 5F 53 54 41 +54 45 84 12 FC D0 D0 D0 66 DA CC CF 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 D1 92 42 0C 18 +48 D1 EF 3F 38 D1 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 D1 92 42 C6 21 48 D1 30 4D 4C D1 +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC CF 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C6 +DE C6 B2 40 0A D2 08 D2 B2 40 D0 D0 0E 18 B2 40 +66 DA 0C 18 30 12 56 D1 B2 40 86 C7 84 C7 B2 40 +08 C8 06 C8 B2 40 98 C6 96 C6 B2 40 18 00 0A 18 +37 40 1A C4 36 40 92 C4 35 40 0E C4 34 40 00 C4 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A D1 +04 57 41 52 4D 00 30 40 0A D2 3D 40 40 D2 92 C3 +30 01 1E 42 08 18 0E 93 12 24 F2 B0 10 00 00 02 +02 20 3E E3 1E 53 F2 D0 30 00 0A 02 3E 90 0A 00 +B7 27 3E 90 16 00 B4 2F 2E 93 83 27 8C 2F 30 4D +1E C8 06 0D 1B 5B 37 6D 23 00 D6 C7 34 C6 1E C8 +19 46 61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D +2E 54 68 6F 6F 72 65 6E 73 20 D6 C7 14 C8 30 FF +A0 CA B8 C4 24 C6 1E C8 0A 62 79 74 65 73 20 66 +72 65 65 00 3C C6 9A CC 82 CF 04 43 4F 4C 44 00 +92 B3 0A 05 FD 23 B2 40 04 A5 20 01 40 D2 B2 40 +88 5A CC 01 B2 43 02 02 B2 D3 06 02 D2 43 24 02 +F2 D3 26 02 F2 40 FD 00 22 02 E2 D2 24 02 F2 40 +A5 00 A1 01 F2 40 10 00 A0 01 D2 43 A1 01 B2 40 +00 A5 60 01 B2 40 29 01 80 01 B2 40 0B 00 82 01 +B2 40 E9 01 84 01 39 40 00 01 B2 D0 10 00 86 01 +92 D2 5E 01 08 18 38 40 59 14 18 83 FE 23 19 83 +FA 23 39 40 00 10 29 83 89 43 00 20 FC 23 39 40 +26 00 29 83 B9 40 9E D2 DA FF FB 23 B2 40 26 C7 +E4 FF B2 40 81 00 00 05 92 42 02 18 06 05 92 42 +04 18 08 05 92 C3 00 05 92 D3 1A 05 3F 40 80 20 +31 40 E0 20 30 12 06 D2 48 3F 8A D2 07 43 4F 4D +50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B 0E 5C +0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 FF FF +F5 27 02 2C 3E 43 30 4D 1E 43 30 4D B2 CD 86 5B +54 48 45 4E 5D 00 30 4D 7E D3 86 5B 45 4C 53 45 +5D 00 87 12 14 C8 00 00 C6 C4 42 CB 80 C8 24 CB +34 C4 40 C6 F4 D3 44 C4 1E C8 06 5B 54 48 45 4E +5D 00 54 D3 4A C6 C4 D3 F8 C7 D0 C4 58 C4 4A C6 +9A D3 2A C4 44 C4 1E C8 06 5B 45 4C 53 45 5D 00 +54 D3 4A C6 E2 D3 F8 C7 D0 C4 58 C4 4A C6 98 D3 +2A C4 1E C8 04 5B 49 46 5D 00 54 D3 4A C6 9A D3 +3C C6 98 D3 F8 C7 1E C8 05 0D 0A 6B 6F 20 D6 C7 +8C C7 32 CB 3C C6 9A D3 8A D3 84 5B 49 46 5D 00 +0E 93 3E 4F BE 27 30 4D 0A D4 89 5B 44 45 46 49 +4E 45 44 5D 87 12 42 CB 80 C8 EE C8 6A C4 2A C4 +1A D4 8B 5B 55 4E 44 45 46 49 4E 45 44 5D 87 12 +42 CB 80 C8 EE C8 6A C4 00 C5 2A C4 4E D4 3D 41 +B2 4E 0E 18 A2 4E 0C 18 3E 4F 30 40 56 D1 48 D0 +06 4D 41 52 4B 45 52 00 B0 12 B8 CD BA 40 84 12 +FC FF BA 40 4C D4 FE FF 9A 42 C8 21 00 00 28 83 +8A 48 02 00 A2 52 C6 21 30 40 00 CE 1C 15 B0 12 +2A C4 80 C8 EE C8 4A C6 A2 D4 AA C9 40 C6 CE CC +BC D4 A4 D4 39 4E 39 80 86 12 08 24 19 53 02 20 +2E 4E 04 3C 2E 53 19 53 01 24 2E 82 1B 17 30 41 +3E 40 28 00 B0 12 8C D4 19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 -C4 21 B0 12 2A C4 B6 C9 CA CA 28 C7 1A D7 10 D7 -21 53 3E 90 10 00 83 2D E1 2B 1C D7 B2 41 C4 21 -DD 3F 87 12 B0 C5 82 D6 2A D7 0C 43 1B 42 C6 21 -A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 -C4 21 B0 12 A4 D6 0E 93 03 20 3C 40 00 03 21 3C -1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 -20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 -03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 -08 3C 3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 -10 02 92 53 C4 21 B0 12 A4 D6 ED 3F 7A 90 40 00 -16 20 3C 40 20 00 92 53 C4 21 B0 12 F8 D6 0C 20 -3C 50 10 00 3E 40 2B 00 B0 12 F8 D6 92 92 C0 21 -C4 21 02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 -F8 D6 FA 23 3C 50 10 00 B0 12 E0 D6 EF 3F 0C 43 -1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 82 D6 00 D8 -FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 -C8 3F B0 12 F8 D6 E1 23 3C 50 80 00 B0 12 E0 D6 -DC 3F 1C C8 04 52 45 54 49 00 87 12 34 C4 00 13 -C8 CB 2A C4 34 C4 2C 00 22 D7 F8 D7 3E D8 2E 4E -0E DC 09 4B A4 3F 3E D0 03 4D 4F 56 84 12 34 D8 -00 40 48 D8 05 4D 4F 56 2E 42 84 12 34 D8 40 40 -00 00 03 41 44 44 84 12 34 D8 00 50 62 D8 05 41 -44 44 2E 42 84 12 34 D8 40 50 6E D8 04 41 44 44 -43 00 84 12 34 D8 00 60 7C D8 06 41 44 44 43 2E -42 00 84 12 34 D8 40 60 24 D8 04 53 55 42 43 00 -84 12 34 D8 00 70 9A D8 06 53 55 42 43 2E 42 00 -84 12 34 D8 40 70 A8 D8 03 53 55 42 84 12 34 D8 -00 80 B8 D8 05 53 55 42 2E 42 84 12 34 D8 40 80 -20 D0 03 43 4D 50 84 12 34 D8 00 90 D2 D8 05 43 -4D 50 2E 42 84 12 34 D8 40 90 0E D0 04 44 41 44 -44 00 84 12 34 D8 00 A0 EC D8 06 44 41 44 44 2E -42 00 84 12 34 D8 40 A0 DE D8 03 42 49 54 84 12 -34 D8 00 B0 0A D9 05 42 49 54 2E 42 84 12 34 D8 -40 B0 16 D9 03 42 49 43 84 12 34 D8 00 C0 24 D9 -05 42 49 43 2E 42 84 12 34 D8 40 C0 30 D9 03 42 -49 53 84 12 34 D8 00 D0 3E D9 05 42 49 53 2E 42 -84 12 34 D8 40 D0 00 00 03 58 4F 52 84 12 34 D8 -00 E0 58 D9 05 58 4F 52 2E 42 84 12 34 D8 40 E0 -8A D8 03 41 4E 44 84 12 34 D8 00 F0 72 D9 05 41 -4E 44 2E 42 84 12 34 D8 40 F0 B0 C5 22 D7 90 D9 -0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F -C4 D8 03 52 52 43 84 12 8A D9 00 10 A2 D9 05 52 -52 43 2E 42 84 12 8A D9 40 10 AE D9 04 53 57 50 -42 00 84 12 8A D9 80 10 BC D9 03 52 52 41 84 12 -8A D9 00 11 CA D9 05 52 52 41 2E 42 84 12 8A D9 -40 11 D6 D9 03 53 58 54 84 12 8A D9 80 11 00 00 -04 50 55 53 48 00 84 12 8A D9 00 12 F0 D9 06 50 -55 53 48 2E 42 00 84 12 8A D9 40 12 4A D9 04 43 -41 4C 4C 00 84 12 8A D9 80 12 1A 53 0E 4A 87 12 -E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 62 6F 75 6E -64 73 3A CD B0 C5 82 D6 3A DA 92 53 C4 21 3E 40 -2C 00 B0 12 2A C4 B6 C9 CA CA 28 C7 BE CD EE D7 -52 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 -08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F -5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F E4 D9 -04 52 52 43 4D 00 84 12 34 DA 50 00 80 DA 04 52 -52 41 4D 00 84 12 34 DA 50 01 8E DA 04 52 4C 41 -4D 00 84 12 34 DA 50 02 9C DA 04 52 52 55 4D 00 -84 12 34 DA 50 03 FE D9 05 50 55 53 48 4D 84 12 -34 DA 00 15 B8 DA 04 50 4F 50 4D 00 84 12 34 DA -00 17 85 12 00 3C AA DA 03 53 3E 3D 85 12 00 38 -D8 DA 02 53 3C 00 85 12 00 34 C6 DA 03 30 3E 3D -85 12 00 30 EC DA 02 30 3C 00 85 12 00 30 00 00 -02 55 3C 00 85 12 00 2C 00 DB 03 55 3E 3D 85 12 -00 28 F6 DA 03 30 3C 3E 85 12 00 24 14 DB 02 30 +C4 21 B0 12 2A C4 80 C8 AA C9 40 C6 FA D4 F0 D4 +21 53 3E 90 10 00 7D 2D E1 2B FC D4 B2 41 C4 21 +DD 3F 87 12 42 CB 74 C8 0A D5 0C 43 1B 42 C6 21 +A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 27 20 92 53 +C4 21 B0 12 8C D4 3C 40 00 03 0E 93 1C 24 3C 40 +10 03 1E 93 18 24 3C 40 20 03 2E 93 14 24 3C 40 +20 02 2E 92 10 24 3C 40 30 02 3E 92 0C 24 3C 40 +30 03 3E 93 08 24 3C 40 30 00 19 42 C6 21 A2 53 +C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 +07 20 3C 40 10 02 92 53 C4 21 B0 12 8C D4 ED 3F +7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 B0 12 +D8 D4 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 D8 D4 +92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 0C 5E +DA 3F B0 12 D8 D4 FA 23 3C 50 10 00 B0 12 C0 D4 +EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 42 CB +74 C8 D4 D5 FE 90 26 00 00 00 3E 40 20 00 03 20 +3C 50 82 00 C8 3F B0 12 D8 D4 E1 23 3C 50 80 00 +B0 12 C0 D4 DC 3F D6 C6 04 52 45 54 49 00 87 12 +14 C8 00 13 B0 CA 2A C4 14 C8 2C 00 02 D5 CC D5 +12 D6 09 4B 2E 4E 0E DC A4 3F FC CE 03 4D 4F 56 +84 12 08 D6 00 40 1C D6 05 4D 4F 56 2E 42 84 12 +08 D6 40 40 00 00 03 41 44 44 84 12 08 D6 00 50 +36 D6 05 41 44 44 2E 42 84 12 08 D6 40 50 42 D6 +04 41 44 44 43 00 84 12 08 D6 00 60 50 D6 06 41 +44 44 43 2E 42 00 84 12 08 D6 40 60 F8 D5 04 53 +55 42 43 00 84 12 08 D6 00 70 6E D6 06 53 55 42 +43 2E 42 00 84 12 08 D6 40 70 7C D6 03 53 55 42 +84 12 08 D6 00 80 8C D6 05 53 55 42 2E 42 84 12 +08 D6 40 80 DE CE 03 43 4D 50 84 12 08 D6 00 90 +A6 D6 05 43 4D 50 2E 42 84 12 08 D6 40 90 CC CE +04 44 41 44 44 00 84 12 08 D6 00 A0 C0 D6 06 44 +41 44 44 2E 42 00 84 12 08 D6 40 A0 B2 D6 03 42 +49 54 84 12 08 D6 00 B0 DE D6 05 42 49 54 2E 42 +84 12 08 D6 40 B0 EA D6 03 42 49 43 84 12 08 D6 +00 C0 F8 D6 05 42 49 43 2E 42 84 12 08 D6 40 C0 +04 D7 03 42 49 53 84 12 08 D6 00 D0 12 D7 05 42 +49 53 2E 42 84 12 08 D6 40 D0 00 00 03 58 4F 52 +84 12 08 D6 00 E0 2C D7 05 58 4F 52 2E 42 84 12 +08 D6 40 E0 5E D6 03 41 4E 44 84 12 08 D6 00 F0 +46 D7 05 41 4E 44 2E 42 84 12 08 D6 40 F0 42 CB +02 D5 64 D7 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 +0C DA 4F 3F 98 D6 03 52 52 43 84 12 5E D7 00 10 +76 D7 05 52 52 43 2E 42 84 12 5E D7 40 10 82 D7 +04 53 57 50 42 00 84 12 5E D7 80 10 90 D7 03 52 +52 41 84 12 5E D7 00 11 9E D7 05 52 52 41 2E 42 +84 12 5E D7 40 11 AA D7 03 53 58 54 84 12 5E D7 +80 11 00 00 04 50 55 53 48 00 84 12 5E D7 00 12 +C4 D7 06 50 55 53 48 2E 42 00 84 12 5E D7 40 12 +1E D7 04 43 41 4C 4C 00 84 12 5E D7 80 12 1A 53 +0E 4A 87 12 34 C6 1E C8 0D 6F 75 74 20 6F 66 20 +62 6F 75 6E 64 73 4C CC 42 CB 74 C8 0E D8 92 53 +C4 21 3E 40 2C 00 B0 12 2A C4 80 C8 AA C9 40 C6 +CE CC C2 D5 26 D8 0A 4E 3E 4F 1A 83 E0 33 29 4E +59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 +10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 +8F 3F B8 D7 04 52 52 43 4D 00 84 12 08 D8 50 00 +54 D8 04 52 52 41 4D 00 84 12 08 D8 50 01 62 D8 +04 52 4C 41 4D 00 84 12 08 D8 50 02 70 D8 04 52 +52 55 4D 00 84 12 08 D8 50 03 D2 D7 05 50 55 53 +48 4D 84 12 08 D8 00 15 8C D8 04 50 4F 50 4D 00 +84 12 08 D8 00 17 7E D8 03 53 3E 3D 85 12 00 38 +A8 D8 02 53 3C 00 85 12 00 34 9A D8 03 30 3E 3D +85 12 00 30 BC D8 02 30 3C 00 85 12 00 30 00 00 +02 55 3C 00 85 12 00 2C D0 D8 03 55 3E 3D 85 12 +00 28 C6 D8 03 30 3C 3E 85 12 00 24 E4 D8 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 -8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D 0A DB 04 54 +8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D DA D8 04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 -0A 89 0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D -FA D8 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C -00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 3E DB +0A 89 0A 11 3A 90 00 02 63 2F 88 DA 00 00 30 4D +CE D6 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C +00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 0E D9 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 -2A 83 0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 -08 DA 89 48 00 00 A2 53 C6 21 30 4D 7E D9 05 41 -47 41 49 4E 87 12 D2 DA 86 DB 2A C4 00 00 05 57 -48 49 4C 45 87 12 2C DB 78 C4 2A C4 E2 DA 06 52 -45 50 45 41 54 00 87 12 D2 DA 86 DB 44 DB 2A C4 -E2 DB 3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 -00 00 CA 23 98 42 C6 21 00 00 30 4D 0E DA 03 42 -57 31 84 12 E0 DB E0 21 FE DB 03 42 57 32 84 12 -E0 DB E2 21 0A DC 03 42 57 33 84 12 E0 DB E4 21 -22 DC 3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 -00 00 8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 -3E 4F 30 4D 00 00 03 46 57 31 84 12 20 DC E6 21 -46 DC 03 46 57 32 84 12 20 DC E8 21 52 DC 03 46 -57 33 84 12 20 DC EA 21 3E 90 00 30 07 24 3E E0 -00 04 3E B0 00 10 02 24 3E E0 00 08 30 4D 5E DC -04 47 4F 54 4F 00 87 12 D2 DA B0 CD BE CB 2A C4 -00 00 05 3F 47 4F 54 4F 87 12 68 DC B0 CD BE CB -2A C4 00 00 03 4A 4D 50 87 12 B0 CD B4 DB 2A C4 -92 DC 04 3F 4A 4D 50 00 87 12 68 DC B0 CD 78 C4 -86 DB 2A C4 +2A 83 0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 FF 03 +08 DA 89 48 00 00 A2 53 C6 21 30 4D 52 D7 05 41 +47 41 49 4E 0A 4E 38 40 00 3C E7 3F 00 00 05 57 +48 49 4C 45 87 12 FC D8 76 C4 2A C4 B2 D8 06 52 +45 50 45 41 54 00 87 12 84 D9 14 D9 2A C4 B0 D9 +3D 41 08 4E 3E 4F 2A 48 B2 92 C4 21 CD 2F 98 42 +C6 21 00 00 30 4D E2 D7 03 42 57 31 84 12 AE D9 +00 00 C8 D9 03 42 57 32 84 12 AE D9 00 00 D4 D9 +03 42 57 33 84 12 AE D9 00 00 EC D9 3D 41 1A 42 +C6 21 28 4E B2 92 C4 21 90 2B BA 4F 00 00 A2 53 +C6 21 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 +84 12 EA D9 00 00 0C DA 03 46 57 32 84 12 EA D9 +00 00 18 DA 03 46 57 33 84 12 EA D9 00 00 00 00 +05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 +3E B0 00 10 02 24 3E E0 00 08 87 12 C0 CC DA CA +2A C4 24 DA 04 47 4F 54 4F 00 2F 83 8F 4E 00 00 +3E 40 00 3C F2 3F @FFFE -D6 D5 +9E D2 q diff --git a/binaries/CHIPSTICK_FR2433_1MHz.txt b/binaries/CHIPSTICK_FR2433_1MHz.txt index fb1d166..0d177e0 100644 --- a/binaries/CHIPSTICK_FR2433_1MHz.txt +++ b/binaries/CHIPSTICK_FR2433_1MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 00 D6 E8 03 05 00 18 00 B2 DC 8A D2 -2C 01 7B 30 FC C7 0E C8 +10 00 08 00 00 D6 E8 03 05 00 18 00 54 DA D0 D0 +2D 01 6B 30 B6 C6 C8 C6 @C400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 E2 C2 22 02 30 41 B2 40 -13 00 0E 05 E2 D2 22 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 C8 CB 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 C8 CB 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C4 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C4 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C4 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C4 02 3E 52 00 0E 12 3E 4F 30 4D 70 C4 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C4 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C4 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C4 +01 21 BE 4F 00 00 3E 4F 30 4D CC C4 02 30 3D 00 +1E 83 0E 7E 30 4D FC C4 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C5 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C4 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 C5 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 C5 02 23 53 00 87 12 88 C5 C0 C5 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C5 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C4 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C5 34 C4 86 C4 D4 C4 BA C5 +92 C4 F8 C5 D4 C5 D6 C7 42 CB 82 C7 2A C4 22 C5 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C5 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C6 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 C6 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 C6 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 E2 C2 22 02 30 41 B2 40 13 00 0E 05 E2 D2 +22 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C6 +B0 12 B6 C6 12 D2 0A 18 F9 3F F0 C4 06 41 43 43 +45 50 54 00 3C 40 64 C7 3B 40 2E C7 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C7 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A C7 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C4 04 45 4D 49 +54 00 30 40 86 C7 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C C7 04 45 43 48 4F 00 B2 40 82 48 +52 C7 82 43 DE 21 30 4D 32 C6 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C7 92 43 DE 21 30 4D 20 C6 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C7 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C7 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C5 +02 43 52 00 30 40 08 C8 87 12 1E C8 02 0D 0A 00 +D6 C7 2A C4 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C5 82 53 22 00 82 43 B4 21 87 12 14 C8 +1E C8 B0 CA 14 C8 22 00 80 C8 4C C8 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA C7 82 2E 22 00 87 12 38 C8 14 C8 D6 C7 +B0 CA 2A C4 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,300 +86,280 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D A2 C5 07 3E +00 00 35 40 0E C4 34 40 00 C4 30 4D 82 C4 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 CB 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 CB 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C5 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 CB 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A CC B0 C5 -B6 C9 44 CC 3D 40 4C CC E2 22 5D 3E 4E CC 0A 4E -3E 4F 3D 40 64 CC 39 27 3D 40 3E CC 1A E2 BE 21 -B3 27 AD 23 66 CC 3E 4F 3D 40 3E CC BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CF -CD 3F B6 CB 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 3A CC -A2 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 C9 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C9 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C6 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 C4 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC C6 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 C7 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE CA 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 C8 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C8 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 CB 42 CB 80 C8 50 CB +3D 40 58 CB CC 22 82 3E 5A CB 0A 4E 3E 4F 3D 40 +70 CB 23 27 3D 40 4A CB 1A E2 BE 21 A1 27 B5 23 +72 CB 3E 4F 3D 40 4A CB B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CE CB 3F D2 CA +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C4 46 CB AE CB B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 C5 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A C4 -42 C9 92 C8 DC C8 3A CC DE C4 70 C5 52 C9 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CD 34 C4 -30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CD 24 C7 D0 CC C0 C7 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C CD 86 41 42 4F 52 54 -22 00 87 12 6C C9 34 C4 2E CD C8 CB 2A C4 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D4 B0 12 -FC C7 92 C3 1C 05 38 40 AA 0A 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 87 12 -6A D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B 5B 37 -6D 00 14 C9 54 C4 28 C7 8A CD 42 C9 52 C9 05 6C -69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 04 1B -5B 30 6D 00 14 C9 12 CD 00 00 83 5B 27 5D 87 12 -B0 CD 34 C4 34 C4 C8 CB C8 CB 2A C4 08 CA 01 27 -87 12 B0 C5 B6 C9 0E CA 28 C7 BE CD 2A C4 6E CC -CE C5 81 5C 92 42 C0 21 C4 21 30 4D 9A CD 81 5B -82 43 BE 21 30 4D C2 CD 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 87 12 -C8 C5 F2 C4 28 C7 02 CE 9E CD 34 C4 E0 CD C8 CB -2A C4 B0 CD E0 CD 2A C4 EA CD 09 49 4D 4D 45 44 +04 C8 8C C7 42 CB 82 C7 46 CB A4 C4 0C C5 1E C8 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CC +14 C8 30 FF A0 CA 26 C5 1E C8 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CC 3C C6 E0 CB C2 CA 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E CC 86 41 42 4F +52 54 22 00 87 12 38 C8 14 C8 40 CC B0 CA 2A C4 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 D1 +B0 12 B6 C6 92 C3 1C 05 38 40 AA 0A 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 1C 05 F3 23 87 12 +42 D1 14 C8 DE 21 EA C4 AC C7 1E C8 04 1B 5B 37 +6D 00 D6 C7 58 C4 40 C6 9A CC 04 C8 1E C8 05 6C +69 6E 65 3A D6 C7 D0 C4 24 C6 D6 C7 1E C8 04 1B +5B 30 6D 00 D6 C7 24 CC 00 00 83 5B 27 5D 87 12 +C0 CC 14 C8 14 C8 B0 CA B0 CA 2A C4 E8 C8 01 27 +87 12 42 CB 80 C8 EE C8 40 C6 CE CC 2A C4 7A CB +32 C5 81 5C 92 42 C0 21 C4 21 30 4D AA CC 81 5B +82 43 BE 21 30 4D D2 CC 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A CA 82 49 53 00 87 12 +BE CB EA C4 40 C6 12 CD AE CC 14 C8 F0 CC B0 CA +2A C4 C0 CC F0 CC 2A C4 FA CC 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 CC 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA 54 C4 -28 C7 BE CD 70 C5 28 C7 66 CE 34 C4 34 C4 C8 CB -C8 CB 34 C4 C8 CB C8 CB 2A C4 CE CD 81 3B 82 93 -BE 21 A8 27 87 12 34 C4 2A C4 C8 CB 04 CF D0 CD -2A C4 6C CE 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CE BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 CE 01 3A 30 12 A4 CE -87 12 92 C9 B0 C5 B6 C9 CA CE 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CE 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C9 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CD B0 C9 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CE BA 40 86 12 FC FF E4 3F 16 CC 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CE BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CF 06 43 52 45 41 54 -45 00 B0 12 C0 CE BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CC 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CF 05 44 -45 46 45 52 30 12 12 CF 8B 3F 6E CA 05 3E 42 4F -44 59 2E 52 30 4D 6A CF 04 43 4F 44 45 00 B0 12 -C0 CE 2A 82 82 4A C6 21 87 12 B2 CE 94 D2 66 D2 -2A C4 B8 CF 07 43 4F 44 45 4E 4E 4D 87 12 8C CE -D0 CD C2 CF 2A C4 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D2 04 CF 2A C4 1A CD 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A D2 DA 21 D9 3F E8 CF 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE D2 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A C4 02 00 A2 52 C6 21 ED 3F 0A CE 85 48 49 32 -4C 4F 87 12 F2 C6 8C D0 C8 CB D0 CD 94 D2 66 D2 -2A C4 5C D0 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 30 4D -9E CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C9 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 CF 85 42 45 47 49 4E 30 40 F2 C6 B2 D0 -85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CF -85 41 47 41 49 4E 39 40 24 C7 EF 3F 34 CF 85 57 -48 49 4C 45 87 12 78 D0 78 C4 2A C4 22 CE 86 52 -45 50 45 41 54 00 87 12 F6 D0 B8 D0 2A C4 92 D0 -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA CB 84 4C 4F 4F 50 00 39 40 -5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B 4C 4F -4F 50 39 40 4C C7 E5 3F 48 D1 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A D1 04 4D 4F 56 45 00 0A 4E +C4 CB 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 CB +80 C8 EE C8 58 C4 40 C6 CE CC 0C C5 40 C6 5C CD +14 C8 14 C8 B0 CA B0 CA 14 C8 B0 CA B0 CA 2A C4 +DE CC 81 3B 82 93 BE 21 B5 27 87 12 14 C8 2A C4 +B0 CA FA CD E0 CC 2A C4 62 CD 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CD 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A CD 01 3A 30 12 A0 CD 92 B3 C6 21 A2 63 C6 21 +87 12 42 CB 80 C8 C8 CD 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C8 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CC 90 CB 05 44 45 46 45 52 +B0 12 B8 CD BA 40 30 40 FC FF BA 40 AE CD FE FF +E3 3F 1E CB 06 43 52 45 41 54 45 00 B0 12 B8 CD +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CE 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C9 05 3E 42 4F 44 59 2E 52 +30 4D 44 CE 04 43 4F 44 45 00 B0 12 B8 CD A2 82 +C6 21 87 12 D2 D0 AC D0 2A C4 84 CE 07 43 4F 44 +45 4E 4E 4D B0 12 86 CD F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 D0 FA CD 2A C4 2C CC 03 41 +53 4D B2 40 B0 D0 DA 21 E0 3F AC CE 06 45 4E 44 +41 53 4D 00 87 12 B4 CE F4 D0 2A C4 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 D0 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A C4 +02 00 A2 52 C6 21 ED 3F 1A CD 85 48 49 32 4C 4F +87 12 A0 CA 4A CF B0 CA E0 CC D2 D0 AC D0 2A C4 +1A CF 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 C6 00 00 2E 53 30 4D 5E CE +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C C6 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C7 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C CE 85 42 45 47 49 4E 30 40 A0 CA 70 CF 85 55 +4E 54 49 4C 39 40 40 C6 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CE 85 41 +47 41 49 4E 39 40 3C C6 EF 3F 7A C8 85 57 48 49 +4C 45 87 12 36 CF 76 C4 2A C4 34 C8 86 52 45 50 +45 41 54 00 87 12 B4 CF 76 CF 2A C4 50 CF 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 C6 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 CA 84 4C 4F 4F 50 00 39 40 76 C6 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C6 85 2B 4C 4F 4F 50 +39 40 64 C6 E5 3F 06 D0 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE D0 -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CF -34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 C8 CB -5E C7 0A D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 C8 CB -FA C4 8A CF 34 C4 CA 21 FA C4 2A C4 AE CD 05 46 -4F 52 54 48 84 12 24 D2 8E D2 C4 D5 CC D2 2E D2 -74 D0 7C D1 F8 D3 BE D2 8E D4 A8 D4 D0 D0 34 D5 -00 00 CC D3 D8 CD AC CF 00 00 F0 D0 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D2 9C DB 04 DC 50 DB -6E DC 16 DB 92 DC 42 D8 00 00 0C DB BC DB 6E DB -AC DB 52 D9 00 00 00 00 A0 DC 58 D2 5C D2 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C CE 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 D1 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 D0 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CE 86 5B 54 48 45 4E 5D 00 30 4D 14 D3 -86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 36 C5 -B0 C5 B6 C9 1C CC 44 C4 28 C7 8E D3 8A C4 8A C4 -52 C9 06 5B 54 48 45 4E 5D 00 EA D2 32 C7 5C D3 -36 C9 40 C5 54 C4 32 C7 30 D3 2A C4 8A C4 8A C4 -52 C9 06 5B 45 4C 53 45 5D 00 EA D2 32 C7 7C D3 -36 C9 40 C5 54 C4 32 C7 2E D3 2A C4 52 C9 04 5B -49 46 5D 00 EA D2 32 C7 30 D3 24 C7 2E D3 36 C9 -52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 2A CC 24 C7 -30 D3 20 D3 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C5 B6 C9 0E CA 6C C4 2A C4 B4 D3 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 0E CA -6C C4 64 C5 2A C4 E8 D3 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 D1 06 4D 41 52 4B 45 52 00 -B0 12 C0 CE BA 40 84 12 FC FF BA 40 E6 D3 FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A CF 34 D2 C4 D2 D8 D2 2C D4 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D2 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D4 8A D2 -B2 DC 0E D1 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D4 92 42 0C 18 70 D4 EF 3F 60 D4 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E D4 92 42 -C6 21 70 D4 30 4D 74 D4 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 D1 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C8 24 C8 B2 40 3E D5 3C D5 -B2 40 8A D2 0E 18 B2 40 B2 DC 0C 18 30 12 7E D4 -B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 A0 C7 -9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 BC C4 -35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 D4 04 57 41 52 4D 00 30 40 3E D5 3D 40 -74 D5 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 -10 00 00 02 02 20 3E E3 1E 53 F2 D0 30 00 0A 02 -3E 90 0A 00 B1 27 3E 90 16 00 AE 2F 2E 93 7D 27 -86 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -8A CD E2 D2 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 43 02 02 -B2 D3 06 02 D2 43 24 02 F2 D3 26 02 F2 40 FD 00 -22 02 E2 D2 24 02 B2 40 00 A5 60 01 B2 40 B4 00 -80 01 92 43 82 01 B2 40 1E 00 84 01 39 40 10 00 -B2 D0 10 00 86 01 92 D2 5E 01 08 18 38 40 59 14 -18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 89 43 -00 20 FC 23 39 40 26 00 29 83 B9 40 D6 D5 DA FF -FB 23 B2 40 2C C8 E4 FF B2 40 81 00 00 05 92 42 -02 18 06 05 92 42 04 18 08 05 92 C3 00 05 92 D3 -1A 05 3F 40 80 20 31 40 E0 20 30 12 3A D5 49 3F -38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 09 9A -03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 21 -30 4D 1C 15 B0 12 2A C4 B6 C9 0E CA 32 C7 A8 D6 -CA CA 28 C7 BE CD CA D6 AA D6 29 4E 39 90 86 12 -02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E 02 00 -04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 3E 40 -28 00 B0 12 92 D6 19 42 C6 21 A2 53 C6 21 89 4E +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C8 +CA 21 F2 C4 2A C4 84 12 7E D0 AE CF 3A D3 DE CF +BE CC 32 CF 3A D0 4E D4 64 C8 66 D1 80 D1 8E CF +00 D2 00 00 20 D4 E8 CC 78 CE 00 00 84 12 7E D0 +6C D9 CE D9 20 D9 42 DA E6 D8 00 00 16 D6 00 00 +DC D8 8C D9 3E D9 7C D9 26 D7 00 00 00 00 1E DA +AA D0 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 D0 EE D0 +F4 D0 04 D1 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CD 09 50 57 52 5F 53 54 41 +54 45 84 12 FC D0 D0 D0 54 DA CC CF 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 D1 92 42 0C 18 +48 D1 EF 3F 38 D1 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 D1 92 42 C6 21 48 D1 30 4D 4C D1 +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC CF 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C6 +DE C6 B2 40 0A D2 08 D2 B2 40 D0 D0 0E 18 B2 40 +54 DA 0C 18 30 12 56 D1 B2 40 86 C7 84 C7 B2 40 +08 C8 06 C8 B2 40 98 C6 96 C6 B2 40 18 00 0A 18 +37 40 1A C4 36 40 92 C4 35 40 0E C4 34 40 00 C4 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A D1 +04 57 41 52 4D 00 30 40 0A D2 3D 40 40 D2 92 C3 +30 01 1E 42 08 18 0E 93 12 24 F2 B0 10 00 00 02 +02 20 3E E3 1E 53 F2 D0 30 00 0A 02 3E 90 0A 00 +B7 27 3E 90 16 00 B4 2F 2E 93 83 27 8C 2F 30 4D +1E C8 06 0D 1B 5B 37 6D 23 00 D6 C7 34 C6 1E C8 +19 46 61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D +2E 54 68 6F 6F 72 65 6E 73 20 D6 C7 14 C8 30 FF +A0 CA B8 C4 24 C6 1E C8 0A 62 79 74 65 73 20 66 +72 65 65 00 3C C6 9A CC 82 CF 04 43 4F 4C 44 00 +92 B3 0A 05 FD 23 B2 40 04 A5 20 01 40 D2 B2 40 +88 5A CC 01 B2 43 02 02 B2 D3 06 02 D2 43 24 02 +F2 D3 26 02 F2 40 FD 00 22 02 E2 D2 24 02 B2 40 +00 A5 60 01 B2 40 B4 00 80 01 92 43 82 01 B2 40 +1E 00 84 01 39 40 10 00 B2 D0 10 00 86 01 92 D2 +5E 01 08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 +39 40 00 10 29 83 89 43 00 20 FC 23 39 40 26 00 +29 83 B9 40 9E D2 DA FF FB 23 B2 40 26 C7 E4 FF +B2 40 81 00 00 05 92 42 02 18 06 05 92 42 04 18 +08 05 92 C3 00 05 92 D3 1A 05 3F 40 80 20 31 40 +E0 20 30 12 06 D2 51 3F 8A D2 07 43 4F 4D 50 41 +52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 +1B 83 07 30 1C 83 07 30 19 53 F9 98 FF FF F5 27 +02 2C 3E 43 30 4D 1E 43 30 4D B2 CD 86 5B 54 48 +45 4E 5D 00 30 4D 6C D3 86 5B 45 4C 53 45 5D 00 +87 12 14 C8 00 00 C6 C4 42 CB 80 C8 24 CB 34 C4 +40 C6 E2 D3 44 C4 1E C8 06 5B 54 48 45 4E 5D 00 +42 D3 4A C6 B2 D3 F8 C7 D0 C4 58 C4 4A C6 88 D3 +2A C4 44 C4 1E C8 06 5B 45 4C 53 45 5D 00 42 D3 +4A C6 D0 D3 F8 C7 D0 C4 58 C4 4A C6 86 D3 2A C4 +1E C8 04 5B 49 46 5D 00 42 D3 4A C6 88 D3 3C C6 +86 D3 F8 C7 1E C8 05 0D 0A 6B 6F 20 D6 C7 8C C7 +32 CB 3C C6 88 D3 78 D3 84 5B 49 46 5D 00 0E 93 +3E 4F BE 27 30 4D F8 D3 89 5B 44 45 46 49 4E 45 +44 5D 87 12 42 CB 80 C8 EE C8 6A C4 2A C4 08 D4 +8B 5B 55 4E 44 45 46 49 4E 45 44 5D 87 12 42 CB +80 C8 EE C8 6A C4 00 C5 2A C4 3C D4 3D 41 B2 4E +0E 18 A2 4E 0C 18 3E 4F 30 40 56 D1 48 D0 06 4D +41 52 4B 45 52 00 B0 12 B8 CD BA 40 84 12 FC FF +BA 40 3A D4 FE FF 9A 42 C8 21 00 00 28 83 8A 48 +02 00 A2 52 C6 21 30 40 00 CE 1C 15 B0 12 2A C4 +80 C8 EE C8 4A C6 90 D4 AA C9 40 C6 CE CC AA D4 +92 D4 39 4E 39 80 86 12 08 24 19 53 02 20 2E 4E +04 3C 2E 53 19 53 01 24 2E 82 1B 17 30 41 3E 40 +28 00 B0 12 7A D4 19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 C4 21 -B0 12 2A C4 B6 C9 CA CA 28 C7 08 D7 FE D6 21 53 -3E 90 10 00 83 2D E1 2B 0A D7 B2 41 C4 21 DD 3F -87 12 B0 C5 70 D6 18 D7 0C 43 1B 42 C6 21 A2 53 -C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 C4 21 -B0 12 92 D6 0E 93 03 20 3C 40 00 03 21 3C 1E 93 -03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 20 03 -17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 03 20 -3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 08 3C -3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 -3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 -92 53 C4 21 B0 12 92 D6 ED 3F 7A 90 40 00 16 20 -3C 40 20 00 92 53 C4 21 B0 12 E6 D6 0C 20 3C 50 -10 00 3E 40 2B 00 B0 12 E6 D6 92 92 C0 21 C4 21 -02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 E6 D6 -FA 23 3C 50 10 00 B0 12 CE D6 EF 3F 0C 43 1B 42 -C6 21 A2 53 C6 21 87 12 B0 C5 70 D6 EE D7 FE 90 -26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F -B0 12 E6 D6 E1 23 3C 50 80 00 B0 12 CE D6 DC 3F -1C C8 04 52 45 54 49 00 87 12 34 C4 00 13 C8 CB -2A C4 34 C4 2C 00 10 D7 E6 D7 2C D8 2E 4E 0E DC -09 4B A4 3F 3E D0 03 4D 4F 56 84 12 22 D8 00 40 -36 D8 05 4D 4F 56 2E 42 84 12 22 D8 40 40 00 00 -03 41 44 44 84 12 22 D8 00 50 50 D8 05 41 44 44 -2E 42 84 12 22 D8 40 50 5C D8 04 41 44 44 43 00 -84 12 22 D8 00 60 6A D8 06 41 44 44 43 2E 42 00 -84 12 22 D8 40 60 12 D8 04 53 55 42 43 00 84 12 -22 D8 00 70 88 D8 06 53 55 42 43 2E 42 00 84 12 -22 D8 40 70 96 D8 03 53 55 42 84 12 22 D8 00 80 -A6 D8 05 53 55 42 2E 42 84 12 22 D8 40 80 20 D0 -03 43 4D 50 84 12 22 D8 00 90 C0 D8 05 43 4D 50 -2E 42 84 12 22 D8 40 90 0E D0 04 44 41 44 44 00 -84 12 22 D8 00 A0 DA D8 06 44 41 44 44 2E 42 00 -84 12 22 D8 40 A0 CC D8 03 42 49 54 84 12 22 D8 -00 B0 F8 D8 05 42 49 54 2E 42 84 12 22 D8 40 B0 -04 D9 03 42 49 43 84 12 22 D8 00 C0 12 D9 05 42 -49 43 2E 42 84 12 22 D8 40 C0 1E D9 03 42 49 53 -84 12 22 D8 00 D0 2C D9 05 42 49 53 2E 42 84 12 -22 D8 40 D0 00 00 03 58 4F 52 84 12 22 D8 00 E0 -46 D9 05 58 4F 52 2E 42 84 12 22 D8 40 E0 78 D8 -03 41 4E 44 84 12 22 D8 00 F0 60 D9 05 41 4E 44 -2E 42 84 12 22 D8 40 F0 B0 C5 10 D7 7E D9 0A 4C -3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F B2 D8 -03 52 52 43 84 12 78 D9 00 10 90 D9 05 52 52 43 -2E 42 84 12 78 D9 40 10 9C D9 04 53 57 50 42 00 -84 12 78 D9 80 10 AA D9 03 52 52 41 84 12 78 D9 -00 11 B8 D9 05 52 52 41 2E 42 84 12 78 D9 40 11 -C4 D9 03 53 58 54 84 12 78 D9 80 11 00 00 04 50 -55 53 48 00 84 12 78 D9 00 12 DE D9 06 50 55 53 -48 2E 42 00 84 12 78 D9 40 12 38 D9 04 43 41 4C -4C 00 84 12 78 D9 80 12 1A 53 0E 4A 87 12 E2 C6 -52 C9 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 -3A CD B0 C5 70 D6 28 DA 92 53 C4 21 3E 40 2C 00 -B0 12 2A C4 B6 C9 CA CA 28 C7 BE CD DC D7 40 DA -0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C -59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E -94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F D2 D9 04 52 -52 43 4D 00 84 12 22 DA 50 00 6E DA 04 52 52 41 -4D 00 84 12 22 DA 50 01 7C DA 04 52 4C 41 4D 00 -84 12 22 DA 50 02 8A DA 04 52 52 55 4D 00 84 12 -22 DA 50 03 EC D9 05 50 55 53 48 4D 84 12 22 DA -00 15 A6 DA 04 50 4F 50 4D 00 84 12 22 DA 00 17 -85 12 00 3C 98 DA 03 53 3E 3D 85 12 00 38 C6 DA -02 53 3C 00 85 12 00 34 B4 DA 03 30 3E 3D 85 12 -00 30 DA DA 02 30 3C 00 85 12 00 30 00 00 02 55 -3C 00 85 12 00 2C EE DA 03 55 3E 3D 85 12 00 28 -E4 DA 03 30 3C 3E 85 12 00 24 02 DB 02 30 3D 00 +B0 12 2A C4 80 C8 AA C9 40 C6 E8 D4 DE D4 21 53 +3E 90 10 00 7D 2D E1 2B EA D4 B2 41 C4 21 DD 3F +87 12 42 CB 74 C8 F8 D4 0C 43 1B 42 C6 21 A2 53 +C6 21 6A 4E 3E 4F 7A 90 23 00 27 20 92 53 C4 21 +B0 12 7A D4 3C 40 00 03 0E 93 1C 24 3C 40 10 03 +1E 93 18 24 3C 40 20 03 2E 93 14 24 3C 40 20 02 +2E 92 10 24 3C 40 30 02 3E 92 0C 24 3C 40 30 03 +3E 93 08 24 3C 40 30 00 19 42 C6 21 A2 53 C6 21 +89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 07 20 +3C 40 10 02 92 53 C4 21 B0 12 7A D4 ED 3F 7A 90 +40 00 16 20 3C 40 20 00 92 53 C4 21 B0 12 C6 D4 +0C 20 3C 50 10 00 3E 40 2B 00 B0 12 C6 D4 92 92 +C0 21 C4 21 02 24 92 53 C4 21 8E 10 0C 5E DA 3F +B0 12 C6 D4 FA 23 3C 50 10 00 B0 12 AE D4 EF 3F +0C 43 1B 42 C6 21 A2 53 C6 21 87 12 42 CB 74 C8 +C2 D5 FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 +82 00 C8 3F B0 12 C6 D4 E1 23 3C 50 80 00 B0 12 +AE D4 DC 3F D6 C6 04 52 45 54 49 00 87 12 14 C8 +00 13 B0 CA 2A C4 14 C8 2C 00 F0 D4 BA D5 00 D6 +09 4B 2E 4E 0E DC A4 3F FC CE 03 4D 4F 56 84 12 +F6 D5 00 40 0A D6 05 4D 4F 56 2E 42 84 12 F6 D5 +40 40 00 00 03 41 44 44 84 12 F6 D5 00 50 24 D6 +05 41 44 44 2E 42 84 12 F6 D5 40 50 30 D6 04 41 +44 44 43 00 84 12 F6 D5 00 60 3E D6 06 41 44 44 +43 2E 42 00 84 12 F6 D5 40 60 E6 D5 04 53 55 42 +43 00 84 12 F6 D5 00 70 5C D6 06 53 55 42 43 2E +42 00 84 12 F6 D5 40 70 6A D6 03 53 55 42 84 12 +F6 D5 00 80 7A D6 05 53 55 42 2E 42 84 12 F6 D5 +40 80 DE CE 03 43 4D 50 84 12 F6 D5 00 90 94 D6 +05 43 4D 50 2E 42 84 12 F6 D5 40 90 CC CE 04 44 +41 44 44 00 84 12 F6 D5 00 A0 AE D6 06 44 41 44 +44 2E 42 00 84 12 F6 D5 40 A0 A0 D6 03 42 49 54 +84 12 F6 D5 00 B0 CC D6 05 42 49 54 2E 42 84 12 +F6 D5 40 B0 D8 D6 03 42 49 43 84 12 F6 D5 00 C0 +E6 D6 05 42 49 43 2E 42 84 12 F6 D5 40 C0 F2 D6 +03 42 49 53 84 12 F6 D5 00 D0 00 D7 05 42 49 53 +2E 42 84 12 F6 D5 40 D0 00 00 03 58 4F 52 84 12 +F6 D5 00 E0 1A D7 05 58 4F 52 2E 42 84 12 F6 D5 +40 E0 4C D6 03 41 4E 44 84 12 F6 D5 00 F0 34 D7 +05 41 4E 44 2E 42 84 12 F6 D5 40 F0 42 CB F0 D4 +52 D7 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA +4F 3F 86 D6 03 52 52 43 84 12 4C D7 00 10 64 D7 +05 52 52 43 2E 42 84 12 4C D7 40 10 70 D7 04 53 +57 50 42 00 84 12 4C D7 80 10 7E D7 03 52 52 41 +84 12 4C D7 00 11 8C D7 05 52 52 41 2E 42 84 12 +4C D7 40 11 98 D7 03 53 58 54 84 12 4C D7 80 11 +00 00 04 50 55 53 48 00 84 12 4C D7 00 12 B2 D7 +06 50 55 53 48 2E 42 00 84 12 4C D7 40 12 0C D7 +04 43 41 4C 4C 00 84 12 4C D7 80 12 1A 53 0E 4A +87 12 34 C6 1E C8 0D 6F 75 74 20 6F 66 20 62 6F +75 6E 64 73 4C CC 42 CB 74 C8 FC D7 92 53 C4 21 +3E 40 2C 00 B0 12 2A C4 80 C8 AA C9 40 C6 CE CC +B0 D5 14 D8 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E +0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 +D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F +A6 D7 04 52 52 43 4D 00 84 12 F6 D7 50 00 42 D8 +04 52 52 41 4D 00 84 12 F6 D7 50 01 50 D8 04 52 +4C 41 4D 00 84 12 F6 D7 50 02 5E D8 04 52 52 55 +4D 00 84 12 F6 D7 50 03 C0 D7 05 50 55 53 48 4D +84 12 F6 D7 00 15 7A D8 04 50 4F 50 4D 00 84 12 +F6 D7 00 17 6C D8 03 53 3E 3D 85 12 00 38 96 D8 +02 53 3C 00 85 12 00 34 88 D8 03 30 3E 3D 85 12 +00 30 AA D8 02 30 3C 00 85 12 00 30 00 00 02 55 +3C 00 85 12 00 2C BE D8 03 55 3E 3D 85 12 00 28 +B4 D8 03 30 3C 3E 85 12 00 24 D2 D8 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 8A 4E -00 00 A2 53 C6 21 0E 4A 30 4D F8 DA 04 54 48 45 +00 00 A2 53 C6 21 0E 4A 30 4D C8 D8 04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 0A 89 -0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D E8 D8 +0A 11 3A 90 00 02 63 2F 88 DA 00 00 30 4D BC D6 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C 00 00 -A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 2C DB 05 55 +A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F FC D8 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 2A 83 -0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 08 DA -89 48 00 00 A2 53 C6 21 30 4D 6C D9 05 41 47 41 -49 4E 87 12 C0 DA 74 DB 2A C4 00 00 05 57 48 49 -4C 45 87 12 1A DB 78 C4 2A C4 D0 DA 06 52 45 50 -45 41 54 00 87 12 C0 DA 74 DB 32 DB 2A C4 D0 DB -3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 00 00 -CA 23 98 42 C6 21 00 00 30 4D FC D9 03 42 57 31 -84 12 CE DB E0 21 EC DB 03 42 57 32 84 12 CE DB -E2 21 F8 DB 03 42 57 33 84 12 CE DB E4 21 10 DC -3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 00 00 -8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F -30 4D 00 00 03 46 57 31 84 12 0E DC E6 21 34 DC -03 46 57 32 84 12 0E DC E8 21 40 DC 03 46 57 33 -84 12 0E DC EA 21 3E 90 00 30 07 24 3E E0 00 04 -3E B0 00 10 02 24 3E E0 00 08 30 4D 4C DC 04 47 -4F 54 4F 00 87 12 C0 DA B0 CD BE CB 2A C4 00 00 -05 3F 47 4F 54 4F 87 12 56 DC B0 CD BE CB 2A C4 -00 00 03 4A 4D 50 87 12 B0 CD A2 DB 2A C4 80 DC -04 3F 4A 4D 50 00 87 12 56 DC B0 CD 78 C4 74 DB -2A C4 +0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 FF 03 08 DA +89 48 00 00 A2 53 C6 21 30 4D 40 D7 05 41 47 41 +49 4E 0A 4E 38 40 00 3C E7 3F 00 00 05 57 48 49 +4C 45 87 12 EA D8 76 C4 2A C4 A0 D8 06 52 45 50 +45 41 54 00 87 12 72 D9 02 D9 2A C4 9E D9 3D 41 +08 4E 3E 4F 2A 48 B2 92 C4 21 CD 2F 98 42 C6 21 +00 00 30 4D D0 D7 03 42 57 31 84 12 9C D9 00 00 +B6 D9 03 42 57 32 84 12 9C D9 00 00 C2 D9 03 42 +57 33 84 12 9C D9 00 00 DA D9 3D 41 1A 42 C6 21 +28 4E B2 92 C4 21 90 2B BA 4F 00 00 A2 53 C6 21 +8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 +D8 D9 00 00 FA D9 03 46 57 32 84 12 D8 D9 00 00 +06 DA 03 46 57 33 84 12 D8 D9 00 00 00 00 05 3F +47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 3E B0 +00 10 02 24 3E E0 00 08 87 12 C0 CC DA CA 2A C4 +12 DA 04 47 4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 +00 3C F2 3F @FFFE -D6 D5 +9E D2 q diff --git a/binaries/CHIPSTICK_FR2433_4MHz.txt b/binaries/CHIPSTICK_FR2433_4MHz.txt deleted file mode 100644 index 3ff23fe..0000000 --- a/binaries/CHIPSTICK_FR2433_4MHz.txt +++ /dev/null @@ -1,403 +0,0 @@ -@1800 -10 00 02 00 21 BB A0 0F 05 00 18 00 B4 DC 8A D2 -2C 01 7B 30 FC C7 0E C8 -@C400 -2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 -8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 E2 C2 22 02 30 41 B2 40 -13 00 0E 05 E2 D2 22 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 C8 CB 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 C8 CB 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 -60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 -18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 -F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E -CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 -0C 4E 65 4C 74 40 80 00 3B 40 CA 21 3E 4B 0E 93 -1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E -FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 -0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 -09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D A2 C5 07 3E -4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 -DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 -07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 -D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 -E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 CB 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 CB 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C5 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 CB 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A CC B0 C5 -B6 C9 44 CC 3D 40 4C CC E2 22 5D 3E 4E CC 0A 4E -3E 4F 3D 40 64 CC 39 27 3D 40 3E CC 1A E2 BE 21 -B3 27 AD 23 66 CC 3E 4F 3D 40 3E CC BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CF -CD 3F B6 CB 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 3A CC -A2 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 31 40 -E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A C4 -42 C9 92 C8 DC C8 3A CC DE C4 70 C5 52 C9 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CD 34 C4 -30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CD 24 C7 D0 CC C0 C7 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C CD 86 41 42 4F 52 54 -22 00 87 12 6C C9 34 C4 2E CD C8 CB 2A C4 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D4 B0 12 -FC C7 92 C3 1C 05 38 40 A8 2A 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 87 12 -6A D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B 5B 37 -6D 00 14 C9 54 C4 28 C7 8A CD 42 C9 52 C9 05 6C -69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 04 1B -5B 30 6D 00 14 C9 12 CD 00 00 83 5B 27 5D 87 12 -B0 CD 34 C4 34 C4 C8 CB C8 CB 2A C4 08 CA 01 27 -87 12 B0 C5 B6 C9 0E CA 28 C7 BE CD 2A C4 6E CC -CE C5 81 5C 92 42 C0 21 C4 21 30 4D 9A CD 81 5B -82 43 BE 21 30 4D C2 CD 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 87 12 -C8 C5 F2 C4 28 C7 02 CE 9E CD 34 C4 E0 CD C8 CB -2A C4 B0 CD E0 CD 2A C4 EA CD 09 49 4D 4D 45 44 -49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 CC 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA 54 C4 -28 C7 BE CD 70 C5 28 C7 66 CE 34 C4 34 C4 C8 CB -C8 CB 34 C4 C8 CB C8 CB 2A C4 CE CD 81 3B 82 93 -BE 21 A8 27 87 12 34 C4 2A C4 C8 CB 04 CF D0 CD -2A C4 6C CE 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CE BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 CE 01 3A 30 12 A4 CE -87 12 92 C9 B0 C5 B6 C9 CA CE 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CE 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C9 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CD B0 C9 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CE BA 40 86 12 FC FF E4 3F 16 CC 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CE BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CF 06 43 52 45 41 54 -45 00 B0 12 C0 CE BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CC 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CF 05 44 -45 46 45 52 30 12 12 CF 8B 3F 6E CA 05 3E 42 4F -44 59 2E 52 30 4D 6A CF 04 43 4F 44 45 00 B0 12 -C0 CE 2A 82 82 4A C6 21 87 12 B2 CE 94 D2 66 D2 -2A C4 B8 CF 07 43 4F 44 45 4E 4E 4D 87 12 8C CE -D0 CD C2 CF 2A C4 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D2 04 CF 2A C4 1A CD 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A D2 DA 21 D9 3F E8 CF 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE D2 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A C4 02 00 A2 52 C6 21 ED 3F 0A CE 85 48 49 32 -4C 4F 87 12 F2 C6 8C D0 C8 CB D0 CD 94 D2 66 D2 -2A C4 5C D0 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 30 4D -9E CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C9 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 CF 85 42 45 47 49 4E 30 40 F2 C6 B2 D0 -85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CF -85 41 47 41 49 4E 39 40 24 C7 EF 3F 34 CF 85 57 -48 49 4C 45 87 12 78 D0 78 C4 2A C4 22 CE 86 52 -45 50 45 41 54 00 87 12 F6 D0 B8 D0 2A C4 92 D0 -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA CB 84 4C 4F 4F 50 00 39 40 -5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B 4C 4F -4F 50 39 40 4C C7 E5 3F 48 D1 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A D1 04 4D 4F 56 45 00 0A 4E -38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C -F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE D0 -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CF -34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 C8 CB -5E C7 0A D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 C8 CB -FA C4 8A CF 34 C4 CA 21 FA C4 2A C4 AE CD 05 46 -4F 52 54 48 84 12 24 D2 8E D2 C4 D5 CC D2 2E D2 -74 D0 7C D1 F8 D3 BE D2 8E D4 A8 D4 D0 D0 34 D5 -00 00 CC D3 D8 CD AC CF 00 00 F0 D0 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D2 9E DB 06 DC 52 DB -70 DC 18 DB 94 DC 44 D8 00 00 0E DB BE DB 70 DB -AE DB 54 D9 00 00 00 00 A2 DC 58 D2 5C D2 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C CE 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 D1 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 D0 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CE 86 5B 54 48 45 4E 5D 00 30 4D 14 D3 -86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 36 C5 -B0 C5 B6 C9 1C CC 44 C4 28 C7 8E D3 8A C4 8A C4 -52 C9 06 5B 54 48 45 4E 5D 00 EA D2 32 C7 5C D3 -36 C9 40 C5 54 C4 32 C7 30 D3 2A C4 8A C4 8A C4 -52 C9 06 5B 45 4C 53 45 5D 00 EA D2 32 C7 7C D3 -36 C9 40 C5 54 C4 32 C7 2E D3 2A C4 52 C9 04 5B -49 46 5D 00 EA D2 32 C7 30 D3 24 C7 2E D3 36 C9 -52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 2A CC 24 C7 -30 D3 20 D3 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C5 B6 C9 0E CA 6C C4 2A C4 B4 D3 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 0E CA -6C C4 64 C5 2A C4 E8 D3 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 D1 06 4D 41 52 4B 45 52 00 -B0 12 C0 CE BA 40 84 12 FC FF BA 40 E6 D3 FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A CF 34 D2 C4 D2 D8 D2 2C D4 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D2 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D4 8A D2 -B4 DC 0E D1 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D4 92 42 0C 18 70 D4 EF 3F 60 D4 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E D4 92 42 -C6 21 70 D4 30 4D 74 D4 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 D1 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C8 24 C8 B2 40 3E D5 3C D5 -B2 40 8A D2 0E 18 B2 40 B4 DC 0C 18 30 12 7E D4 -B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 A0 C7 -9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 BC C4 -35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 D4 04 57 41 52 4D 00 30 40 3E D5 3D 40 -74 D5 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 -10 00 00 02 02 20 3E E3 1E 53 F2 D0 30 00 0A 02 -3E 90 0A 00 B1 27 3E 90 16 00 AE 2F 2E 93 7D 27 -86 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -8A CD E2 D2 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 43 02 02 -B2 D3 06 02 D2 43 24 02 F2 D3 26 02 F2 40 FD 00 -22 02 E2 D2 24 02 B2 40 00 A5 60 01 B2 40 D2 00 -80 01 B2 40 05 00 82 01 B2 40 79 00 84 01 39 40 -40 00 B2 D0 10 00 86 01 92 D2 5E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 -89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 D6 D5 -DA FF FB 23 B2 40 2C C8 E4 FF B2 40 81 00 00 05 -92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 -92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 3A D5 -48 3F 38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 -09 9A 03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A -C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 0E CA 32 C7 -AA D6 CA CA 28 C7 BE CD CC D6 AC D6 29 4E 39 90 -86 12 02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E -02 00 04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 -3E 40 28 00 B0 12 94 D6 19 42 C6 21 A2 53 C6 21 -89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 -C4 21 B0 12 2A C4 B6 C9 CA CA 28 C7 0A D7 00 D7 -21 53 3E 90 10 00 83 2D E1 2B 0C D7 B2 41 C4 21 -DD 3F 87 12 B0 C5 72 D6 1A D7 0C 43 1B 42 C6 21 -A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 -C4 21 B0 12 94 D6 0E 93 03 20 3C 40 00 03 21 3C -1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 -20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 -03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 -08 3C 3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 -10 02 92 53 C4 21 B0 12 94 D6 ED 3F 7A 90 40 00 -16 20 3C 40 20 00 92 53 C4 21 B0 12 E8 D6 0C 20 -3C 50 10 00 3E 40 2B 00 B0 12 E8 D6 92 92 C0 21 -C4 21 02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 -E8 D6 FA 23 3C 50 10 00 B0 12 D0 D6 EF 3F 0C 43 -1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 72 D6 F0 D7 -FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 -C8 3F B0 12 E8 D6 E1 23 3C 50 80 00 B0 12 D0 D6 -DC 3F 1C C8 04 52 45 54 49 00 87 12 34 C4 00 13 -C8 CB 2A C4 34 C4 2C 00 12 D7 E8 D7 2E D8 2E 4E -0E DC 09 4B A4 3F 3E D0 03 4D 4F 56 84 12 24 D8 -00 40 38 D8 05 4D 4F 56 2E 42 84 12 24 D8 40 40 -00 00 03 41 44 44 84 12 24 D8 00 50 52 D8 05 41 -44 44 2E 42 84 12 24 D8 40 50 5E D8 04 41 44 44 -43 00 84 12 24 D8 00 60 6C D8 06 41 44 44 43 2E -42 00 84 12 24 D8 40 60 14 D8 04 53 55 42 43 00 -84 12 24 D8 00 70 8A D8 06 53 55 42 43 2E 42 00 -84 12 24 D8 40 70 98 D8 03 53 55 42 84 12 24 D8 -00 80 A8 D8 05 53 55 42 2E 42 84 12 24 D8 40 80 -20 D0 03 43 4D 50 84 12 24 D8 00 90 C2 D8 05 43 -4D 50 2E 42 84 12 24 D8 40 90 0E D0 04 44 41 44 -44 00 84 12 24 D8 00 A0 DC D8 06 44 41 44 44 2E -42 00 84 12 24 D8 40 A0 CE D8 03 42 49 54 84 12 -24 D8 00 B0 FA D8 05 42 49 54 2E 42 84 12 24 D8 -40 B0 06 D9 03 42 49 43 84 12 24 D8 00 C0 14 D9 -05 42 49 43 2E 42 84 12 24 D8 40 C0 20 D9 03 42 -49 53 84 12 24 D8 00 D0 2E D9 05 42 49 53 2E 42 -84 12 24 D8 40 D0 00 00 03 58 4F 52 84 12 24 D8 -00 E0 48 D9 05 58 4F 52 2E 42 84 12 24 D8 40 E0 -7A D8 03 41 4E 44 84 12 24 D8 00 F0 62 D9 05 41 -4E 44 2E 42 84 12 24 D8 40 F0 B0 C5 12 D7 80 D9 -0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F -B4 D8 03 52 52 43 84 12 7A D9 00 10 92 D9 05 52 -52 43 2E 42 84 12 7A D9 40 10 9E D9 04 53 57 50 -42 00 84 12 7A D9 80 10 AC D9 03 52 52 41 84 12 -7A D9 00 11 BA D9 05 52 52 41 2E 42 84 12 7A D9 -40 11 C6 D9 03 53 58 54 84 12 7A D9 80 11 00 00 -04 50 55 53 48 00 84 12 7A D9 00 12 E0 D9 06 50 -55 53 48 2E 42 00 84 12 7A D9 40 12 3A D9 04 43 -41 4C 4C 00 84 12 7A D9 80 12 1A 53 0E 4A 87 12 -E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 62 6F 75 6E -64 73 3A CD B0 C5 72 D6 2A DA 92 53 C4 21 3E 40 -2C 00 B0 12 2A C4 B6 C9 CA CA 28 C7 BE CD DE D7 -42 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 -08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F -5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F D4 D9 -04 52 52 43 4D 00 84 12 24 DA 50 00 70 DA 04 52 -52 41 4D 00 84 12 24 DA 50 01 7E DA 04 52 4C 41 -4D 00 84 12 24 DA 50 02 8C DA 04 52 52 55 4D 00 -84 12 24 DA 50 03 EE D9 05 50 55 53 48 4D 84 12 -24 DA 00 15 A8 DA 04 50 4F 50 4D 00 84 12 24 DA -00 17 85 12 00 3C 9A DA 03 53 3E 3D 85 12 00 38 -C8 DA 02 53 3C 00 85 12 00 34 B6 DA 03 30 3E 3D -85 12 00 30 DC DA 02 30 3C 00 85 12 00 30 00 00 -02 55 3C 00 85 12 00 2C F0 DA 03 55 3E 3D 85 12 -00 28 E6 DA 03 30 3C 3E 85 12 00 24 04 DB 02 30 -3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 -8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D FA DA 04 54 -48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 -0A 89 0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D -EA D8 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C -00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 2E DB -05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 -2A 83 0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 -08 DA 89 48 00 00 A2 53 C6 21 30 4D 6E D9 05 41 -47 41 49 4E 87 12 C2 DA 76 DB 2A C4 00 00 05 57 -48 49 4C 45 87 12 1C DB 78 C4 2A C4 D2 DA 06 52 -45 50 45 41 54 00 87 12 C2 DA 76 DB 34 DB 2A C4 -D2 DB 3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 -00 00 CA 23 98 42 C6 21 00 00 30 4D FE D9 03 42 -57 31 84 12 D0 DB E0 21 EE DB 03 42 57 32 84 12 -D0 DB E2 21 FA DB 03 42 57 33 84 12 D0 DB E4 21 -12 DC 3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 -00 00 8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 -3E 4F 30 4D 00 00 03 46 57 31 84 12 10 DC E6 21 -36 DC 03 46 57 32 84 12 10 DC E8 21 42 DC 03 46 -57 33 84 12 10 DC EA 21 3E 90 00 30 07 24 3E E0 -00 04 3E B0 00 10 02 24 3E E0 00 08 30 4D 4E DC -04 47 4F 54 4F 00 87 12 C2 DA B0 CD BE CB 2A C4 -00 00 05 3F 47 4F 54 4F 87 12 58 DC B0 CD BE CB -2A C4 00 00 03 4A 4D 50 87 12 B0 CD A4 DB 2A C4 -82 DC 04 3F 4A 4D 50 00 87 12 58 DC B0 CD 78 C4 -76 DB 2A C4 -@FFFE -D6 D5 -q diff --git a/binaries/CHIPSTICK_FR2433_8MHz.txt b/binaries/CHIPSTICK_FR2433_8MHz.txt index 4207d21..1c2bd24 100644 --- a/binaries/CHIPSTICK_FR2433_8MHz.txt +++ b/binaries/CHIPSTICK_FR2433_8MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 04 00 51 55 40 1F 05 00 18 00 B4 DC 8A D2 -2C 01 7B 30 FC C7 0E C8 +10 00 04 00 51 55 40 1F 05 00 18 00 56 DA D0 D0 +2D 01 6B 30 B6 C6 C8 C6 @C400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 E2 C2 22 02 30 41 B2 40 -13 00 0E 05 E2 D2 22 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 C8 CB 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 C8 CB 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C4 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C4 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C4 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C4 02 3E 52 00 0E 12 3E 4F 30 4D 70 C4 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C4 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C4 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C4 +01 21 BE 4F 00 00 3E 4F 30 4D CC C4 02 30 3D 00 +1E 83 0E 7E 30 4D FC C4 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C5 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C4 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 C5 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 C5 02 23 53 00 87 12 88 C5 C0 C5 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C5 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C4 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C5 34 C4 86 C4 D4 C4 BA C5 +92 C4 F8 C5 D4 C5 D6 C7 42 CB 82 C7 2A C4 22 C5 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C5 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C6 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 C6 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 C6 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 E2 C2 22 02 30 41 B2 40 13 00 0E 05 E2 D2 +22 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C6 +B0 12 B6 C6 12 D2 0A 18 F9 3F F0 C4 06 41 43 43 +45 50 54 00 3C 40 64 C7 3B 40 2E C7 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C7 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A C7 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C4 04 45 4D 49 +54 00 30 40 86 C7 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C C7 04 45 43 48 4F 00 B2 40 82 48 +52 C7 82 43 DE 21 30 4D 32 C6 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C7 92 43 DE 21 30 4D 20 C6 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C7 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C7 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C5 +02 43 52 00 30 40 08 C8 87 12 1E C8 02 0D 0A 00 +D6 C7 2A C4 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C5 82 53 22 00 82 43 B4 21 87 12 14 C8 +1E C8 B0 CA 14 C8 22 00 80 C8 4C C8 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA C7 82 2E 22 00 87 12 38 C8 14 C8 D6 C7 +B0 CA 2A C4 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,300 +86,280 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D A2 C5 07 3E +00 00 35 40 0E C4 34 40 00 C4 30 4D 82 C4 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 CB 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 CB 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C5 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 CB 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A CC B0 C5 -B6 C9 44 CC 3D 40 4C CC E2 22 5D 3E 4E CC 0A 4E -3E 4F 3D 40 64 CC 39 27 3D 40 3E CC 1A E2 BE 21 -B3 27 AD 23 66 CC 3E 4F 3D 40 3E CC BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CF -CD 3F B6 CB 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 3A CC -A2 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 C9 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C9 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C6 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 C4 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC C6 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 C7 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE CA 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 C8 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C8 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 CB 42 CB 80 C8 50 CB +3D 40 58 CB CC 22 82 3E 5A CB 0A 4E 3E 4F 3D 40 +70 CB 23 27 3D 40 4A CB 1A E2 BE 21 A1 27 B5 23 +72 CB 3E 4F 3D 40 4A CB B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CE CB 3F D2 CA +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C4 46 CB AE CB B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 C5 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A C4 -42 C9 92 C8 DC C8 3A CC DE C4 70 C5 52 C9 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CD 34 C4 -30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CD 24 C7 D0 CC C0 C7 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C CD 86 41 42 4F 52 54 -22 00 87 12 6C C9 34 C4 2E CD C8 CB 2A C4 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D4 B0 12 -FC C7 92 C3 1C 05 38 40 50 55 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 87 12 -6A D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B 5B 37 -6D 00 14 C9 54 C4 28 C7 8A CD 42 C9 52 C9 05 6C -69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 04 1B -5B 30 6D 00 14 C9 12 CD 00 00 83 5B 27 5D 87 12 -B0 CD 34 C4 34 C4 C8 CB C8 CB 2A C4 08 CA 01 27 -87 12 B0 C5 B6 C9 0E CA 28 C7 BE CD 2A C4 6E CC -CE C5 81 5C 92 42 C0 21 C4 21 30 4D 9A CD 81 5B -82 43 BE 21 30 4D C2 CD 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 87 12 -C8 C5 F2 C4 28 C7 02 CE 9E CD 34 C4 E0 CD C8 CB -2A C4 B0 CD E0 CD 2A C4 EA CD 09 49 4D 4D 45 44 +04 C8 8C C7 42 CB 82 C7 46 CB A4 C4 0C C5 1E C8 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CC +14 C8 30 FF A0 CA 26 C5 1E C8 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CC 3C C6 E0 CB C2 CA 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E CC 86 41 42 4F +52 54 22 00 87 12 38 C8 14 C8 40 CC B0 CA 2A C4 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 D1 +B0 12 B6 C6 92 C3 1C 05 38 40 50 55 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 1C 05 F3 23 87 12 +42 D1 14 C8 DE 21 EA C4 AC C7 1E C8 04 1B 5B 37 +6D 00 D6 C7 58 C4 40 C6 9A CC 04 C8 1E C8 05 6C +69 6E 65 3A D6 C7 D0 C4 24 C6 D6 C7 1E C8 04 1B +5B 30 6D 00 D6 C7 24 CC 00 00 83 5B 27 5D 87 12 +C0 CC 14 C8 14 C8 B0 CA B0 CA 2A C4 E8 C8 01 27 +87 12 42 CB 80 C8 EE C8 40 C6 CE CC 2A C4 7A CB +32 C5 81 5C 92 42 C0 21 C4 21 30 4D AA CC 81 5B +82 43 BE 21 30 4D D2 CC 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A CA 82 49 53 00 87 12 +BE CB EA C4 40 C6 12 CD AE CC 14 C8 F0 CC B0 CA +2A C4 C0 CC F0 CC 2A C4 FA CC 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 CC 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA 54 C4 -28 C7 BE CD 70 C5 28 C7 66 CE 34 C4 34 C4 C8 CB -C8 CB 34 C4 C8 CB C8 CB 2A C4 CE CD 81 3B 82 93 -BE 21 A8 27 87 12 34 C4 2A C4 C8 CB 04 CF D0 CD -2A C4 6C CE 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CE BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 CE 01 3A 30 12 A4 CE -87 12 92 C9 B0 C5 B6 C9 CA CE 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CE 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C9 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CD B0 C9 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CE BA 40 86 12 FC FF E4 3F 16 CC 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CE BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CF 06 43 52 45 41 54 -45 00 B0 12 C0 CE BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CC 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CF 05 44 -45 46 45 52 30 12 12 CF 8B 3F 6E CA 05 3E 42 4F -44 59 2E 52 30 4D 6A CF 04 43 4F 44 45 00 B0 12 -C0 CE 2A 82 82 4A C6 21 87 12 B2 CE 94 D2 66 D2 -2A C4 B8 CF 07 43 4F 44 45 4E 4E 4D 87 12 8C CE -D0 CD C2 CF 2A C4 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D2 04 CF 2A C4 1A CD 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A D2 DA 21 D9 3F E8 CF 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE D2 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A C4 02 00 A2 52 C6 21 ED 3F 0A CE 85 48 49 32 -4C 4F 87 12 F2 C6 8C D0 C8 CB D0 CD 94 D2 66 D2 -2A C4 5C D0 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 30 4D -9E CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C9 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 CF 85 42 45 47 49 4E 30 40 F2 C6 B2 D0 -85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CF -85 41 47 41 49 4E 39 40 24 C7 EF 3F 34 CF 85 57 -48 49 4C 45 87 12 78 D0 78 C4 2A C4 22 CE 86 52 -45 50 45 41 54 00 87 12 F6 D0 B8 D0 2A C4 92 D0 -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA CB 84 4C 4F 4F 50 00 39 40 -5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B 4C 4F -4F 50 39 40 4C C7 E5 3F 48 D1 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A D1 04 4D 4F 56 45 00 0A 4E +C4 CB 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 CB +80 C8 EE C8 58 C4 40 C6 CE CC 0C C5 40 C6 5C CD +14 C8 14 C8 B0 CA B0 CA 14 C8 B0 CA B0 CA 2A C4 +DE CC 81 3B 82 93 BE 21 B5 27 87 12 14 C8 2A C4 +B0 CA FA CD E0 CC 2A C4 62 CD 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CD 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A CD 01 3A 30 12 A0 CD 92 B3 C6 21 A2 63 C6 21 +87 12 42 CB 80 C8 C8 CD 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C8 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CC 90 CB 05 44 45 46 45 52 +B0 12 B8 CD BA 40 30 40 FC FF BA 40 AE CD FE FF +E3 3F 1E CB 06 43 52 45 41 54 45 00 B0 12 B8 CD +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CE 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C9 05 3E 42 4F 44 59 2E 52 +30 4D 44 CE 04 43 4F 44 45 00 B0 12 B8 CD A2 82 +C6 21 87 12 D2 D0 AC D0 2A C4 84 CE 07 43 4F 44 +45 4E 4E 4D B0 12 86 CD F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 D0 FA CD 2A C4 2C CC 03 41 +53 4D B2 40 B0 D0 DA 21 E0 3F AC CE 06 45 4E 44 +41 53 4D 00 87 12 B4 CE F4 D0 2A C4 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 D0 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A C4 +02 00 A2 52 C6 21 ED 3F 1A CD 85 48 49 32 4C 4F +87 12 A0 CA 4A CF B0 CA E0 CC D2 D0 AC D0 2A C4 +1A CF 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 C6 00 00 2E 53 30 4D 5E CE +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C C6 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C7 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C CE 85 42 45 47 49 4E 30 40 A0 CA 70 CF 85 55 +4E 54 49 4C 39 40 40 C6 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CE 85 41 +47 41 49 4E 39 40 3C C6 EF 3F 7A C8 85 57 48 49 +4C 45 87 12 36 CF 76 C4 2A C4 34 C8 86 52 45 50 +45 41 54 00 87 12 B4 CF 76 CF 2A C4 50 CF 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 C6 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 CA 84 4C 4F 4F 50 00 39 40 76 C6 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C6 85 2B 4C 4F 4F 50 +39 40 64 C6 E5 3F 06 D0 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE D0 -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CF -34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 C8 CB -5E C7 0A D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 C8 CB -FA C4 8A CF 34 C4 CA 21 FA C4 2A C4 AE CD 05 46 -4F 52 54 48 84 12 24 D2 8E D2 C4 D5 CC D2 2E D2 -74 D0 7C D1 F8 D3 BE D2 8E D4 A8 D4 D0 D0 34 D5 -00 00 CC D3 D8 CD AC CF 00 00 F0 D0 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D2 9E DB 06 DC 52 DB -70 DC 18 DB 94 DC 44 D8 00 00 0E DB BE DB 70 DB -AE DB 54 D9 00 00 00 00 A2 DC 58 D2 5C D2 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C CE 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 D1 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 D0 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CE 86 5B 54 48 45 4E 5D 00 30 4D 14 D3 -86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 36 C5 -B0 C5 B6 C9 1C CC 44 C4 28 C7 8E D3 8A C4 8A C4 -52 C9 06 5B 54 48 45 4E 5D 00 EA D2 32 C7 5C D3 -36 C9 40 C5 54 C4 32 C7 30 D3 2A C4 8A C4 8A C4 -52 C9 06 5B 45 4C 53 45 5D 00 EA D2 32 C7 7C D3 -36 C9 40 C5 54 C4 32 C7 2E D3 2A C4 52 C9 04 5B -49 46 5D 00 EA D2 32 C7 30 D3 24 C7 2E D3 36 C9 -52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 2A CC 24 C7 -30 D3 20 D3 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C5 B6 C9 0E CA 6C C4 2A C4 B4 D3 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 0E CA -6C C4 64 C5 2A C4 E8 D3 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 D1 06 4D 41 52 4B 45 52 00 -B0 12 C0 CE BA 40 84 12 FC FF BA 40 E6 D3 FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A CF 34 D2 C4 D2 D8 D2 2C D4 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D2 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D4 8A D2 -B4 DC 0E D1 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D4 92 42 0C 18 70 D4 EF 3F 60 D4 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E D4 92 42 -C6 21 70 D4 30 4D 74 D4 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 D1 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C8 24 C8 B2 40 3E D5 3C D5 -B2 40 8A D2 0E 18 B2 40 B4 DC 0C 18 30 12 7E D4 -B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 A0 C7 -9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 BC C4 -35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 D4 04 57 41 52 4D 00 30 40 3E D5 3D 40 -74 D5 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 -10 00 00 02 02 20 3E E3 1E 53 F2 D0 30 00 0A 02 -3E 90 0A 00 B1 27 3E 90 16 00 AE 2F 2E 93 7D 27 -86 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -8A CD E2 D2 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 43 02 02 -B2 D3 06 02 D2 43 24 02 F2 D3 26 02 F2 40 FD 00 -22 02 E2 D2 24 02 B2 40 00 A5 60 01 B2 40 F3 00 -80 01 B2 40 07 00 82 01 B2 40 FC 00 84 01 39 40 -80 00 B2 D0 10 00 86 01 92 D2 5E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 -89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 D6 D5 -DA FF FB 23 B2 40 2C C8 E4 FF B2 40 81 00 00 05 -92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 -92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 3A D5 -48 3F 38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 -09 9A 03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A -C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 0E CA 32 C7 -AA D6 CA CA 28 C7 BE CD CC D6 AC D6 29 4E 39 90 -86 12 02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E -02 00 04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 -3E 40 28 00 B0 12 94 D6 19 42 C6 21 A2 53 C6 21 +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C8 +CA 21 F2 C4 2A C4 84 12 7E D0 AE CF 3C D3 DE CF +BE CC 32 CF 3A D0 50 D4 64 C8 66 D1 80 D1 8E CF +00 D2 00 00 22 D4 E8 CC 78 CE 00 00 84 12 7E D0 +6E D9 D0 D9 22 D9 44 DA E8 D8 00 00 18 D6 00 00 +DE D8 8E D9 40 D9 7E D9 28 D7 00 00 00 00 20 DA +AA D0 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 D0 EE D0 +F4 D0 04 D1 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CD 09 50 57 52 5F 53 54 41 +54 45 84 12 FC D0 D0 D0 56 DA CC CF 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 D1 92 42 0C 18 +48 D1 EF 3F 38 D1 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 D1 92 42 C6 21 48 D1 30 4D 4C D1 +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC CF 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C6 +DE C6 B2 40 0A D2 08 D2 B2 40 D0 D0 0E 18 B2 40 +56 DA 0C 18 30 12 56 D1 B2 40 86 C7 84 C7 B2 40 +08 C8 06 C8 B2 40 98 C6 96 C6 B2 40 18 00 0A 18 +37 40 1A C4 36 40 92 C4 35 40 0E C4 34 40 00 C4 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A D1 +04 57 41 52 4D 00 30 40 0A D2 3D 40 40 D2 92 C3 +30 01 1E 42 08 18 0E 93 12 24 F2 B0 10 00 00 02 +02 20 3E E3 1E 53 F2 D0 30 00 0A 02 3E 90 0A 00 +B7 27 3E 90 16 00 B4 2F 2E 93 83 27 8C 2F 30 4D +1E C8 06 0D 1B 5B 37 6D 23 00 D6 C7 34 C6 1E C8 +19 46 61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D +2E 54 68 6F 6F 72 65 6E 73 20 D6 C7 14 C8 30 FF +A0 CA B8 C4 24 C6 1E C8 0A 62 79 74 65 73 20 66 +72 65 65 00 3C C6 9A CC 82 CF 04 43 4F 4C 44 00 +92 B3 0A 05 FD 23 B2 40 04 A5 20 01 40 D2 B2 40 +88 5A CC 01 B2 43 02 02 B2 D3 06 02 D2 43 24 02 +F2 D3 26 02 F2 40 FD 00 22 02 E2 D2 24 02 B2 40 +00 A5 60 01 B2 40 F3 00 80 01 B2 40 07 00 82 01 +B2 40 FC 00 84 01 39 40 80 00 B2 D0 10 00 86 01 +92 D2 5E 01 08 18 38 40 59 14 18 83 FE 23 19 83 +FA 23 39 40 00 10 29 83 89 43 00 20 FC 23 39 40 +26 00 29 83 B9 40 9E D2 DA FF FB 23 B2 40 26 C7 +E4 FF B2 40 81 00 00 05 92 42 02 18 06 05 92 42 +04 18 08 05 92 C3 00 05 92 D3 1A 05 3F 40 80 20 +31 40 E0 20 30 12 06 D2 50 3F 8A D2 07 43 4F 4D +50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B 0E 5C +0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 FF FF +F5 27 02 2C 3E 43 30 4D 1E 43 30 4D B2 CD 86 5B +54 48 45 4E 5D 00 30 4D 6E D3 86 5B 45 4C 53 45 +5D 00 87 12 14 C8 00 00 C6 C4 42 CB 80 C8 24 CB +34 C4 40 C6 E4 D3 44 C4 1E C8 06 5B 54 48 45 4E +5D 00 44 D3 4A C6 B4 D3 F8 C7 D0 C4 58 C4 4A C6 +8A D3 2A C4 44 C4 1E C8 06 5B 45 4C 53 45 5D 00 +44 D3 4A C6 D2 D3 F8 C7 D0 C4 58 C4 4A C6 88 D3 +2A C4 1E C8 04 5B 49 46 5D 00 44 D3 4A C6 8A D3 +3C C6 88 D3 F8 C7 1E C8 05 0D 0A 6B 6F 20 D6 C7 +8C C7 32 CB 3C C6 8A D3 7A D3 84 5B 49 46 5D 00 +0E 93 3E 4F BE 27 30 4D FA D3 89 5B 44 45 46 49 +4E 45 44 5D 87 12 42 CB 80 C8 EE C8 6A C4 2A C4 +0A D4 8B 5B 55 4E 44 45 46 49 4E 45 44 5D 87 12 +42 CB 80 C8 EE C8 6A C4 00 C5 2A C4 3E D4 3D 41 +B2 4E 0E 18 A2 4E 0C 18 3E 4F 30 40 56 D1 48 D0 +06 4D 41 52 4B 45 52 00 B0 12 B8 CD BA 40 84 12 +FC FF BA 40 3C D4 FE FF 9A 42 C8 21 00 00 28 83 +8A 48 02 00 A2 52 C6 21 30 40 00 CE 1C 15 B0 12 +2A C4 80 C8 EE C8 4A C6 92 D4 AA C9 40 C6 CE CC +AC D4 94 D4 39 4E 39 80 86 12 08 24 19 53 02 20 +2E 4E 04 3C 2E 53 19 53 01 24 2E 82 1B 17 30 41 +3E 40 28 00 B0 12 7C D4 19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 -C4 21 B0 12 2A C4 B6 C9 CA CA 28 C7 0A D7 00 D7 -21 53 3E 90 10 00 83 2D E1 2B 0C D7 B2 41 C4 21 -DD 3F 87 12 B0 C5 72 D6 1A D7 0C 43 1B 42 C6 21 -A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 -C4 21 B0 12 94 D6 0E 93 03 20 3C 40 00 03 21 3C -1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 -20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 -03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 -08 3C 3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 -10 02 92 53 C4 21 B0 12 94 D6 ED 3F 7A 90 40 00 -16 20 3C 40 20 00 92 53 C4 21 B0 12 E8 D6 0C 20 -3C 50 10 00 3E 40 2B 00 B0 12 E8 D6 92 92 C0 21 -C4 21 02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 -E8 D6 FA 23 3C 50 10 00 B0 12 D0 D6 EF 3F 0C 43 -1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 72 D6 F0 D7 -FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 -C8 3F B0 12 E8 D6 E1 23 3C 50 80 00 B0 12 D0 D6 -DC 3F 1C C8 04 52 45 54 49 00 87 12 34 C4 00 13 -C8 CB 2A C4 34 C4 2C 00 12 D7 E8 D7 2E D8 2E 4E -0E DC 09 4B A4 3F 3E D0 03 4D 4F 56 84 12 24 D8 -00 40 38 D8 05 4D 4F 56 2E 42 84 12 24 D8 40 40 -00 00 03 41 44 44 84 12 24 D8 00 50 52 D8 05 41 -44 44 2E 42 84 12 24 D8 40 50 5E D8 04 41 44 44 -43 00 84 12 24 D8 00 60 6C D8 06 41 44 44 43 2E -42 00 84 12 24 D8 40 60 14 D8 04 53 55 42 43 00 -84 12 24 D8 00 70 8A D8 06 53 55 42 43 2E 42 00 -84 12 24 D8 40 70 98 D8 03 53 55 42 84 12 24 D8 -00 80 A8 D8 05 53 55 42 2E 42 84 12 24 D8 40 80 -20 D0 03 43 4D 50 84 12 24 D8 00 90 C2 D8 05 43 -4D 50 2E 42 84 12 24 D8 40 90 0E D0 04 44 41 44 -44 00 84 12 24 D8 00 A0 DC D8 06 44 41 44 44 2E -42 00 84 12 24 D8 40 A0 CE D8 03 42 49 54 84 12 -24 D8 00 B0 FA D8 05 42 49 54 2E 42 84 12 24 D8 -40 B0 06 D9 03 42 49 43 84 12 24 D8 00 C0 14 D9 -05 42 49 43 2E 42 84 12 24 D8 40 C0 20 D9 03 42 -49 53 84 12 24 D8 00 D0 2E D9 05 42 49 53 2E 42 -84 12 24 D8 40 D0 00 00 03 58 4F 52 84 12 24 D8 -00 E0 48 D9 05 58 4F 52 2E 42 84 12 24 D8 40 E0 -7A D8 03 41 4E 44 84 12 24 D8 00 F0 62 D9 05 41 -4E 44 2E 42 84 12 24 D8 40 F0 B0 C5 12 D7 80 D9 -0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F -B4 D8 03 52 52 43 84 12 7A D9 00 10 92 D9 05 52 -52 43 2E 42 84 12 7A D9 40 10 9E D9 04 53 57 50 -42 00 84 12 7A D9 80 10 AC D9 03 52 52 41 84 12 -7A D9 00 11 BA D9 05 52 52 41 2E 42 84 12 7A D9 -40 11 C6 D9 03 53 58 54 84 12 7A D9 80 11 00 00 -04 50 55 53 48 00 84 12 7A D9 00 12 E0 D9 06 50 -55 53 48 2E 42 00 84 12 7A D9 40 12 3A D9 04 43 -41 4C 4C 00 84 12 7A D9 80 12 1A 53 0E 4A 87 12 -E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 62 6F 75 6E -64 73 3A CD B0 C5 72 D6 2A DA 92 53 C4 21 3E 40 -2C 00 B0 12 2A C4 B6 C9 CA CA 28 C7 BE CD DE D7 -42 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 -08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F -5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F D4 D9 -04 52 52 43 4D 00 84 12 24 DA 50 00 70 DA 04 52 -52 41 4D 00 84 12 24 DA 50 01 7E DA 04 52 4C 41 -4D 00 84 12 24 DA 50 02 8C DA 04 52 52 55 4D 00 -84 12 24 DA 50 03 EE D9 05 50 55 53 48 4D 84 12 -24 DA 00 15 A8 DA 04 50 4F 50 4D 00 84 12 24 DA -00 17 85 12 00 3C 9A DA 03 53 3E 3D 85 12 00 38 -C8 DA 02 53 3C 00 85 12 00 34 B6 DA 03 30 3E 3D -85 12 00 30 DC DA 02 30 3C 00 85 12 00 30 00 00 -02 55 3C 00 85 12 00 2C F0 DA 03 55 3E 3D 85 12 -00 28 E6 DA 03 30 3C 3E 85 12 00 24 04 DB 02 30 +C4 21 B0 12 2A C4 80 C8 AA C9 40 C6 EA D4 E0 D4 +21 53 3E 90 10 00 7D 2D E1 2B EC D4 B2 41 C4 21 +DD 3F 87 12 42 CB 74 C8 FA D4 0C 43 1B 42 C6 21 +A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 27 20 92 53 +C4 21 B0 12 7C D4 3C 40 00 03 0E 93 1C 24 3C 40 +10 03 1E 93 18 24 3C 40 20 03 2E 93 14 24 3C 40 +20 02 2E 92 10 24 3C 40 30 02 3E 92 0C 24 3C 40 +30 03 3E 93 08 24 3C 40 30 00 19 42 C6 21 A2 53 +C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 +07 20 3C 40 10 02 92 53 C4 21 B0 12 7C D4 ED 3F +7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 B0 12 +C8 D4 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 C8 D4 +92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 0C 5E +DA 3F B0 12 C8 D4 FA 23 3C 50 10 00 B0 12 B0 D4 +EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 42 CB +74 C8 C4 D5 FE 90 26 00 00 00 3E 40 20 00 03 20 +3C 50 82 00 C8 3F B0 12 C8 D4 E1 23 3C 50 80 00 +B0 12 B0 D4 DC 3F D6 C6 04 52 45 54 49 00 87 12 +14 C8 00 13 B0 CA 2A C4 14 C8 2C 00 F2 D4 BC D5 +02 D6 09 4B 2E 4E 0E DC A4 3F FC CE 03 4D 4F 56 +84 12 F8 D5 00 40 0C D6 05 4D 4F 56 2E 42 84 12 +F8 D5 40 40 00 00 03 41 44 44 84 12 F8 D5 00 50 +26 D6 05 41 44 44 2E 42 84 12 F8 D5 40 50 32 D6 +04 41 44 44 43 00 84 12 F8 D5 00 60 40 D6 06 41 +44 44 43 2E 42 00 84 12 F8 D5 40 60 E8 D5 04 53 +55 42 43 00 84 12 F8 D5 00 70 5E D6 06 53 55 42 +43 2E 42 00 84 12 F8 D5 40 70 6C D6 03 53 55 42 +84 12 F8 D5 00 80 7C D6 05 53 55 42 2E 42 84 12 +F8 D5 40 80 DE CE 03 43 4D 50 84 12 F8 D5 00 90 +96 D6 05 43 4D 50 2E 42 84 12 F8 D5 40 90 CC CE +04 44 41 44 44 00 84 12 F8 D5 00 A0 B0 D6 06 44 +41 44 44 2E 42 00 84 12 F8 D5 40 A0 A2 D6 03 42 +49 54 84 12 F8 D5 00 B0 CE D6 05 42 49 54 2E 42 +84 12 F8 D5 40 B0 DA D6 03 42 49 43 84 12 F8 D5 +00 C0 E8 D6 05 42 49 43 2E 42 84 12 F8 D5 40 C0 +F4 D6 03 42 49 53 84 12 F8 D5 00 D0 02 D7 05 42 +49 53 2E 42 84 12 F8 D5 40 D0 00 00 03 58 4F 52 +84 12 F8 D5 00 E0 1C D7 05 58 4F 52 2E 42 84 12 +F8 D5 40 E0 4E D6 03 41 4E 44 84 12 F8 D5 00 F0 +36 D7 05 41 4E 44 2E 42 84 12 F8 D5 40 F0 42 CB +F2 D4 54 D7 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 +0C DA 4F 3F 88 D6 03 52 52 43 84 12 4E D7 00 10 +66 D7 05 52 52 43 2E 42 84 12 4E D7 40 10 72 D7 +04 53 57 50 42 00 84 12 4E D7 80 10 80 D7 03 52 +52 41 84 12 4E D7 00 11 8E D7 05 52 52 41 2E 42 +84 12 4E D7 40 11 9A D7 03 53 58 54 84 12 4E D7 +80 11 00 00 04 50 55 53 48 00 84 12 4E D7 00 12 +B4 D7 06 50 55 53 48 2E 42 00 84 12 4E D7 40 12 +0E D7 04 43 41 4C 4C 00 84 12 4E D7 80 12 1A 53 +0E 4A 87 12 34 C6 1E C8 0D 6F 75 74 20 6F 66 20 +62 6F 75 6E 64 73 4C CC 42 CB 74 C8 FE D7 92 53 +C4 21 3E 40 2C 00 B0 12 2A C4 80 C8 AA C9 40 C6 +CE CC B2 D5 16 D8 0A 4E 3E 4F 1A 83 E0 33 29 4E +59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 +10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 +8F 3F A8 D7 04 52 52 43 4D 00 84 12 F8 D7 50 00 +44 D8 04 52 52 41 4D 00 84 12 F8 D7 50 01 52 D8 +04 52 4C 41 4D 00 84 12 F8 D7 50 02 60 D8 04 52 +52 55 4D 00 84 12 F8 D7 50 03 C2 D7 05 50 55 53 +48 4D 84 12 F8 D7 00 15 7C D8 04 50 4F 50 4D 00 +84 12 F8 D7 00 17 6E D8 03 53 3E 3D 85 12 00 38 +98 D8 02 53 3C 00 85 12 00 34 8A D8 03 30 3E 3D +85 12 00 30 AC D8 02 30 3C 00 85 12 00 30 00 00 +02 55 3C 00 85 12 00 2C C0 D8 03 55 3E 3D 85 12 +00 28 B6 D8 03 30 3C 3E 85 12 00 24 D4 D8 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 -8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D FA DA 04 54 +8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D CA D8 04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 -0A 89 0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D -EA D8 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C -00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 2E DB +0A 89 0A 11 3A 90 00 02 63 2F 88 DA 00 00 30 4D +BE D6 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C +00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F FE D8 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 -2A 83 0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 -08 DA 89 48 00 00 A2 53 C6 21 30 4D 6E D9 05 41 -47 41 49 4E 87 12 C2 DA 76 DB 2A C4 00 00 05 57 -48 49 4C 45 87 12 1C DB 78 C4 2A C4 D2 DA 06 52 -45 50 45 41 54 00 87 12 C2 DA 76 DB 34 DB 2A C4 -D2 DB 3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 -00 00 CA 23 98 42 C6 21 00 00 30 4D FE D9 03 42 -57 31 84 12 D0 DB E0 21 EE DB 03 42 57 32 84 12 -D0 DB E2 21 FA DB 03 42 57 33 84 12 D0 DB E4 21 -12 DC 3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 -00 00 8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 -3E 4F 30 4D 00 00 03 46 57 31 84 12 10 DC E6 21 -36 DC 03 46 57 32 84 12 10 DC E8 21 42 DC 03 46 -57 33 84 12 10 DC EA 21 3E 90 00 30 07 24 3E E0 -00 04 3E B0 00 10 02 24 3E E0 00 08 30 4D 4E DC -04 47 4F 54 4F 00 87 12 C2 DA B0 CD BE CB 2A C4 -00 00 05 3F 47 4F 54 4F 87 12 58 DC B0 CD BE CB -2A C4 00 00 03 4A 4D 50 87 12 B0 CD A4 DB 2A C4 -82 DC 04 3F 4A 4D 50 00 87 12 58 DC B0 CD 78 C4 -76 DB 2A C4 +2A 83 0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 FF 03 +08 DA 89 48 00 00 A2 53 C6 21 30 4D 42 D7 05 41 +47 41 49 4E 0A 4E 38 40 00 3C E7 3F 00 00 05 57 +48 49 4C 45 87 12 EC D8 76 C4 2A C4 A2 D8 06 52 +45 50 45 41 54 00 87 12 74 D9 04 D9 2A C4 A0 D9 +3D 41 08 4E 3E 4F 2A 48 B2 92 C4 21 CD 2F 98 42 +C6 21 00 00 30 4D D2 D7 03 42 57 31 84 12 9E D9 +00 00 B8 D9 03 42 57 32 84 12 9E D9 00 00 C4 D9 +03 42 57 33 84 12 9E D9 00 00 DC D9 3D 41 1A 42 +C6 21 28 4E B2 92 C4 21 90 2B BA 4F 00 00 A2 53 +C6 21 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 +84 12 DA D9 00 00 FC D9 03 46 57 32 84 12 DA D9 +00 00 08 DA 03 46 57 33 84 12 DA D9 00 00 00 00 +05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 +3E B0 00 10 02 24 3E E0 00 08 87 12 C0 CC DA CA +2A C4 14 DA 04 47 4F 54 4F 00 2F 83 8F 4E 00 00 +3E 40 00 3C F2 3F @FFFE -D6 D5 +9E D2 q diff --git a/binaries/LP_MSP430FR2476_16MHz.txt b/binaries/LP_MSP430FR2476_16MHz.txt new file mode 100644 index 0000000..66249a4 --- /dev/null +++ b/binaries/LP_MSP430FR2476_16MHz.txt @@ -0,0 +1,366 @@ +@1800 +10 00 08 00 A1 F7 80 3E 05 00 18 00 6E 96 D0 8C +2D 01 6B 30 B6 82 C8 82 +@8000 +2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 +8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 80 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 80 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 80 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 80 02 3E 52 00 0E 12 3E 4F 30 4D 70 80 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 80 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 80 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 80 +01 21 BE 4F 00 00 3E 4F 30 4D CC 80 02 30 3D 00 +1E 83 0E 7E 30 4D FC 80 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 81 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 80 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 81 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 81 02 23 53 00 87 12 88 81 C0 81 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 81 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 80 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 81 34 80 86 80 D4 80 BA 81 +92 80 F8 81 D4 81 D6 83 42 87 82 83 2A 80 22 81 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 81 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 82 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 82 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 82 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 E2 C3 43 02 30 41 B2 40 13 00 0E 05 E2 D3 +43 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 82 +B0 12 B6 82 12 D2 0A 18 F9 3F F0 80 06 41 43 43 +45 50 54 00 3C 40 64 83 3B 40 2E 83 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 83 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A 83 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 80 04 45 4D 49 +54 00 30 40 86 83 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C 83 04 45 43 48 4F 00 B2 40 82 48 +52 83 82 43 DE 21 30 4D 32 82 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 83 92 43 DE 21 30 4D 20 82 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 83 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 83 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 81 +02 43 52 00 30 40 08 84 87 12 1E 84 02 0D 0A 00 +D6 83 2A 80 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 81 82 53 22 00 82 43 B4 21 87 12 14 84 +1E 84 B0 86 14 84 22 00 80 84 4C 84 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA 83 82 2E 22 00 87 12 38 84 14 84 D6 83 +B0 86 2A 80 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 +60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 +18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 +F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E +CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 +0C 4E 65 4C 74 40 80 00 3B 40 CA 21 3E 4B 0E 93 +1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E +FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 +0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 +09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C +00 00 35 40 0E 80 34 40 00 80 30 4D 82 80 07 3E +4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 +DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 +07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 +D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 +E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 85 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 85 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 81 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 82 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 80 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC 82 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 83 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 86 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 84 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 84 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 87 42 87 80 84 50 87 +3D 40 58 87 CC 22 82 3E 5A 87 0A 4E 3E 4F 3D 40 +70 87 23 27 3D 40 4A 87 1A E2 BE 21 A1 27 B5 23 +72 87 3E 4F 3D 40 4A 87 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 8A CB 3F D2 86 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 80 46 87 AE 87 B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 81 04 51 55 49 54 00 82 43 08 18 31 40 +E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A 80 +04 84 8C 83 42 87 82 83 46 87 A4 80 0C 81 1E 84 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 88 +14 84 30 FF A0 86 26 81 1E 84 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 88 3C 82 E0 87 C2 86 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E 88 86 41 42 4F +52 54 22 00 87 12 38 84 14 84 40 88 B0 86 2A 80 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 8D +B0 12 B6 82 92 C3 1C 05 38 40 A0 AA 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 1C 05 F3 23 87 12 +42 8D 14 84 DE 21 EA 80 AC 83 1E 84 04 1B 5B 37 +6D 00 D6 83 58 80 40 82 9A 88 04 84 1E 84 05 6C +69 6E 65 3A D6 83 D0 80 24 82 D6 83 1E 84 04 1B +5B 30 6D 00 D6 83 24 88 00 00 83 5B 27 5D 87 12 +C0 88 14 84 14 84 B0 86 B0 86 2A 80 E8 84 01 27 +87 12 42 87 80 84 EE 84 40 82 CE 88 2A 80 7A 87 +32 81 81 5C 92 42 C0 21 C4 21 30 4D AA 88 81 5B +82 43 BE 21 30 4D D2 88 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 86 82 49 53 00 87 12 +BE 87 EA 80 40 82 12 89 AE 88 14 84 F0 88 B0 86 +2A 80 C0 88 F0 88 2A 80 FA 88 09 49 4D 4D 45 44 +49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D +C4 87 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 87 +80 84 EE 84 58 80 40 82 CE 88 0C 81 40 82 5C 89 +14 84 14 84 B0 86 B0 86 14 84 B0 86 B0 86 2A 80 +DE 88 81 3B 82 93 BE 21 B5 27 87 12 14 84 2A 80 +B0 86 FA 89 E0 88 2A 80 62 89 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 89 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A 89 01 3A 30 12 A0 89 92 B3 C6 21 A2 63 C6 21 +87 12 42 87 80 84 C8 89 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 84 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 88 90 87 05 44 45 46 45 52 +B0 12 B8 89 BA 40 30 40 FC FF BA 40 AE 89 FE FF +E3 3F 1E 87 06 43 52 45 41 54 45 00 B0 12 B8 89 +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 8A 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 85 05 3E 42 4F 44 59 2E 52 +30 4D 44 8A 04 43 4F 44 45 00 B0 12 B8 89 A2 82 +C6 21 87 12 D2 8C AC 8C 2A 80 84 8A 07 43 4F 44 +45 4E 4E 4D B0 12 86 89 F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 8C FA 89 2A 80 2C 88 03 41 +53 4D B2 40 B0 8C DA 21 E0 3F AC 8A 06 45 4E 44 +41 53 4D 00 87 12 B4 8A F4 8C 2A 80 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 8C 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A 80 +02 00 A2 52 C6 21 ED 3F 1A 89 85 48 49 32 4C 4F +87 12 A0 86 4A 8B B0 86 E0 88 D2 8C AC 8C 2A 80 +1A 8B 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 82 00 00 2E 53 30 4D 5E 8A +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C 82 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 83 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C 8A 85 42 45 47 49 4E 30 40 A0 86 70 8B 85 55 +4E 54 49 4C 39 40 40 82 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 8A 85 41 +47 41 49 4E 39 40 3C 82 EF 3F 7A 84 85 57 48 49 +4C 45 87 12 36 8B 76 80 2A 80 34 84 86 52 45 50 +45 41 54 00 87 12 B4 8B 76 8B 2A 80 50 8B 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 82 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 86 84 4C 4F 4F 50 00 39 40 76 82 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 82 85 2B 4C 4F 4F 50 +39 40 64 82 E5 3F 06 8C 04 4D 4F 56 45 00 0A 4E +38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C +F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 84 +CA 21 F2 80 2A 80 84 12 7E 8C AE 8B 54 8F DE 8B +BE 88 32 8B 3A 8C 68 90 64 84 66 8D 80 8D 8E 8B +00 8E 00 00 3A 90 E8 88 78 8A 00 00 84 12 7E 8C +86 95 E8 95 3A 95 5C 96 00 95 00 00 30 92 00 00 +F6 94 A6 95 58 95 96 95 40 93 00 00 00 00 38 96 +AA 8C 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 8C EE 8C +F4 8C 04 8D 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 89 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 8C D0 8C 6E 96 CC 8B 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 8D 92 42 0C 18 +48 8D EF 3F 38 8D 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 8D 92 42 C6 21 48 8D 30 4D 4C 8D +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC 8B 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 82 +DE 82 B2 40 0A 8E 08 8E B2 40 D0 8C 0E 18 B2 40 +6E 96 0C 18 30 12 56 8D B2 40 86 83 84 83 B2 40 +08 84 06 84 B2 40 98 82 96 82 B2 40 18 00 0A 18 +37 40 1A 80 36 40 92 80 35 40 0E 80 34 40 00 80 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A 8D +04 57 41 52 4D 00 30 40 0A 8E 3D 40 40 8E 92 C3 +30 01 1E 42 08 18 0E 93 12 24 F2 B0 10 00 00 02 +02 20 3E E3 1E 53 F2 D0 30 00 0A 02 3E 90 0A 00 +B7 27 3E 90 16 00 B4 2F 2E 93 83 27 8C 2F 30 4D +1E 84 06 0D 1B 5B 37 6D 23 00 D6 83 34 82 1E 84 +19 46 61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D +2E 54 68 6F 6F 72 65 6E 73 20 D6 83 14 84 30 FF +A0 86 B8 80 24 82 1E 84 0A 62 79 74 65 73 20 66 +72 65 65 00 3C 82 9A 88 82 8B 04 43 4F 4C 44 00 +92 B3 0A 05 FD 23 B2 40 04 A5 20 01 40 8E B2 40 +88 5A CC 01 B2 D3 06 02 B2 40 FE FF 02 02 B2 D3 +26 02 B2 40 FF 7F 22 02 B2 D3 46 02 B2 40 FC FF +42 02 E2 D3 45 02 F2 40 A5 00 A1 01 F2 40 10 00 +A0 01 D2 43 A1 01 B2 40 00 A5 60 01 B2 40 FF 1E +80 01 B2 40 BA 00 82 01 B2 40 E8 01 84 01 39 40 +00 01 B2 D0 10 00 86 01 92 D2 5E 01 08 18 38 40 +59 14 18 83 FE 23 19 83 FA 23 39 40 00 20 29 83 +89 43 00 20 FC 23 39 40 38 00 29 83 B9 40 9E 8E +8C FF FB 23 B2 40 26 83 E0 FF B2 40 81 00 00 05 +92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 +92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 06 8E +44 3F 8A 8E 07 43 4F 4D 50 41 52 45 0C 4E 38 4F +3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 +07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D +1E 43 30 4D B2 89 86 5B 54 48 45 4E 5D 00 30 4D +86 8F 86 5B 45 4C 53 45 5D 00 87 12 14 84 00 00 +C6 80 42 87 80 84 24 87 34 80 40 82 FC 8F 44 80 +1E 84 06 5B 54 48 45 4E 5D 00 5C 8F 4A 82 CC 8F +F8 83 D0 80 58 80 4A 82 A2 8F 2A 80 44 80 1E 84 +06 5B 45 4C 53 45 5D 00 5C 8F 4A 82 EA 8F F8 83 +D0 80 58 80 4A 82 A0 8F 2A 80 1E 84 04 5B 49 46 +5D 00 5C 8F 4A 82 A2 8F 3C 82 A0 8F F8 83 1E 84 +05 0D 0A 6B 6F 20 D6 83 8C 83 32 87 3C 82 A2 8F +92 8F 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D +12 90 89 5B 44 45 46 49 4E 45 44 5D 87 12 42 87 +80 84 EE 84 6A 80 2A 80 22 90 8B 5B 55 4E 44 45 +46 49 4E 45 44 5D 87 12 42 87 80 84 EE 84 6A 80 +00 81 2A 80 56 90 3D 41 B2 4E 0E 18 A2 4E 0C 18 +3E 4F 30 40 56 8D 48 8C 06 4D 41 52 4B 45 52 00 +B0 12 B8 89 BA 40 84 12 FC FF BA 40 54 90 FE FF +9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 +30 40 00 8A 1C 15 B0 12 2A 80 80 84 EE 84 4A 82 +AA 90 AA 85 40 82 CE 88 C4 90 AC 90 39 4E 39 80 +86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 +01 24 2E 82 1B 17 30 41 3E 40 28 00 B0 12 94 90 +19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 40 29 00 +1C 15 12 12 C4 21 92 53 C4 21 B0 12 2A 80 80 84 +AA 85 40 82 02 91 F8 90 21 53 3E 90 10 00 7D 2D +E1 2B 04 91 B2 41 C4 21 DD 3F 87 12 42 87 74 84 +12 91 0C 43 1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F +7A 90 23 00 27 20 92 53 C4 21 B0 12 94 90 3C 40 +00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 3C 40 +20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 3C 40 +30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 3C 40 +30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 4F +3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 92 53 +C4 21 B0 12 94 90 ED 3F 7A 90 40 00 16 20 3C 40 +20 00 92 53 C4 21 B0 12 E0 90 0C 20 3C 50 10 00 +3E 40 2B 00 B0 12 E0 90 92 92 C0 21 C4 21 02 24 +92 53 C4 21 8E 10 0C 5E DA 3F B0 12 E0 90 FA 23 +3C 50 10 00 B0 12 C8 90 EF 3F 0C 43 1B 42 C6 21 +A2 53 C6 21 87 12 42 87 74 84 DC 91 FE 90 26 00 +00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F B0 12 +E0 90 E1 23 3C 50 80 00 B0 12 C8 90 DC 3F D6 82 +04 52 45 54 49 00 87 12 14 84 00 13 B0 86 2A 80 +14 84 2C 00 0A 91 D4 91 1A 92 09 4B 2E 4E 0E DC +A4 3F FC 8A 03 4D 4F 56 84 12 10 92 00 40 24 92 +05 4D 4F 56 2E 42 84 12 10 92 40 40 00 00 03 41 +44 44 84 12 10 92 00 50 3E 92 05 41 44 44 2E 42 +84 12 10 92 40 50 4A 92 04 41 44 44 43 00 84 12 +10 92 00 60 58 92 06 41 44 44 43 2E 42 00 84 12 +10 92 40 60 00 92 04 53 55 42 43 00 84 12 10 92 +00 70 76 92 06 53 55 42 43 2E 42 00 84 12 10 92 +40 70 84 92 03 53 55 42 84 12 10 92 00 80 94 92 +05 53 55 42 2E 42 84 12 10 92 40 80 DE 8A 03 43 +4D 50 84 12 10 92 00 90 AE 92 05 43 4D 50 2E 42 +84 12 10 92 40 90 CC 8A 04 44 41 44 44 00 84 12 +10 92 00 A0 C8 92 06 44 41 44 44 2E 42 00 84 12 +10 92 40 A0 BA 92 03 42 49 54 84 12 10 92 00 B0 +E6 92 05 42 49 54 2E 42 84 12 10 92 40 B0 F2 92 +03 42 49 43 84 12 10 92 00 C0 00 93 05 42 49 43 +2E 42 84 12 10 92 40 C0 0C 93 03 42 49 53 84 12 +10 92 00 D0 1A 93 05 42 49 53 2E 42 84 12 10 92 +40 D0 00 00 03 58 4F 52 84 12 10 92 00 E0 34 93 +05 58 4F 52 2E 42 84 12 10 92 40 E0 66 92 03 41 +4E 44 84 12 10 92 00 F0 4E 93 05 41 4E 44 2E 42 +84 12 10 92 40 F0 42 87 0A 91 6C 93 0A 4C 3C F0 +70 00 8A 10 3A F0 0F 00 0C DA 4F 3F A0 92 03 52 +52 43 84 12 66 93 00 10 7E 93 05 52 52 43 2E 42 +84 12 66 93 40 10 8A 93 04 53 57 50 42 00 84 12 +66 93 80 10 98 93 03 52 52 41 84 12 66 93 00 11 +A6 93 05 52 52 41 2E 42 84 12 66 93 40 11 B2 93 +03 53 58 54 84 12 66 93 80 11 00 00 04 50 55 53 +48 00 84 12 66 93 00 12 CC 93 06 50 55 53 48 2E +42 00 84 12 66 93 40 12 26 93 04 43 41 4C 4C 00 +84 12 66 93 80 12 1A 53 0E 4A 87 12 34 82 1E 84 +0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 4C 88 +42 87 74 84 16 94 92 53 C4 21 3E 40 2C 00 B0 12 +2A 80 80 84 AA 85 40 82 CE 88 CA 91 2E 94 0A 4E +3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A +01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F +2A 92 D1 2F 8A 10 5A 06 8F 3F C0 93 04 52 52 43 +4D 00 84 12 10 94 50 00 5C 94 04 52 52 41 4D 00 +84 12 10 94 50 01 6A 94 04 52 4C 41 4D 00 84 12 +10 94 50 02 78 94 04 52 52 55 4D 00 84 12 10 94 +50 03 DA 93 05 50 55 53 48 4D 84 12 10 94 00 15 +94 94 04 50 4F 50 4D 00 84 12 10 94 00 17 86 94 +03 53 3E 3D 85 12 00 38 B0 94 02 53 3C 00 85 12 +00 34 A2 94 03 30 3E 3D 85 12 00 30 C4 94 02 30 +3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 00 2C +D8 94 03 55 3E 3D 85 12 00 28 CE 94 03 30 3C 3E +85 12 00 24 EC 94 02 30 3D 00 85 12 00 20 00 00 +02 49 46 00 1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 +0E 4A 30 4D E2 94 04 54 48 45 4E 00 1A 42 C6 21 +08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 +63 2F 88 DA 00 00 30 4D D6 92 04 45 4C 53 45 00 +1A 42 C6 21 BA 40 00 3C 00 00 A2 53 C6 21 2F 83 +8F 4A 00 00 E3 3F 16 95 05 55 4E 54 49 4C 3A 4F +08 4E 3E 4F 19 42 C6 21 2A 83 0A 89 0A 11 3A 90 +00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 +C6 21 30 4D 5A 93 05 41 47 41 49 4E 0A 4E 38 40 +00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 04 95 +76 80 2A 80 BA 94 06 52 45 50 45 41 54 00 87 12 +8C 95 1C 95 2A 80 B8 95 3D 41 08 4E 3E 4F 2A 48 +B2 92 C4 21 CD 2F 98 42 C6 21 00 00 30 4D EA 93 +03 42 57 31 84 12 B6 95 00 00 D0 95 03 42 57 32 +84 12 B6 95 00 00 DC 95 03 42 57 33 84 12 B6 95 +00 00 F4 95 3D 41 1A 42 C6 21 28 4E B2 92 C4 21 +90 2B BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F +30 4D 00 00 03 46 57 31 84 12 F2 95 00 00 14 96 +03 46 57 32 84 12 F2 95 00 00 20 96 03 46 57 33 +84 12 F2 95 00 00 00 00 05 3F 47 4F 54 4F 3E 90 +00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 +00 08 87 12 C0 88 DA 86 2A 80 2C 96 04 47 4F 54 +4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F +@FFFE +9E 8E +q diff --git a/binaries/LP_MSP430FR2476_1MHz.txt b/binaries/LP_MSP430FR2476_1MHz.txt new file mode 100644 index 0000000..06c1a95 --- /dev/null +++ b/binaries/LP_MSP430FR2476_1MHz.txt @@ -0,0 +1,365 @@ +@1800 +10 00 08 00 00 D6 E8 03 05 00 18 00 5E 96 D0 8C +2D 01 6B 30 B6 82 C8 82 +@8000 +2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 +8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 80 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 80 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 80 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 80 02 3E 52 00 0E 12 3E 4F 30 4D 70 80 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 80 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 80 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 80 +01 21 BE 4F 00 00 3E 4F 30 4D CC 80 02 30 3D 00 +1E 83 0E 7E 30 4D FC 80 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 81 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 80 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 81 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 81 02 23 53 00 87 12 88 81 C0 81 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 81 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 80 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 81 34 80 86 80 D4 80 BA 81 +92 80 F8 81 D4 81 D6 83 42 87 82 83 2A 80 22 81 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 81 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 82 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 82 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 82 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 E2 C3 43 02 30 41 B2 40 13 00 0E 05 E2 D3 +43 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 82 +B0 12 B6 82 12 D2 0A 18 F9 3F F0 80 06 41 43 43 +45 50 54 00 3C 40 64 83 3B 40 2E 83 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 83 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A 83 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 80 04 45 4D 49 +54 00 30 40 86 83 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C 83 04 45 43 48 4F 00 B2 40 82 48 +52 83 82 43 DE 21 30 4D 32 82 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 83 92 43 DE 21 30 4D 20 82 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 83 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 83 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 81 +02 43 52 00 30 40 08 84 87 12 1E 84 02 0D 0A 00 +D6 83 2A 80 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 81 82 53 22 00 82 43 B4 21 87 12 14 84 +1E 84 B0 86 14 84 22 00 80 84 4C 84 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA 83 82 2E 22 00 87 12 38 84 14 84 D6 83 +B0 86 2A 80 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 +60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 +18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 +F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E +CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 +0C 4E 65 4C 74 40 80 00 3B 40 CA 21 3E 4B 0E 93 +1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E +FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 +0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 +09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C +00 00 35 40 0E 80 34 40 00 80 30 4D 82 80 07 3E +4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 +DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 +07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 +D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 +E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 85 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 85 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 81 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 82 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 80 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC 82 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 83 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 86 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 84 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 84 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 87 42 87 80 84 50 87 +3D 40 58 87 CC 22 82 3E 5A 87 0A 4E 3E 4F 3D 40 +70 87 23 27 3D 40 4A 87 1A E2 BE 21 A1 27 B5 23 +72 87 3E 4F 3D 40 4A 87 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 8A CB 3F D2 86 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 80 46 87 AE 87 B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 81 04 51 55 49 54 00 82 43 08 18 31 40 +E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A 80 +04 84 8C 83 42 87 82 83 46 87 A4 80 0C 81 1E 84 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 88 +14 84 30 FF A0 86 26 81 1E 84 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 88 3C 82 E0 87 C2 86 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E 88 86 41 42 4F +52 54 22 00 87 12 38 84 14 84 40 88 B0 86 2A 80 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 8D +B0 12 B6 82 92 C3 1C 05 38 40 AA 0A 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 1C 05 F3 23 87 12 +42 8D 14 84 DE 21 EA 80 AC 83 1E 84 04 1B 5B 37 +6D 00 D6 83 58 80 40 82 9A 88 04 84 1E 84 05 6C +69 6E 65 3A D6 83 D0 80 24 82 D6 83 1E 84 04 1B +5B 30 6D 00 D6 83 24 88 00 00 83 5B 27 5D 87 12 +C0 88 14 84 14 84 B0 86 B0 86 2A 80 E8 84 01 27 +87 12 42 87 80 84 EE 84 40 82 CE 88 2A 80 7A 87 +32 81 81 5C 92 42 C0 21 C4 21 30 4D AA 88 81 5B +82 43 BE 21 30 4D D2 88 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 86 82 49 53 00 87 12 +BE 87 EA 80 40 82 12 89 AE 88 14 84 F0 88 B0 86 +2A 80 C0 88 F0 88 2A 80 FA 88 09 49 4D 4D 45 44 +49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D +C4 87 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 87 +80 84 EE 84 58 80 40 82 CE 88 0C 81 40 82 5C 89 +14 84 14 84 B0 86 B0 86 14 84 B0 86 B0 86 2A 80 +DE 88 81 3B 82 93 BE 21 B5 27 87 12 14 84 2A 80 +B0 86 FA 89 E0 88 2A 80 62 89 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 89 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A 89 01 3A 30 12 A0 89 92 B3 C6 21 A2 63 C6 21 +87 12 42 87 80 84 C8 89 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 84 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 88 90 87 05 44 45 46 45 52 +B0 12 B8 89 BA 40 30 40 FC FF BA 40 AE 89 FE FF +E3 3F 1E 87 06 43 52 45 41 54 45 00 B0 12 B8 89 +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 8A 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 85 05 3E 42 4F 44 59 2E 52 +30 4D 44 8A 04 43 4F 44 45 00 B0 12 B8 89 A2 82 +C6 21 87 12 D2 8C AC 8C 2A 80 84 8A 07 43 4F 44 +45 4E 4E 4D B0 12 86 89 F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 8C FA 89 2A 80 2C 88 03 41 +53 4D B2 40 B0 8C DA 21 E0 3F AC 8A 06 45 4E 44 +41 53 4D 00 87 12 B4 8A F4 8C 2A 80 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 8C 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A 80 +02 00 A2 52 C6 21 ED 3F 1A 89 85 48 49 32 4C 4F +87 12 A0 86 4A 8B B0 86 E0 88 D2 8C AC 8C 2A 80 +1A 8B 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 82 00 00 2E 53 30 4D 5E 8A +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C 82 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 83 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C 8A 85 42 45 47 49 4E 30 40 A0 86 70 8B 85 55 +4E 54 49 4C 39 40 40 82 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 8A 85 41 +47 41 49 4E 39 40 3C 82 EF 3F 7A 84 85 57 48 49 +4C 45 87 12 36 8B 76 80 2A 80 34 84 86 52 45 50 +45 41 54 00 87 12 B4 8B 76 8B 2A 80 50 8B 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 82 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 86 84 4C 4F 4F 50 00 39 40 76 82 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 82 85 2B 4C 4F 4F 50 +39 40 64 82 E5 3F 06 8C 04 4D 4F 56 45 00 0A 4E +38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C +F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 84 +CA 21 F2 80 2A 80 84 12 7E 8C AE 8B 44 8F DE 8B +BE 88 32 8B 3A 8C 58 90 64 84 66 8D 80 8D 8E 8B +00 8E 00 00 2A 90 E8 88 78 8A 00 00 84 12 7E 8C +76 95 D8 95 2A 95 4C 96 F0 94 00 00 20 92 00 00 +E6 94 96 95 48 95 86 95 30 93 00 00 00 00 28 96 +AA 8C 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 8C EE 8C +F4 8C 04 8D 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 89 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 8C D0 8C 5E 96 CC 8B 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 8D 92 42 0C 18 +48 8D EF 3F 38 8D 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 8D 92 42 C6 21 48 8D 30 4D 4C 8D +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC 8B 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 82 +DE 82 B2 40 0A 8E 08 8E B2 40 D0 8C 0E 18 B2 40 +5E 96 0C 18 30 12 56 8D B2 40 86 83 84 83 B2 40 +08 84 06 84 B2 40 98 82 96 82 B2 40 18 00 0A 18 +37 40 1A 80 36 40 92 80 35 40 0E 80 34 40 00 80 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A 8D +04 57 41 52 4D 00 30 40 0A 8E 3D 40 40 8E 92 C3 +30 01 1E 42 08 18 0E 93 12 24 F2 B0 10 00 00 02 +02 20 3E E3 1E 53 F2 D0 30 00 0A 02 3E 90 0A 00 +B7 27 3E 90 16 00 B4 2F 2E 93 83 27 8C 2F 30 4D +1E 84 06 0D 1B 5B 37 6D 23 00 D6 83 34 82 1E 84 +19 46 61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D +2E 54 68 6F 6F 72 65 6E 73 20 D6 83 14 84 30 FF +A0 86 B8 80 24 82 1E 84 0A 62 79 74 65 73 20 66 +72 65 65 00 3C 82 9A 88 82 8B 04 43 4F 4C 44 00 +92 B3 0A 05 FD 23 B2 40 04 A5 20 01 40 8E B2 40 +88 5A CC 01 B2 D3 06 02 B2 40 FE FF 02 02 B2 D3 +26 02 B2 40 FF 7F 22 02 B2 D3 46 02 B2 40 FC FF +42 02 E2 D3 45 02 B2 40 00 A5 60 01 B2 40 FF 1E +80 01 B2 40 B0 00 82 01 B2 40 1E 00 84 01 39 40 +10 00 B2 D0 10 00 86 01 92 D2 5E 01 08 18 38 40 +59 14 18 83 FE 23 19 83 FA 23 39 40 00 20 29 83 +89 43 00 20 FC 23 39 40 38 00 29 83 B9 40 9E 8E +8C FF FB 23 B2 40 26 83 E0 FF B2 40 81 00 00 05 +92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 +92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 06 8E +4C 3F 8A 8E 07 43 4F 4D 50 41 52 45 0C 4E 38 4F +3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 +07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D +1E 43 30 4D B2 89 86 5B 54 48 45 4E 5D 00 30 4D +76 8F 86 5B 45 4C 53 45 5D 00 87 12 14 84 00 00 +C6 80 42 87 80 84 24 87 34 80 40 82 EC 8F 44 80 +1E 84 06 5B 54 48 45 4E 5D 00 4C 8F 4A 82 BC 8F +F8 83 D0 80 58 80 4A 82 92 8F 2A 80 44 80 1E 84 +06 5B 45 4C 53 45 5D 00 4C 8F 4A 82 DA 8F F8 83 +D0 80 58 80 4A 82 90 8F 2A 80 1E 84 04 5B 49 46 +5D 00 4C 8F 4A 82 92 8F 3C 82 90 8F F8 83 1E 84 +05 0D 0A 6B 6F 20 D6 83 8C 83 32 87 3C 82 92 8F +82 8F 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D +02 90 89 5B 44 45 46 49 4E 45 44 5D 87 12 42 87 +80 84 EE 84 6A 80 2A 80 12 90 8B 5B 55 4E 44 45 +46 49 4E 45 44 5D 87 12 42 87 80 84 EE 84 6A 80 +00 81 2A 80 46 90 3D 41 B2 4E 0E 18 A2 4E 0C 18 +3E 4F 30 40 56 8D 48 8C 06 4D 41 52 4B 45 52 00 +B0 12 B8 89 BA 40 84 12 FC FF BA 40 44 90 FE FF +9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 +30 40 00 8A 1C 15 B0 12 2A 80 80 84 EE 84 4A 82 +9A 90 AA 85 40 82 CE 88 B4 90 9C 90 39 4E 39 80 +86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 +01 24 2E 82 1B 17 30 41 3E 40 28 00 B0 12 84 90 +19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 40 29 00 +1C 15 12 12 C4 21 92 53 C4 21 B0 12 2A 80 80 84 +AA 85 40 82 F2 90 E8 90 21 53 3E 90 10 00 7D 2D +E1 2B F4 90 B2 41 C4 21 DD 3F 87 12 42 87 74 84 +02 91 0C 43 1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F +7A 90 23 00 27 20 92 53 C4 21 B0 12 84 90 3C 40 +00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 3C 40 +20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 3C 40 +30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 3C 40 +30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 4F +3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 92 53 +C4 21 B0 12 84 90 ED 3F 7A 90 40 00 16 20 3C 40 +20 00 92 53 C4 21 B0 12 D0 90 0C 20 3C 50 10 00 +3E 40 2B 00 B0 12 D0 90 92 92 C0 21 C4 21 02 24 +92 53 C4 21 8E 10 0C 5E DA 3F B0 12 D0 90 FA 23 +3C 50 10 00 B0 12 B8 90 EF 3F 0C 43 1B 42 C6 21 +A2 53 C6 21 87 12 42 87 74 84 CC 91 FE 90 26 00 +00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F B0 12 +D0 90 E1 23 3C 50 80 00 B0 12 B8 90 DC 3F D6 82 +04 52 45 54 49 00 87 12 14 84 00 13 B0 86 2A 80 +14 84 2C 00 FA 90 C4 91 0A 92 09 4B 2E 4E 0E DC +A4 3F FC 8A 03 4D 4F 56 84 12 00 92 00 40 14 92 +05 4D 4F 56 2E 42 84 12 00 92 40 40 00 00 03 41 +44 44 84 12 00 92 00 50 2E 92 05 41 44 44 2E 42 +84 12 00 92 40 50 3A 92 04 41 44 44 43 00 84 12 +00 92 00 60 48 92 06 41 44 44 43 2E 42 00 84 12 +00 92 40 60 F0 91 04 53 55 42 43 00 84 12 00 92 +00 70 66 92 06 53 55 42 43 2E 42 00 84 12 00 92 +40 70 74 92 03 53 55 42 84 12 00 92 00 80 84 92 +05 53 55 42 2E 42 84 12 00 92 40 80 DE 8A 03 43 +4D 50 84 12 00 92 00 90 9E 92 05 43 4D 50 2E 42 +84 12 00 92 40 90 CC 8A 04 44 41 44 44 00 84 12 +00 92 00 A0 B8 92 06 44 41 44 44 2E 42 00 84 12 +00 92 40 A0 AA 92 03 42 49 54 84 12 00 92 00 B0 +D6 92 05 42 49 54 2E 42 84 12 00 92 40 B0 E2 92 +03 42 49 43 84 12 00 92 00 C0 F0 92 05 42 49 43 +2E 42 84 12 00 92 40 C0 FC 92 03 42 49 53 84 12 +00 92 00 D0 0A 93 05 42 49 53 2E 42 84 12 00 92 +40 D0 00 00 03 58 4F 52 84 12 00 92 00 E0 24 93 +05 58 4F 52 2E 42 84 12 00 92 40 E0 56 92 03 41 +4E 44 84 12 00 92 00 F0 3E 93 05 41 4E 44 2E 42 +84 12 00 92 40 F0 42 87 FA 90 5C 93 0A 4C 3C F0 +70 00 8A 10 3A F0 0F 00 0C DA 4F 3F 90 92 03 52 +52 43 84 12 56 93 00 10 6E 93 05 52 52 43 2E 42 +84 12 56 93 40 10 7A 93 04 53 57 50 42 00 84 12 +56 93 80 10 88 93 03 52 52 41 84 12 56 93 00 11 +96 93 05 52 52 41 2E 42 84 12 56 93 40 11 A2 93 +03 53 58 54 84 12 56 93 80 11 00 00 04 50 55 53 +48 00 84 12 56 93 00 12 BC 93 06 50 55 53 48 2E +42 00 84 12 56 93 40 12 16 93 04 43 41 4C 4C 00 +84 12 56 93 80 12 1A 53 0E 4A 87 12 34 82 1E 84 +0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 4C 88 +42 87 74 84 06 94 92 53 C4 21 3E 40 2C 00 B0 12 +2A 80 80 84 AA 85 40 82 CE 88 BA 91 1E 94 0A 4E +3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A +01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F +2A 92 D1 2F 8A 10 5A 06 8F 3F B0 93 04 52 52 43 +4D 00 84 12 00 94 50 00 4C 94 04 52 52 41 4D 00 +84 12 00 94 50 01 5A 94 04 52 4C 41 4D 00 84 12 +00 94 50 02 68 94 04 52 52 55 4D 00 84 12 00 94 +50 03 CA 93 05 50 55 53 48 4D 84 12 00 94 00 15 +84 94 04 50 4F 50 4D 00 84 12 00 94 00 17 76 94 +03 53 3E 3D 85 12 00 38 A0 94 02 53 3C 00 85 12 +00 34 92 94 03 30 3E 3D 85 12 00 30 B4 94 02 30 +3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 00 2C +C8 94 03 55 3E 3D 85 12 00 28 BE 94 03 30 3C 3E +85 12 00 24 DC 94 02 30 3D 00 85 12 00 20 00 00 +02 49 46 00 1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 +0E 4A 30 4D D2 94 04 54 48 45 4E 00 1A 42 C6 21 +08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 +63 2F 88 DA 00 00 30 4D C6 92 04 45 4C 53 45 00 +1A 42 C6 21 BA 40 00 3C 00 00 A2 53 C6 21 2F 83 +8F 4A 00 00 E3 3F 06 95 05 55 4E 54 49 4C 3A 4F +08 4E 3E 4F 19 42 C6 21 2A 83 0A 89 0A 11 3A 90 +00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 +C6 21 30 4D 4A 93 05 41 47 41 49 4E 0A 4E 38 40 +00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 F4 94 +76 80 2A 80 AA 94 06 52 45 50 45 41 54 00 87 12 +7C 95 0C 95 2A 80 A8 95 3D 41 08 4E 3E 4F 2A 48 +B2 92 C4 21 CD 2F 98 42 C6 21 00 00 30 4D DA 93 +03 42 57 31 84 12 A6 95 00 00 C0 95 03 42 57 32 +84 12 A6 95 00 00 CC 95 03 42 57 33 84 12 A6 95 +00 00 E4 95 3D 41 1A 42 C6 21 28 4E B2 92 C4 21 +90 2B BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F +30 4D 00 00 03 46 57 31 84 12 E2 95 00 00 04 96 +03 46 57 32 84 12 E2 95 00 00 10 96 03 46 57 33 +84 12 E2 95 00 00 00 00 05 3F 47 4F 54 4F 3E 90 +00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 +00 08 87 12 C0 88 DA 86 2A 80 1C 96 04 47 4F 54 +4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F +@FFFE +9E 8E +q diff --git a/binaries/LP_MSP430FR2476_8MHz.txt b/binaries/LP_MSP430FR2476_8MHz.txt new file mode 100644 index 0000000..aece4c9 --- /dev/null +++ b/binaries/LP_MSP430FR2476_8MHz.txt @@ -0,0 +1,365 @@ +@1800 +10 00 04 00 51 55 40 1F 05 00 18 00 5E 96 D0 8C +2D 01 6B 30 B6 82 C8 82 +@8000 +2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 +8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 80 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 80 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 80 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 80 02 3E 52 00 0E 12 3E 4F 30 4D 70 80 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 80 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 80 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 80 +01 21 BE 4F 00 00 3E 4F 30 4D CC 80 02 30 3D 00 +1E 83 0E 7E 30 4D FC 80 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 81 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 80 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 81 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 81 02 23 53 00 87 12 88 81 C0 81 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 81 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 80 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 81 34 80 86 80 D4 80 BA 81 +92 80 F8 81 D4 81 D6 83 42 87 82 83 2A 80 22 81 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 81 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 82 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 82 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 82 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 E2 C3 43 02 30 41 B2 40 13 00 0E 05 E2 D3 +43 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 82 +B0 12 B6 82 12 D2 0A 18 F9 3F F0 80 06 41 43 43 +45 50 54 00 3C 40 64 83 3B 40 2E 83 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 83 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A 83 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 80 04 45 4D 49 +54 00 30 40 86 83 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C 83 04 45 43 48 4F 00 B2 40 82 48 +52 83 82 43 DE 21 30 4D 32 82 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 83 92 43 DE 21 30 4D 20 82 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 83 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 83 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 81 +02 43 52 00 30 40 08 84 87 12 1E 84 02 0D 0A 00 +D6 83 2A 80 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 81 82 53 22 00 82 43 B4 21 87 12 14 84 +1E 84 B0 86 14 84 22 00 80 84 4C 84 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA 83 82 2E 22 00 87 12 38 84 14 84 D6 83 +B0 86 2A 80 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 +60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 +18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 +F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E +CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 +0C 4E 65 4C 74 40 80 00 3B 40 CA 21 3E 4B 0E 93 +1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E +FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 +0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 +09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C +00 00 35 40 0E 80 34 40 00 80 30 4D 82 80 07 3E +4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 +DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 +07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 +D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 +E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 85 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 85 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 81 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 82 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 80 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC 82 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 83 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 86 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 84 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 84 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 87 42 87 80 84 50 87 +3D 40 58 87 CC 22 82 3E 5A 87 0A 4E 3E 4F 3D 40 +70 87 23 27 3D 40 4A 87 1A E2 BE 21 A1 27 B5 23 +72 87 3E 4F 3D 40 4A 87 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 8A CB 3F D2 86 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 80 46 87 AE 87 B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 81 04 51 55 49 54 00 82 43 08 18 31 40 +E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A 80 +04 84 8C 83 42 87 82 83 46 87 A4 80 0C 81 1E 84 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 88 +14 84 30 FF A0 86 26 81 1E 84 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 88 3C 82 E0 87 C2 86 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E 88 86 41 42 4F +52 54 22 00 87 12 38 84 14 84 40 88 B0 86 2A 80 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 8D +B0 12 B6 82 92 C3 1C 05 38 40 50 55 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 1C 05 F3 23 87 12 +42 8D 14 84 DE 21 EA 80 AC 83 1E 84 04 1B 5B 37 +6D 00 D6 83 58 80 40 82 9A 88 04 84 1E 84 05 6C +69 6E 65 3A D6 83 D0 80 24 82 D6 83 1E 84 04 1B +5B 30 6D 00 D6 83 24 88 00 00 83 5B 27 5D 87 12 +C0 88 14 84 14 84 B0 86 B0 86 2A 80 E8 84 01 27 +87 12 42 87 80 84 EE 84 40 82 CE 88 2A 80 7A 87 +32 81 81 5C 92 42 C0 21 C4 21 30 4D AA 88 81 5B +82 43 BE 21 30 4D D2 88 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 86 82 49 53 00 87 12 +BE 87 EA 80 40 82 12 89 AE 88 14 84 F0 88 B0 86 +2A 80 C0 88 F0 88 2A 80 FA 88 09 49 4D 4D 45 44 +49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D +C4 87 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 87 +80 84 EE 84 58 80 40 82 CE 88 0C 81 40 82 5C 89 +14 84 14 84 B0 86 B0 86 14 84 B0 86 B0 86 2A 80 +DE 88 81 3B 82 93 BE 21 B5 27 87 12 14 84 2A 80 +B0 86 FA 89 E0 88 2A 80 62 89 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 89 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A 89 01 3A 30 12 A0 89 92 B3 C6 21 A2 63 C6 21 +87 12 42 87 80 84 C8 89 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 84 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 88 90 87 05 44 45 46 45 52 +B0 12 B8 89 BA 40 30 40 FC FF BA 40 AE 89 FE FF +E3 3F 1E 87 06 43 52 45 41 54 45 00 B0 12 B8 89 +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 8A 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 85 05 3E 42 4F 44 59 2E 52 +30 4D 44 8A 04 43 4F 44 45 00 B0 12 B8 89 A2 82 +C6 21 87 12 D2 8C AC 8C 2A 80 84 8A 07 43 4F 44 +45 4E 4E 4D B0 12 86 89 F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 8C FA 89 2A 80 2C 88 03 41 +53 4D B2 40 B0 8C DA 21 E0 3F AC 8A 06 45 4E 44 +41 53 4D 00 87 12 B4 8A F4 8C 2A 80 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 8C 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A 80 +02 00 A2 52 C6 21 ED 3F 1A 89 85 48 49 32 4C 4F +87 12 A0 86 4A 8B B0 86 E0 88 D2 8C AC 8C 2A 80 +1A 8B 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 82 00 00 2E 53 30 4D 5E 8A +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C 82 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 83 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C 8A 85 42 45 47 49 4E 30 40 A0 86 70 8B 85 55 +4E 54 49 4C 39 40 40 82 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 8A 85 41 +47 41 49 4E 39 40 3C 82 EF 3F 7A 84 85 57 48 49 +4C 45 87 12 36 8B 76 80 2A 80 34 84 86 52 45 50 +45 41 54 00 87 12 B4 8B 76 8B 2A 80 50 8B 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 82 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 86 84 4C 4F 4F 50 00 39 40 76 82 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 82 85 2B 4C 4F 4F 50 +39 40 64 82 E5 3F 06 8C 04 4D 4F 56 45 00 0A 4E +38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C +F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 84 +CA 21 F2 80 2A 80 84 12 7E 8C AE 8B 44 8F DE 8B +BE 88 32 8B 3A 8C 58 90 64 84 66 8D 80 8D 8E 8B +00 8E 00 00 2A 90 E8 88 78 8A 00 00 84 12 7E 8C +76 95 D8 95 2A 95 4C 96 F0 94 00 00 20 92 00 00 +E6 94 96 95 48 95 86 95 30 93 00 00 00 00 28 96 +AA 8C 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 8C EE 8C +F4 8C 04 8D 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 89 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 8C D0 8C 5E 96 CC 8B 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 8D 92 42 0C 18 +48 8D EF 3F 38 8D 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 8D 92 42 C6 21 48 8D 30 4D 4C 8D +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC 8B 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 82 +DE 82 B2 40 0A 8E 08 8E B2 40 D0 8C 0E 18 B2 40 +5E 96 0C 18 30 12 56 8D B2 40 86 83 84 83 B2 40 +08 84 06 84 B2 40 98 82 96 82 B2 40 18 00 0A 18 +37 40 1A 80 36 40 92 80 35 40 0E 80 34 40 00 80 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A 8D +04 57 41 52 4D 00 30 40 0A 8E 3D 40 40 8E 92 C3 +30 01 1E 42 08 18 0E 93 12 24 F2 B0 10 00 00 02 +02 20 3E E3 1E 53 F2 D0 30 00 0A 02 3E 90 0A 00 +B7 27 3E 90 16 00 B4 2F 2E 93 83 27 8C 2F 30 4D +1E 84 06 0D 1B 5B 37 6D 23 00 D6 83 34 82 1E 84 +19 46 61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D +2E 54 68 6F 6F 72 65 6E 73 20 D6 83 14 84 30 FF +A0 86 B8 80 24 82 1E 84 0A 62 79 74 65 73 20 66 +72 65 65 00 3C 82 9A 88 82 8B 04 43 4F 4C 44 00 +92 B3 0A 05 FD 23 B2 40 04 A5 20 01 40 8E B2 40 +88 5A CC 01 B2 D3 06 02 B2 40 FE FF 02 02 B2 D3 +26 02 B2 40 FF 7F 22 02 B2 D3 46 02 B2 40 FC FF +42 02 E2 D3 45 02 B2 40 00 A5 60 01 B2 40 FF 1E +80 01 B2 40 B6 00 82 01 B2 40 F4 00 84 01 39 40 +80 00 B2 D0 10 00 86 01 92 D2 5E 01 08 18 38 40 +59 14 18 83 FE 23 19 83 FA 23 39 40 00 20 29 83 +89 43 00 20 FC 23 39 40 38 00 29 83 B9 40 9E 8E +8C FF FB 23 B2 40 26 83 E0 FF B2 40 81 00 00 05 +92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 +92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 06 8E +4C 3F 8A 8E 07 43 4F 4D 50 41 52 45 0C 4E 38 4F +3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 +07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D +1E 43 30 4D B2 89 86 5B 54 48 45 4E 5D 00 30 4D +76 8F 86 5B 45 4C 53 45 5D 00 87 12 14 84 00 00 +C6 80 42 87 80 84 24 87 34 80 40 82 EC 8F 44 80 +1E 84 06 5B 54 48 45 4E 5D 00 4C 8F 4A 82 BC 8F +F8 83 D0 80 58 80 4A 82 92 8F 2A 80 44 80 1E 84 +06 5B 45 4C 53 45 5D 00 4C 8F 4A 82 DA 8F F8 83 +D0 80 58 80 4A 82 90 8F 2A 80 1E 84 04 5B 49 46 +5D 00 4C 8F 4A 82 92 8F 3C 82 90 8F F8 83 1E 84 +05 0D 0A 6B 6F 20 D6 83 8C 83 32 87 3C 82 92 8F +82 8F 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D +02 90 89 5B 44 45 46 49 4E 45 44 5D 87 12 42 87 +80 84 EE 84 6A 80 2A 80 12 90 8B 5B 55 4E 44 45 +46 49 4E 45 44 5D 87 12 42 87 80 84 EE 84 6A 80 +00 81 2A 80 46 90 3D 41 B2 4E 0E 18 A2 4E 0C 18 +3E 4F 30 40 56 8D 48 8C 06 4D 41 52 4B 45 52 00 +B0 12 B8 89 BA 40 84 12 FC FF BA 40 44 90 FE FF +9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 +30 40 00 8A 1C 15 B0 12 2A 80 80 84 EE 84 4A 82 +9A 90 AA 85 40 82 CE 88 B4 90 9C 90 39 4E 39 80 +86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 +01 24 2E 82 1B 17 30 41 3E 40 28 00 B0 12 84 90 +19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 40 29 00 +1C 15 12 12 C4 21 92 53 C4 21 B0 12 2A 80 80 84 +AA 85 40 82 F2 90 E8 90 21 53 3E 90 10 00 7D 2D +E1 2B F4 90 B2 41 C4 21 DD 3F 87 12 42 87 74 84 +02 91 0C 43 1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F +7A 90 23 00 27 20 92 53 C4 21 B0 12 84 90 3C 40 +00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 3C 40 +20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 3C 40 +30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 3C 40 +30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 4F +3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 92 53 +C4 21 B0 12 84 90 ED 3F 7A 90 40 00 16 20 3C 40 +20 00 92 53 C4 21 B0 12 D0 90 0C 20 3C 50 10 00 +3E 40 2B 00 B0 12 D0 90 92 92 C0 21 C4 21 02 24 +92 53 C4 21 8E 10 0C 5E DA 3F B0 12 D0 90 FA 23 +3C 50 10 00 B0 12 B8 90 EF 3F 0C 43 1B 42 C6 21 +A2 53 C6 21 87 12 42 87 74 84 CC 91 FE 90 26 00 +00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F B0 12 +D0 90 E1 23 3C 50 80 00 B0 12 B8 90 DC 3F D6 82 +04 52 45 54 49 00 87 12 14 84 00 13 B0 86 2A 80 +14 84 2C 00 FA 90 C4 91 0A 92 09 4B 2E 4E 0E DC +A4 3F FC 8A 03 4D 4F 56 84 12 00 92 00 40 14 92 +05 4D 4F 56 2E 42 84 12 00 92 40 40 00 00 03 41 +44 44 84 12 00 92 00 50 2E 92 05 41 44 44 2E 42 +84 12 00 92 40 50 3A 92 04 41 44 44 43 00 84 12 +00 92 00 60 48 92 06 41 44 44 43 2E 42 00 84 12 +00 92 40 60 F0 91 04 53 55 42 43 00 84 12 00 92 +00 70 66 92 06 53 55 42 43 2E 42 00 84 12 00 92 +40 70 74 92 03 53 55 42 84 12 00 92 00 80 84 92 +05 53 55 42 2E 42 84 12 00 92 40 80 DE 8A 03 43 +4D 50 84 12 00 92 00 90 9E 92 05 43 4D 50 2E 42 +84 12 00 92 40 90 CC 8A 04 44 41 44 44 00 84 12 +00 92 00 A0 B8 92 06 44 41 44 44 2E 42 00 84 12 +00 92 40 A0 AA 92 03 42 49 54 84 12 00 92 00 B0 +D6 92 05 42 49 54 2E 42 84 12 00 92 40 B0 E2 92 +03 42 49 43 84 12 00 92 00 C0 F0 92 05 42 49 43 +2E 42 84 12 00 92 40 C0 FC 92 03 42 49 53 84 12 +00 92 00 D0 0A 93 05 42 49 53 2E 42 84 12 00 92 +40 D0 00 00 03 58 4F 52 84 12 00 92 00 E0 24 93 +05 58 4F 52 2E 42 84 12 00 92 40 E0 56 92 03 41 +4E 44 84 12 00 92 00 F0 3E 93 05 41 4E 44 2E 42 +84 12 00 92 40 F0 42 87 FA 90 5C 93 0A 4C 3C F0 +70 00 8A 10 3A F0 0F 00 0C DA 4F 3F 90 92 03 52 +52 43 84 12 56 93 00 10 6E 93 05 52 52 43 2E 42 +84 12 56 93 40 10 7A 93 04 53 57 50 42 00 84 12 +56 93 80 10 88 93 03 52 52 41 84 12 56 93 00 11 +96 93 05 52 52 41 2E 42 84 12 56 93 40 11 A2 93 +03 53 58 54 84 12 56 93 80 11 00 00 04 50 55 53 +48 00 84 12 56 93 00 12 BC 93 06 50 55 53 48 2E +42 00 84 12 56 93 40 12 16 93 04 43 41 4C 4C 00 +84 12 56 93 80 12 1A 53 0E 4A 87 12 34 82 1E 84 +0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 4C 88 +42 87 74 84 06 94 92 53 C4 21 3E 40 2C 00 B0 12 +2A 80 80 84 AA 85 40 82 CE 88 BA 91 1E 94 0A 4E +3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A +01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F +2A 92 D1 2F 8A 10 5A 06 8F 3F B0 93 04 52 52 43 +4D 00 84 12 00 94 50 00 4C 94 04 52 52 41 4D 00 +84 12 00 94 50 01 5A 94 04 52 4C 41 4D 00 84 12 +00 94 50 02 68 94 04 52 52 55 4D 00 84 12 00 94 +50 03 CA 93 05 50 55 53 48 4D 84 12 00 94 00 15 +84 94 04 50 4F 50 4D 00 84 12 00 94 00 17 76 94 +03 53 3E 3D 85 12 00 38 A0 94 02 53 3C 00 85 12 +00 34 92 94 03 30 3E 3D 85 12 00 30 B4 94 02 30 +3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 00 2C +C8 94 03 55 3E 3D 85 12 00 28 BE 94 03 30 3C 3E +85 12 00 24 DC 94 02 30 3D 00 85 12 00 20 00 00 +02 49 46 00 1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 +0E 4A 30 4D D2 94 04 54 48 45 4E 00 1A 42 C6 21 +08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 +63 2F 88 DA 00 00 30 4D C6 92 04 45 4C 53 45 00 +1A 42 C6 21 BA 40 00 3C 00 00 A2 53 C6 21 2F 83 +8F 4A 00 00 E3 3F 06 95 05 55 4E 54 49 4C 3A 4F +08 4E 3E 4F 19 42 C6 21 2A 83 0A 89 0A 11 3A 90 +00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 +C6 21 30 4D 4A 93 05 41 47 41 49 4E 0A 4E 38 40 +00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 F4 94 +76 80 2A 80 AA 94 06 52 45 50 45 41 54 00 87 12 +7C 95 0C 95 2A 80 A8 95 3D 41 08 4E 3E 4F 2A 48 +B2 92 C4 21 CD 2F 98 42 C6 21 00 00 30 4D DA 93 +03 42 57 31 84 12 A6 95 00 00 C0 95 03 42 57 32 +84 12 A6 95 00 00 CC 95 03 42 57 33 84 12 A6 95 +00 00 E4 95 3D 41 1A 42 C6 21 28 4E B2 92 C4 21 +90 2B BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F +30 4D 00 00 03 46 57 31 84 12 E2 95 00 00 04 96 +03 46 57 32 84 12 E2 95 00 00 10 96 03 46 57 33 +84 12 E2 95 00 00 00 00 05 3F 47 4F 54 4F 3E 90 +00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 +00 08 87 12 C0 88 DA 86 2A 80 1C 96 04 47 4F 54 +4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F +@FFFE +9E 8E +q diff --git a/binaries/Log/log.txt b/binaries/Log/log.txt new file mode 100644 index 0000000..5444514 --- /dev/null +++ b/binaries/Log/log.txt @@ -0,0 +1,138 @@ +Tue Jun 11 13:46:45 2019: * -----/|-------------------------------------------------------------------- * +Tue Jun 11 13:46:45 2019: * / |__ * +Tue Jun 11 13:46:45 2019: * /_ / MSP Flasher v1.3.18 * +Tue Jun 11 13:46:45 2019: * | / * +Tue Jun 11 13:46:45 2019: * -----|/-------------------------------------------------------------------- * +Tue Jun 11 13:46:45 2019: * +Tue Jun 11 13:46:45 2019: * Evaluating triggers...done +Tue Jun 11 13:46:45 2019: * Checking for available FET debuggers: +Tue Jun 11 13:46:45 2019: * Found USB FET @ COM4 <- Selected +Tue Jun 11 13:46:45 2019: * Initializing interface @ COM4...done +Tue Jun 11 13:46:46 2019: * Checking firmware compatibility: +Tue Jun 11 13:46:46 2019: * FET firmware is up to date. +Tue Jun 11 13:46:46 2019: * Reading FW version... +Tue Jun 11 13:46:46 2019: * Debugger does not support target voltages other than 3000 mV! +Tue Jun 11 13:46:46 2019: * Setting VCC to 3000 mV...done +Tue Jun 11 13:46:48 2019: * Accessing device...done +Tue Jun 11 13:46:48 2019: * Reading device information...done +Tue Jun 11 13:46:48 2019: * Loading file into device...done +Tue Jun 11 13:46:50 2019: * Verifying memory (B:\binaries\MSP_EXP430FR5994_16MHz.txt)...done +Tue Jun 11 13:46:52 2019: * +Tue Jun 11 13:46:52 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:46:52 2019: * Arguments : -s -m SBW2 -n MSP430FR5994 -v -w B:\binaries\MSP_EXP430FR5994_16MHz.txt -z [RESET,VCC] +Tue Jun 11 13:46:52 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:46:52 2019: * Driver : loaded +Tue Jun 11 13:46:52 2019: * Dll Version : 31300001 +Tue Jun 11 13:46:52 2019: * FwVersion : 31200000 +Tue Jun 11 13:46:52 2019: * Interface : TIUSB +Tue Jun 11 13:46:52 2019: * HwVersion : E 4.0 +Tue Jun 11 13:46:52 2019: * JTAG Mode : AUTO +Tue Jun 11 13:46:52 2019: * Device : MSP430FR5994 +Tue Jun 11 13:46:52 2019: * EEM : Level 5, ClockCntrl 2 +Tue Jun 11 13:46:52 2019: * Erase Mode : ERASE_ALL +Tue Jun 11 13:46:52 2019: * Prog.File : B:\binaries\MSP_EXP430FR5994_16MHz.txt +Tue Jun 11 13:46:52 2019: * Verified : TRUE +Tue Jun 11 13:46:52 2019: * BSL Unlock : FALSE +Tue Jun 11 13:46:52 2019: * InfoA Access: FALSE +Tue Jun 11 13:46:52 2019: * VCC ON : 3000 mV +Tue Jun 11 13:46:52 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:46:52 2019: * Resetting device (RST/NMI)...done +Tue Jun 11 13:46:53 2019: * Starting target code execution...done +Tue Jun 11 13:46:53 2019: * Disconnecting from device...done +Tue Jun 11 13:46:53 2019: * +Tue Jun 11 13:46:53 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:46:53 2019: * Driver : closed (No error) +Tue Jun 11 13:46:53 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:46:53 2019: */ +Tue Jun 11 13:48:24 2019: * -----/|-------------------------------------------------------------------- * +Tue Jun 11 13:48:24 2019: * / |__ * +Tue Jun 11 13:48:24 2019: * /_ / MSP Flasher v1.3.18 * +Tue Jun 11 13:48:24 2019: * | / * +Tue Jun 11 13:48:24 2019: * -----|/-------------------------------------------------------------------- * +Tue Jun 11 13:48:24 2019: * +Tue Jun 11 13:48:24 2019: * Evaluating triggers...done +Tue Jun 11 13:48:24 2019: * Checking for available FET debuggers: +Tue Jun 11 13:48:25 2019: * Found USB FET @ COM4 <- Selected +Tue Jun 11 13:48:25 2019: * Initializing interface @ COM4...done +Tue Jun 11 13:48:25 2019: * Checking firmware compatibility: +Tue Jun 11 13:48:25 2019: * FET firmware is up to date. +Tue Jun 11 13:48:25 2019: * Reading FW version... +Tue Jun 11 13:48:25 2019: * Debugger does not support target voltages other than 3000 mV! +Tue Jun 11 13:48:25 2019: * Setting VCC to 3000 mV...done +Tue Jun 11 13:48:27 2019: * Accessing device...done +Tue Jun 11 13:48:27 2019: * Reading device information...done +Tue Jun 11 13:48:27 2019: * Loading file into device...done +Tue Jun 11 13:48:29 2019: * Verifying memory (B:\binaries\MSP_EXP430FR5994_16MHz.txt)...done +Tue Jun 11 13:48:31 2019: * +Tue Jun 11 13:48:31 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:48:31 2019: * Arguments : -s -m SBW2 -n MSP430FR5994 -v -w B:\binaries\MSP_EXP430FR5994_16MHz.txt -z [RESET,VCC] +Tue Jun 11 13:48:31 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:48:31 2019: * Driver : loaded +Tue Jun 11 13:48:31 2019: * Dll Version : 31300001 +Tue Jun 11 13:48:31 2019: * FwVersion : 31200000 +Tue Jun 11 13:48:31 2019: * Interface : TIUSB +Tue Jun 11 13:48:31 2019: * HwVersion : E 4.0 +Tue Jun 11 13:48:31 2019: * JTAG Mode : AUTO +Tue Jun 11 13:48:31 2019: * Device : MSP430FR5994 +Tue Jun 11 13:48:31 2019: * EEM : Level 5, ClockCntrl 2 +Tue Jun 11 13:48:31 2019: * Erase Mode : ERASE_ALL +Tue Jun 11 13:48:31 2019: * Prog.File : B:\binaries\MSP_EXP430FR5994_16MHz.txt +Tue Jun 11 13:48:31 2019: * Verified : TRUE +Tue Jun 11 13:48:31 2019: * BSL Unlock : FALSE +Tue Jun 11 13:48:31 2019: * InfoA Access: FALSE +Tue Jun 11 13:48:31 2019: * VCC ON : 3000 mV +Tue Jun 11 13:48:31 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:48:31 2019: * Resetting device (RST/NMI)...done +Tue Jun 11 13:48:32 2019: * Starting target code execution...done +Tue Jun 11 13:48:32 2019: * Disconnecting from device...done +Tue Jun 11 13:48:32 2019: * +Tue Jun 11 13:48:32 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:48:32 2019: * Driver : closed (No error) +Tue Jun 11 13:48:32 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 13:48:32 2019: */ +Tue Jun 11 14:01:29 2019: * -----/|-------------------------------------------------------------------- * +Tue Jun 11 14:01:29 2019: * / |__ * +Tue Jun 11 14:01:29 2019: * /_ / MSP Flasher v1.3.18 * +Tue Jun 11 14:01:29 2019: * | / * +Tue Jun 11 14:01:29 2019: * -----|/-------------------------------------------------------------------- * +Tue Jun 11 14:01:29 2019: * +Tue Jun 11 14:01:29 2019: * Evaluating triggers...done +Tue Jun 11 14:01:29 2019: * Checking for available FET debuggers: +Tue Jun 11 14:01:30 2019: * Found USB FET @ COM4 <- Selected +Tue Jun 11 14:01:30 2019: * Initializing interface @ COM4...done +Tue Jun 11 14:01:30 2019: * Checking firmware compatibility: +Tue Jun 11 14:01:30 2019: * FET firmware is up to date. +Tue Jun 11 14:01:30 2019: * Reading FW version... +Tue Jun 11 14:01:30 2019: * Debugger does not support target voltages other than 3000 mV! +Tue Jun 11 14:01:30 2019: * Setting VCC to 3000 mV...done +Tue Jun 11 14:01:30 2019: * Accessing device...done +Tue Jun 11 14:01:31 2019: * Reading device information...done +Tue Jun 11 14:01:31 2019: * Loading file into device...done +Tue Jun 11 14:01:33 2019: * Verifying memory (B:\binaries\MSP_EXP430FR5994_16MHz.txt)...done +Tue Jun 11 14:01:34 2019: * +Tue Jun 11 14:01:34 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 14:01:34 2019: * Arguments : -s -m SBW2 -n MSP430FR5994 -v -w B:\binaries\MSP_EXP430FR5994_16MHz.txt -z [RESET,VCC] +Tue Jun 11 14:01:34 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 14:01:34 2019: * Driver : loaded +Tue Jun 11 14:01:34 2019: * Dll Version : 31300001 +Tue Jun 11 14:01:34 2019: * FwVersion : 31200000 +Tue Jun 11 14:01:34 2019: * Interface : TIUSB +Tue Jun 11 14:01:34 2019: * HwVersion : E 4.0 +Tue Jun 11 14:01:34 2019: * JTAG Mode : AUTO +Tue Jun 11 14:01:34 2019: * Device : MSP430FR5994 +Tue Jun 11 14:01:34 2019: * EEM : Level 5, ClockCntrl 2 +Tue Jun 11 14:01:34 2019: * Erase Mode : ERASE_ALL +Tue Jun 11 14:01:34 2019: * Prog.File : B:\binaries\MSP_EXP430FR5994_16MHz.txt +Tue Jun 11 14:01:34 2019: * Verified : TRUE +Tue Jun 11 14:01:34 2019: * BSL Unlock : FALSE +Tue Jun 11 14:01:34 2019: * InfoA Access: FALSE +Tue Jun 11 14:01:34 2019: * VCC ON : 3000 mV +Tue Jun 11 14:01:34 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 14:01:34 2019: * Resetting device (RST/NMI)...done +Tue Jun 11 14:01:35 2019: * Starting target code execution...done +Tue Jun 11 14:01:36 2019: * Disconnecting from device...done +Tue Jun 11 14:01:36 2019: * +Tue Jun 11 14:01:36 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 14:01:36 2019: * Driver : closed (No error) +Tue Jun 11 14:01:36 2019: * ---------------------------------------------------------------------------- +Tue Jun 11 14:01:36 2019: */ diff --git a/binaries/MSP_EXP430FR2355_16MHz.txt b/binaries/MSP_EXP430FR2355_16MHz.txt index 0253642..5da19d6 100644 --- a/binaries/MSP_EXP430FR2355_16MHz.txt +++ b/binaries/MSP_EXP430FR2355_16MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 A1 F7 80 3E 05 00 18 00 D2 98 8A 8E -2C 01 7B B0 FC 83 0E 84 +10 00 08 00 A1 F7 80 3E 05 00 18 00 68 96 D0 8C +2D 01 6B B0 B6 82 C8 82 @8000 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 80 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 80 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 80 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 80 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 80 02 3E 52 00 -0E 12 3E 4F 30 4D 96 80 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 80 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 80 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 80 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 81 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 80 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 81 02 31 2D 00 -1E 83 30 4D D8 80 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 81 -02 30 3D 00 1E 83 0E 7E 30 4D 60 81 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 81 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 80 01 3E 3E 8F F4 3B EB 37 0E 81 02 42 4C 00 -85 12 20 00 AC 81 04 42 41 53 45 00 85 12 DC 21 -C8 80 05 53 54 41 54 45 85 12 BE 21 96 81 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 81 06 55 4D 2F -4D 4F 44 00 30 12 62 80 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 80 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 81 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 81 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 82 -02 23 53 00 87 12 32 82 6A 82 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 82 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 81 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 81 -02 44 2E 00 87 12 D2 81 44 80 B0 80 4C 81 64 82 -BC 80 A2 82 7E 82 14 85 DC 84 2A 80 DC 81 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 80 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 82 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 80 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A 82 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 82 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 82 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 81 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 83 03 4B 45 59 30 40 A0 83 -18 42 8C 05 2F 83 8F 4E 00 00 B0 12 FC 83 92 B3 -9C 05 FD 27 1E 42 8C 05 B0 12 0E 84 30 4D 00 83 -06 41 43 43 45 50 54 00 3C 40 6A 84 3B 40 34 84 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E 84 92 B3 9C 05 05 24 18 42 8C 05 38 90 -0A 00 04 20 21 53 39 40 22 84 4D 15 A2 B3 9C 05 -FD 27 B2 40 11 00 8E 05 D2 C3 03 02 30 41 B2 40 -13 00 8E 05 D2 D3 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 84 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 8C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 9C 05 FD 27 82 48 8E 05 30 4D 60 84 -2D 83 92 B3 9C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 82 04 45 4D 49 54 00 30 40 8C 84 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 84 04 45 43 48 -4F 00 B2 40 82 48 58 84 82 43 DE 21 30 4D E0 82 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 84 92 43 -DE 21 30 4D 9C 82 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 84 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE 84 EF 3F 00 85 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 83 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A 85 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C 85 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 83 02 43 -52 00 30 40 46 85 87 12 52 85 02 0D 0A 00 14 85 -2A 80 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA 84 82 53 22 00 82 43 B4 21 -87 12 34 80 52 85 C8 87 34 80 22 00 B6 85 80 85 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 84 82 2E -22 00 87 12 6C 85 34 80 14 85 C8 87 2A 80 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 80 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 80 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 80 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 80 02 3E 52 00 0E 12 3E 4F 30 4D 70 80 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 80 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 80 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 80 +01 21 BE 4F 00 00 3E 4F 30 4D CC 80 02 30 3D 00 +1E 83 0E 7E 30 4D FC 80 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 81 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 80 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 81 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 81 02 23 53 00 87 12 88 81 C0 81 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 81 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 80 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 81 34 80 86 80 D4 80 BA 81 +92 80 F8 81 D4 81 D6 83 42 87 82 83 2A 80 22 81 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 81 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 82 18 42 8C 05 2F 83 8F 4E +00 00 B0 12 B6 82 92 B3 9C 05 FD 27 1E 42 8C 05 +B0 12 C8 82 30 4D A2 B3 9C 05 FD 27 B2 40 11 00 +8E 05 D2 C3 03 02 30 41 B2 40 13 00 8E 05 D2 D3 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 82 +B0 12 B6 82 12 D2 0A 18 F9 3F F0 80 06 41 43 43 +45 50 54 00 3C 40 64 83 3B 40 2E 83 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 83 +92 B3 9C 05 05 24 18 42 8C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 8C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 9C 05 +FD 27 82 48 8E 05 30 4D 5A 83 2D 83 92 B3 9C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 80 04 45 4D 49 +54 00 30 40 86 83 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C 83 04 45 43 48 4F 00 B2 40 82 48 +52 83 82 43 DE 21 30 4D 32 82 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 83 92 43 DE 21 30 4D 20 82 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 83 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 83 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 81 +02 43 52 00 30 40 08 84 87 12 1E 84 02 0D 0A 00 +D6 83 2A 80 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 81 82 53 22 00 82 43 B4 21 87 12 14 84 +1E 84 B0 86 14 84 22 00 80 84 4C 84 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA 83 82 2E 22 00 87 12 38 84 14 84 D6 83 +B0 86 2A 80 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,302 +86,281 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E 80 34 40 00 80 30 4D A2 81 07 3E +00 00 35 40 0E 80 34 40 00 80 30 4D 82 80 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 87 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 87 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 81 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC 84 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 81 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 87 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 80 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E 85 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A 88 B0 81 -B6 85 44 88 3D 40 4C 88 E2 22 5D 3E 4E 88 0A 4E -3E 4F 3D 40 64 88 39 27 3D 40 3E 88 1A E2 BE 21 -B3 27 AD 23 66 88 3E 4F 3D 40 3E 88 BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 8B -CD 3F B6 87 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A 80 3A 88 -A2 88 B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C 81 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 85 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 85 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 81 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 82 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 80 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC 82 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 83 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 86 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 84 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 84 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 87 42 87 80 84 50 87 +3D 40 58 87 CC 22 82 3E 5A 87 0A 4E 3E 4F 3D 40 +70 87 23 27 3D 40 4A 87 1A E2 BE 21 A1 27 B5 23 +72 87 3E 4F 3D 40 4A 87 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 8A CB 3F D2 86 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 80 46 87 AE 87 B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 81 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A 80 -42 85 92 84 DC 84 3A 88 DE 80 70 81 52 85 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E 89 34 80 -30 FF F2 82 8A 81 52 85 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E 89 24 83 D0 88 C0 83 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C 89 86 41 42 4F 52 54 -22 00 87 12 6C 85 34 80 2E 89 C8 87 2A 80 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 90 B0 12 -FC 83 92 C3 9C 05 38 40 A0 AA 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 9C 05 F2 23 87 12 -6A 90 34 80 DE 21 F2 80 B2 84 52 85 04 1B 5B 37 -6D 00 14 85 54 80 28 83 8A 89 42 85 52 85 05 6C -69 6E 65 3A 14 85 40 81 D2 82 14 85 52 85 04 1B -5B 30 6D 00 14 85 12 89 00 00 83 5B 27 5D 87 12 -B0 89 34 80 34 80 C8 87 C8 87 2A 80 08 86 01 27 -87 12 B0 81 B6 85 0E 86 28 83 BE 89 2A 80 6E 88 -CE 81 81 5C 92 42 C0 21 C4 21 30 4D 9A 89 81 5B -82 43 BE 21 30 4D C2 89 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 83 82 49 53 00 87 12 -C8 81 F2 80 28 83 02 8A 9E 89 34 80 E0 89 C8 87 -2A 80 B0 89 E0 89 2A 80 EA 89 09 49 4D 4D 45 44 +04 84 8C 83 42 87 82 83 46 87 A4 80 0C 81 1E 84 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 88 +14 84 30 FF A0 86 26 81 1E 84 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 88 3C 82 E0 87 C2 86 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E 88 86 41 42 4F +52 54 22 00 87 12 38 84 14 84 40 88 B0 86 2A 80 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 8D +B0 12 B6 82 92 C3 9C 05 38 40 A0 AA 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 9C 05 F3 23 87 12 +42 8D 14 84 DE 21 EA 80 AC 83 1E 84 04 1B 5B 37 +6D 00 D6 83 58 80 40 82 9A 88 04 84 1E 84 05 6C +69 6E 65 3A D6 83 D0 80 24 82 D6 83 1E 84 04 1B +5B 30 6D 00 D6 83 24 88 00 00 83 5B 27 5D 87 12 +C0 88 14 84 14 84 B0 86 B0 86 2A 80 E8 84 01 27 +87 12 42 87 80 84 EE 84 40 82 CE 88 2A 80 7A 87 +32 81 81 5C 92 42 C0 21 C4 21 30 4D AA 88 81 5B +82 43 BE 21 30 4D D2 88 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 86 82 49 53 00 87 12 +BE 87 EA 80 40 82 12 89 AE 88 14 84 F0 88 B0 86 +2A 80 C0 88 F0 88 2A 80 FA 88 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 85 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 88 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 81 B6 85 0E 86 54 80 -28 83 BE 89 70 81 28 83 66 8A 34 80 34 80 C8 87 -C8 87 34 80 C8 87 C8 87 2A 80 CE 89 81 3B 82 93 -BE 21 A8 27 87 12 34 80 2A 80 C8 87 04 8B D0 89 -2A 80 6C 8A 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 8A BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 8A 01 3A 30 12 A4 8A -87 12 92 85 B0 81 B6 85 CA 8A 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 8A 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 85 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A 89 B0 85 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 8A BA 40 86 12 FC FF E4 3F 16 88 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 8A BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C 8B 06 43 52 45 41 54 -45 00 B0 12 C0 8A BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 88 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 8B 05 44 -45 46 45 52 30 12 12 8B 8B 3F 6E 86 05 3E 42 4F -44 59 2E 52 30 4D 6A 8B 04 43 4F 44 45 00 B0 12 -C0 8A 2A 82 82 4A C6 21 87 12 B2 8A 94 8E 66 8E -2A 80 B8 8B 07 43 4F 44 45 4E 4E 4D 87 12 8C 8A -D0 89 C2 8B 2A 80 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE 8E 04 8B 2A 80 1A 89 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A 8E DA 21 D9 3F E8 8B 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE 8E 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A 80 02 00 A2 52 C6 21 ED 3F 0A 8A 85 48 49 32 -4C 4F 87 12 F2 82 8C 8C C8 87 D0 89 94 8E 66 8E -2A 80 5C 8C 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 83 00 00 2E 53 30 4D -9E 8B 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 83 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E 85 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 8B 85 42 45 47 49 4E 30 40 F2 82 B2 8C -85 55 4E 54 49 4C 39 40 28 83 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA 8B -85 41 47 41 49 4E 39 40 24 83 EF 3F 34 8B 85 57 -48 49 4C 45 87 12 78 8C 78 80 2A 80 22 8A 86 52 -45 50 45 41 54 00 87 12 F6 8C B8 8C 2A 80 92 8C -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C 83 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA 87 84 4C 4F 4F 50 00 39 40 -5E 83 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 83 85 2B 4C 4F -4F 50 39 40 4C 83 E5 3F 48 8D 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E 83 00 00 BA 40 24 83 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A 8D 04 4D 4F 56 45 00 0A 4E +C4 87 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 87 +80 84 EE 84 58 80 40 82 CE 88 0C 81 40 82 5C 89 +14 84 14 84 B0 86 B0 86 14 84 B0 86 B0 86 2A 80 +DE 88 81 3B 82 93 BE 21 B5 27 87 12 14 84 2A 80 +B0 86 FA 89 E0 88 2A 80 62 89 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 89 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A 89 01 3A 30 12 A0 89 92 B3 C6 21 A2 63 C6 21 +87 12 42 87 80 84 C8 89 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 84 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 88 90 87 05 44 45 46 45 52 +B0 12 B8 89 BA 40 30 40 FC FF BA 40 AE 89 FE FF +E3 3F 1E 87 06 43 52 45 41 54 45 00 B0 12 B8 89 +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 8A 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 85 05 3E 42 4F 44 59 2E 52 +30 4D 44 8A 04 43 4F 44 45 00 B0 12 B8 89 A2 82 +C6 21 87 12 D2 8C AC 8C 2A 80 84 8A 07 43 4F 44 +45 4E 4E 4D B0 12 86 89 F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 8C FA 89 2A 80 2C 88 03 41 +53 4D B2 40 B0 8C DA 21 E0 3F AC 8A 06 45 4E 44 +41 53 4D 00 87 12 B4 8A F4 8C 2A 80 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 8C 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A 80 +02 00 A2 52 C6 21 ED 3F 1A 89 85 48 49 32 4C 4F +87 12 A0 86 4A 8B B0 86 E0 88 D2 8C AC 8C 2A 80 +1A 8B 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 82 00 00 2E 53 30 4D 5E 8A +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C 82 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 83 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C 8A 85 42 45 47 49 4E 30 40 A0 86 70 8B 85 55 +4E 54 49 4C 39 40 40 82 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 8A 85 41 +47 41 49 4E 39 40 3C 82 EF 3F 7A 84 85 57 48 49 +4C 45 87 12 36 8B 76 80 2A 80 34 84 86 52 45 50 +45 41 54 00 87 12 B4 8B 76 8B 2A 80 50 8B 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 82 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 86 84 4C 4F 4F 50 00 39 40 76 82 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 82 85 2B 4C 4F 4F 50 +39 40 64 82 E5 3F 06 8C 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE 8C -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 8B -34 80 10 00 34 80 00 00 3C 83 34 80 00 00 C8 87 -5E 83 0A 8E F2 82 34 80 C8 21 44 80 F2 80 C8 87 -FA 80 8A 8B 34 80 CA 21 FA 80 2A 80 AE 89 05 46 -4F 52 54 48 84 12 24 8E 8E 8E C2 91 CC 8E 2E 8E -74 8C 7C 8D F8 8F BE 8E 8E 90 A8 90 D0 8C 34 91 -00 00 CC 8F D8 89 AC 8B 00 00 F0 8C 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 8E BC 97 24 98 70 97 -8E 98 36 97 B2 98 62 94 00 00 2C 97 DC 97 8E 97 -CC 97 72 95 00 00 00 00 C0 98 58 8E 5C 8E 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C 8A 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E 85 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 8D 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 8C 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA 8A 86 5B 54 48 45 4E 5D 00 30 4D 14 8F -86 5B 45 4C 53 45 5D 00 87 12 34 80 00 00 36 81 -B0 81 B6 85 1C 88 44 80 28 83 8E 8F 8A 80 8A 80 -52 85 06 5B 54 48 45 4E 5D 00 EA 8E 32 83 5C 8F -36 85 40 81 54 80 32 83 30 8F 2A 80 8A 80 8A 80 -52 85 06 5B 45 4C 53 45 5D 00 EA 8E 32 83 7C 8F -36 85 40 81 54 80 32 83 2E 8F 2A 80 52 85 04 5B -49 46 5D 00 EA 8E 32 83 30 8F 24 83 2E 8F 36 85 -52 85 05 0D 0A 6B 6F 20 14 85 92 84 2A 88 24 83 -30 8F 20 8F 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 8F 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 81 B6 85 0E 86 6C 80 2A 80 B4 8F 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 81 B6 85 0E 86 -6C 80 64 81 2A 80 E8 8F 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 8D 06 4D 41 52 4B 45 52 00 -B0 12 C0 8A BA 40 84 12 FC FF BA 40 E6 8F FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A 8B 34 8E C4 8E D8 8E 2C 90 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 8E -09 50 57 52 5F 53 54 41 54 45 84 12 24 90 8A 8E -D2 98 0E 8D 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E 90 92 42 0C 18 70 90 EF 3F 60 90 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E 90 92 42 -C6 21 70 90 30 4D 74 90 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 8D 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 84 24 84 B2 40 3E 91 3C 91 -B2 40 8A 8E 0E 18 B2 40 D2 98 0C 18 30 12 7E 90 -B2 40 8C 84 8A 84 B2 40 46 85 44 85 B2 40 A0 83 -9E 83 B2 40 18 00 0A 18 37 40 1A 80 36 40 BC 80 -35 40 0E 80 34 40 00 80 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 90 04 57 41 52 4D 00 30 40 3E 91 3D 40 -72 91 92 C3 30 01 1E 42 08 18 0E 93 11 24 F2 B2 -21 02 02 20 3E E3 1E 53 F2 D0 0C 00 2B 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 85 06 0D 1B 5B 37 6D 23 00 14 85 E2 82 -52 85 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 85 34 80 80 FF F2 82 28 81 D2 82 52 85 -0B 62 79 74 65 73 20 66 72 65 65 20 24 83 8A 89 -E2 8E 04 43 4F 4C 44 00 92 B3 8A 05 FD 23 B2 40 -04 A5 20 01 B2 40 88 5A CC 01 B2 43 06 02 92 43 -04 02 B2 40 FE FF 02 02 D2 D3 05 02 F2 43 22 02 -F2 D3 26 02 F2 D0 BF 00 47 02 F2 40 BF 00 43 02 -F2 40 40 00 45 02 F2 40 A5 00 A1 01 F2 40 10 00 -A0 01 D2 43 A1 01 B2 40 00 A5 60 01 B2 40 FF 1E +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 84 +CA 21 F2 80 2A 80 84 12 7E 8C AE 8B 4E 8F DE 8B +BE 88 32 8B 3A 8C 62 90 64 84 66 8D 80 8D 8E 8B +00 8E 00 00 34 90 E8 88 78 8A 00 00 84 12 7E 8C +80 95 E2 95 34 95 56 96 FA 94 00 00 2A 92 00 00 +F0 94 A0 95 52 95 90 95 3A 93 00 00 00 00 32 96 +AA 8C 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 8C EE 8C +F4 8C 04 8D 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 89 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 8C D0 8C 68 96 CC 8B 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 8D 92 42 0C 18 +48 8D EF 3F 38 8D 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 8D 92 42 C6 21 48 8D 30 4D 4C 8D +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC 8B 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 82 +DE 82 B2 40 0A 8E 08 8E B2 40 D0 8C 0E 18 B2 40 +68 96 0C 18 30 12 56 8D B2 40 86 83 84 83 B2 40 +08 84 06 84 B2 40 98 82 96 82 B2 40 18 00 0A 18 +37 40 1A 80 36 40 92 80 35 40 0E 80 34 40 00 80 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A 8D +04 57 41 52 4D 00 30 40 0A 8E 3D 40 3E 8E 92 C3 +30 01 1E 42 08 18 0E 93 11 24 F2 B2 21 02 02 20 +3E E3 1E 53 F2 D0 0C 00 2B 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E 84 +06 0D 1B 5B 37 6D 23 00 D6 83 34 82 1E 84 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 83 14 84 30 FF A0 86 +B8 80 24 82 1E 84 0A 62 79 74 65 73 20 66 72 65 +65 00 3C 82 9A 88 82 8B 04 43 4F 4C 44 00 92 B3 +8A 05 FD 23 B2 40 04 A5 20 01 3E 8E B2 40 88 5A +CC 01 B2 43 06 02 B2 40 FE FF 02 02 D2 D3 05 02 +F2 D3 26 02 F2 43 22 02 F2 D3 47 02 F2 40 BF 00 +43 02 F2 40 A5 00 A1 01 F2 40 10 00 A0 01 D2 43 +A1 01 B2 40 00 A5 60 01 82 43 88 01 B2 40 FF 1E 80 01 B2 40 BA 00 82 01 B2 40 E8 01 84 01 39 40 -00 01 82 43 88 01 92 D2 5E 01 08 18 38 40 59 14 -18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 89 43 -00 20 FC 23 39 40 32 00 29 83 B9 40 D4 91 CE FF -FB 23 B2 40 2C 84 E2 FF B2 40 81 00 80 05 92 42 -02 18 86 05 92 42 04 18 88 05 92 C3 80 05 92 D3 -9A 05 3F 40 80 20 31 40 E0 20 30 12 3A 91 39 3F -38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 09 9A -03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 21 -30 4D 1C 15 B0 12 2A 80 B6 85 0E 86 32 83 C8 92 -CA 86 28 83 BE 89 EA 92 CA 92 29 4E 39 90 86 12 -02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E 02 00 -04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 3E 40 -28 00 B0 12 B2 92 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 C4 21 -B0 12 2A 80 B6 85 CA 86 28 83 28 93 1E 93 21 53 -3E 90 10 00 83 2D E1 2B 2A 93 B2 41 C4 21 DD 3F -87 12 B0 81 90 92 38 93 0C 43 1B 42 C6 21 A2 53 -C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 C4 21 -B0 12 B2 92 0E 93 03 20 3C 40 00 03 21 3C 1E 93 -03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 20 03 -17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 03 20 -3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 08 3C -3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 -3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 -92 53 C4 21 B0 12 B2 92 ED 3F 7A 90 40 00 16 20 -3C 40 20 00 92 53 C4 21 B0 12 06 93 0C 20 3C 50 -10 00 3E 40 2B 00 B0 12 06 93 92 92 C0 21 C4 21 -02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 06 93 -FA 23 3C 50 10 00 B0 12 EE 92 EF 3F 0C 43 1B 42 -C6 21 A2 53 C6 21 87 12 B0 81 90 92 0E 94 FE 90 -26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F -B0 12 06 93 E1 23 3C 50 80 00 B0 12 EE 92 DC 3F -1C 84 04 52 45 54 49 00 87 12 34 80 00 13 C8 87 -2A 80 34 80 2C 00 30 93 06 94 4C 94 2E 4E 0E DC -09 4B A4 3F 3E 8C 03 4D 4F 56 84 12 42 94 00 40 -56 94 05 4D 4F 56 2E 42 84 12 42 94 40 40 00 00 -03 41 44 44 84 12 42 94 00 50 70 94 05 41 44 44 -2E 42 84 12 42 94 40 50 7C 94 04 41 44 44 43 00 -84 12 42 94 00 60 8A 94 06 41 44 44 43 2E 42 00 -84 12 42 94 40 60 32 94 04 53 55 42 43 00 84 12 -42 94 00 70 A8 94 06 53 55 42 43 2E 42 00 84 12 -42 94 40 70 B6 94 03 53 55 42 84 12 42 94 00 80 -C6 94 05 53 55 42 2E 42 84 12 42 94 40 80 20 8C -03 43 4D 50 84 12 42 94 00 90 E0 94 05 43 4D 50 -2E 42 84 12 42 94 40 90 0E 8C 04 44 41 44 44 00 -84 12 42 94 00 A0 FA 94 06 44 41 44 44 2E 42 00 -84 12 42 94 40 A0 EC 94 03 42 49 54 84 12 42 94 -00 B0 18 95 05 42 49 54 2E 42 84 12 42 94 40 B0 -24 95 03 42 49 43 84 12 42 94 00 C0 32 95 05 42 -49 43 2E 42 84 12 42 94 40 C0 3E 95 03 42 49 53 -84 12 42 94 00 D0 4C 95 05 42 49 53 2E 42 84 12 -42 94 40 D0 00 00 03 58 4F 52 84 12 42 94 00 E0 -66 95 05 58 4F 52 2E 42 84 12 42 94 40 E0 98 94 -03 41 4E 44 84 12 42 94 00 F0 80 95 05 41 4E 44 -2E 42 84 12 42 94 40 F0 B0 81 30 93 9E 95 0A 4C -3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F D2 94 -03 52 52 43 84 12 98 95 00 10 B0 95 05 52 52 43 -2E 42 84 12 98 95 40 10 BC 95 04 53 57 50 42 00 -84 12 98 95 80 10 CA 95 03 52 52 41 84 12 98 95 -00 11 D8 95 05 52 52 41 2E 42 84 12 98 95 40 11 -E4 95 03 53 58 54 84 12 98 95 80 11 00 00 04 50 -55 53 48 00 84 12 98 95 00 12 FE 95 06 50 55 53 -48 2E 42 00 84 12 98 95 40 12 58 95 04 43 41 4C -4C 00 84 12 98 95 80 12 1A 53 0E 4A 87 12 E2 82 -52 85 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 -3A 89 B0 81 90 92 48 96 92 53 C4 21 3E 40 2C 00 -B0 12 2A 80 B6 85 CA 86 28 83 BE 89 FC 93 60 96 -0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C -59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E -94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F F2 95 04 52 -52 43 4D 00 84 12 42 96 50 00 8E 96 04 52 52 41 -4D 00 84 12 42 96 50 01 9C 96 04 52 4C 41 4D 00 -84 12 42 96 50 02 AA 96 04 52 52 55 4D 00 84 12 -42 96 50 03 0C 96 05 50 55 53 48 4D 84 12 42 96 -00 15 C6 96 04 50 4F 50 4D 00 84 12 42 96 00 17 -85 12 00 3C B8 96 03 53 3E 3D 85 12 00 38 E6 96 -02 53 3C 00 85 12 00 34 D4 96 03 30 3E 3D 85 12 -00 30 FA 96 02 30 3C 00 85 12 00 30 00 00 02 55 -3C 00 85 12 00 2C 0E 97 03 55 3E 3D 85 12 00 28 -04 97 03 30 3C 3E 85 12 00 24 22 97 02 30 3D 00 -85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 8A 4E -00 00 A2 53 C6 21 0E 4A 30 4D 18 97 04 54 48 45 -4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 0A 89 -0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D 08 95 -04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C 00 00 -A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 4C 97 05 55 -4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 2A 83 -0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 08 DA -89 48 00 00 A2 53 C6 21 30 4D 8C 95 05 41 47 41 -49 4E 87 12 E0 96 94 97 2A 80 00 00 05 57 48 49 -4C 45 87 12 3A 97 78 80 2A 80 F0 96 06 52 45 50 -45 41 54 00 87 12 E0 96 94 97 52 97 2A 80 F0 97 -3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 00 00 -CA 23 98 42 C6 21 00 00 30 4D 1C 96 03 42 57 31 -84 12 EE 97 E0 21 0C 98 03 42 57 32 84 12 EE 97 -E2 21 18 98 03 42 57 33 84 12 EE 97 E4 21 30 98 -3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 00 00 -8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F -30 4D 00 00 03 46 57 31 84 12 2E 98 E6 21 54 98 -03 46 57 32 84 12 2E 98 E8 21 60 98 03 46 57 33 -84 12 2E 98 EA 21 3E 90 00 30 07 24 3E E0 00 04 -3E B0 00 10 02 24 3E E0 00 08 30 4D 6C 98 04 47 -4F 54 4F 00 87 12 E0 96 B0 89 BE 87 2A 80 00 00 -05 3F 47 4F 54 4F 87 12 76 98 B0 89 BE 87 2A 80 -00 00 03 4A 4D 50 87 12 B0 89 C2 97 2A 80 A0 98 -04 3F 4A 4D 50 00 87 12 76 98 B0 89 78 80 94 97 -2A 80 +00 01 92 D2 5E 01 08 18 38 40 59 14 18 83 FE 23 +19 83 FA 23 39 40 00 10 29 83 89 43 00 20 FC 23 +39 40 32 00 29 83 B9 40 9C 8E CE FF FB 23 B2 40 +26 83 E2 FF B2 40 81 00 80 05 92 42 02 18 86 05 +92 42 04 18 88 05 92 C3 80 05 92 D3 9A 05 3F 40 +80 20 31 40 E0 20 30 12 06 8E 47 3F 88 8E 07 43 +4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B +0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 +FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D B2 89 +86 5B 54 48 45 4E 5D 00 30 4D 80 8F 86 5B 45 4C +53 45 5D 00 87 12 14 84 00 00 C6 80 42 87 80 84 +24 87 34 80 40 82 F6 8F 44 80 1E 84 06 5B 54 48 +45 4E 5D 00 56 8F 4A 82 C6 8F F8 83 D0 80 58 80 +4A 82 9C 8F 2A 80 44 80 1E 84 06 5B 45 4C 53 45 +5D 00 56 8F 4A 82 E4 8F F8 83 D0 80 58 80 4A 82 +9A 8F 2A 80 1E 84 04 5B 49 46 5D 00 56 8F 4A 82 +9C 8F 3C 82 9A 8F F8 83 1E 84 05 0D 0A 6B 6F 20 +D6 83 8C 83 32 87 3C 82 9C 8F 8C 8F 84 5B 49 46 +5D 00 0E 93 3E 4F BE 27 30 4D 0C 90 89 5B 44 45 +46 49 4E 45 44 5D 87 12 42 87 80 84 EE 84 6A 80 +2A 80 1C 90 8B 5B 55 4E 44 45 46 49 4E 45 44 5D +87 12 42 87 80 84 EE 84 6A 80 00 81 2A 80 50 90 +3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F 30 40 56 8D +48 8C 06 4D 41 52 4B 45 52 00 B0 12 B8 89 BA 40 +84 12 FC FF BA 40 4E 90 FE FF 9A 42 C8 21 00 00 +28 83 8A 48 02 00 A2 52 C6 21 30 40 00 8A 1C 15 +B0 12 2A 80 80 84 EE 84 4A 82 A4 90 AA 85 40 82 +CE 88 BE 90 A6 90 39 4E 39 80 86 12 08 24 19 53 +02 20 2E 4E 04 3C 2E 53 19 53 01 24 2E 82 1B 17 +30 41 3E 40 28 00 B0 12 8E 90 19 42 C6 21 A2 53 +C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 +92 53 C4 21 B0 12 2A 80 80 84 AA 85 40 82 FC 90 +F2 90 21 53 3E 90 10 00 7D 2D E1 2B FE 90 B2 41 +C4 21 DD 3F 87 12 42 87 74 84 0C 91 0C 43 1B 42 +C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 27 20 +92 53 C4 21 B0 12 8E 90 3C 40 00 03 0E 93 1C 24 +3C 40 10 03 1E 93 18 24 3C 40 20 03 2E 93 14 24 +3C 40 20 02 2E 92 10 24 3C 40 30 02 3E 92 0C 24 +3C 40 30 03 3E 93 08 24 3C 40 30 00 19 42 C6 21 +A2 53 C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 +26 00 07 20 3C 40 10 02 92 53 C4 21 B0 12 8E 90 +ED 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 +B0 12 DA 90 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 +DA 90 92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 +0C 5E DA 3F B0 12 DA 90 FA 23 3C 50 10 00 B0 12 +C2 90 EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 +42 87 74 84 D6 91 FE 90 26 00 00 00 3E 40 20 00 +03 20 3C 50 82 00 C8 3F B0 12 DA 90 E1 23 3C 50 +80 00 B0 12 C2 90 DC 3F D6 82 04 52 45 54 49 00 +87 12 14 84 00 13 B0 86 2A 80 14 84 2C 00 04 91 +CE 91 14 92 09 4B 2E 4E 0E DC A4 3F FC 8A 03 4D +4F 56 84 12 0A 92 00 40 1E 92 05 4D 4F 56 2E 42 +84 12 0A 92 40 40 00 00 03 41 44 44 84 12 0A 92 +00 50 38 92 05 41 44 44 2E 42 84 12 0A 92 40 50 +44 92 04 41 44 44 43 00 84 12 0A 92 00 60 52 92 +06 41 44 44 43 2E 42 00 84 12 0A 92 40 60 FA 91 +04 53 55 42 43 00 84 12 0A 92 00 70 70 92 06 53 +55 42 43 2E 42 00 84 12 0A 92 40 70 7E 92 03 53 +55 42 84 12 0A 92 00 80 8E 92 05 53 55 42 2E 42 +84 12 0A 92 40 80 DE 8A 03 43 4D 50 84 12 0A 92 +00 90 A8 92 05 43 4D 50 2E 42 84 12 0A 92 40 90 +CC 8A 04 44 41 44 44 00 84 12 0A 92 00 A0 C2 92 +06 44 41 44 44 2E 42 00 84 12 0A 92 40 A0 B4 92 +03 42 49 54 84 12 0A 92 00 B0 E0 92 05 42 49 54 +2E 42 84 12 0A 92 40 B0 EC 92 03 42 49 43 84 12 +0A 92 00 C0 FA 92 05 42 49 43 2E 42 84 12 0A 92 +40 C0 06 93 03 42 49 53 84 12 0A 92 00 D0 14 93 +05 42 49 53 2E 42 84 12 0A 92 40 D0 00 00 03 58 +4F 52 84 12 0A 92 00 E0 2E 93 05 58 4F 52 2E 42 +84 12 0A 92 40 E0 60 92 03 41 4E 44 84 12 0A 92 +00 F0 48 93 05 41 4E 44 2E 42 84 12 0A 92 40 F0 +42 87 04 91 66 93 0A 4C 3C F0 70 00 8A 10 3A F0 +0F 00 0C DA 4F 3F 9A 92 03 52 52 43 84 12 60 93 +00 10 78 93 05 52 52 43 2E 42 84 12 60 93 40 10 +84 93 04 53 57 50 42 00 84 12 60 93 80 10 92 93 +03 52 52 41 84 12 60 93 00 11 A0 93 05 52 52 41 +2E 42 84 12 60 93 40 11 AC 93 03 53 58 54 84 12 +60 93 80 11 00 00 04 50 55 53 48 00 84 12 60 93 +00 12 C6 93 06 50 55 53 48 2E 42 00 84 12 60 93 +40 12 20 93 04 43 41 4C 4C 00 84 12 60 93 80 12 +1A 53 0E 4A 87 12 34 82 1E 84 0D 6F 75 74 20 6F +66 20 62 6F 75 6E 64 73 4C 88 42 87 74 84 10 94 +92 53 C4 21 3E 40 2C 00 B0 12 2A 80 80 84 AA 85 +40 82 CE 88 C4 91 28 94 0A 4E 3E 4F 1A 83 E0 33 +29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A +38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 +5A 06 8F 3F BA 93 04 52 52 43 4D 00 84 12 0A 94 +50 00 56 94 04 52 52 41 4D 00 84 12 0A 94 50 01 +64 94 04 52 4C 41 4D 00 84 12 0A 94 50 02 72 94 +04 52 52 55 4D 00 84 12 0A 94 50 03 D4 93 05 50 +55 53 48 4D 84 12 0A 94 00 15 8E 94 04 50 4F 50 +4D 00 84 12 0A 94 00 17 80 94 03 53 3E 3D 85 12 +00 38 AA 94 02 53 3C 00 85 12 00 34 9C 94 03 30 +3E 3D 85 12 00 30 BE 94 02 30 3C 00 85 12 00 30 +00 00 02 55 3C 00 85 12 00 2C D2 94 03 55 3E 3D +85 12 00 28 C8 94 03 30 3C 3E 85 12 00 24 E6 94 +02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 +C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D DC 94 +04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 +29 53 0A 89 0A 11 3A 90 00 02 63 2F 88 DA 00 00 +30 4D D0 92 04 45 4C 53 45 00 1A 42 C6 21 BA 40 +00 3C 00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F +10 95 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 +C6 21 2A 83 0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 +FF 03 08 DA 89 48 00 00 A2 53 C6 21 30 4D 54 93 +05 41 47 41 49 4E 0A 4E 38 40 00 3C E7 3F 00 00 +05 57 48 49 4C 45 87 12 FE 94 76 80 2A 80 B4 94 +06 52 45 50 45 41 54 00 87 12 86 95 16 95 2A 80 +B2 95 3D 41 08 4E 3E 4F 2A 48 B2 92 C4 21 CD 2F +98 42 C6 21 00 00 30 4D E4 93 03 42 57 31 84 12 +B0 95 00 00 CA 95 03 42 57 32 84 12 B0 95 00 00 +D6 95 03 42 57 33 84 12 B0 95 00 00 EE 95 3D 41 +1A 42 C6 21 28 4E B2 92 C4 21 90 2B BA 4F 00 00 +A2 53 C6 21 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 +57 31 84 12 EC 95 00 00 0E 96 03 46 57 32 84 12 +EC 95 00 00 1A 96 03 46 57 33 84 12 EC 95 00 00 +00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 +00 04 3E B0 00 10 02 24 3E E0 00 08 87 12 C0 88 +DA 86 2A 80 26 96 04 47 4F 54 4F 00 2F 83 8F 4E +00 00 3E 40 00 3C F2 3F @FFFE -D4 91 +9C 8E q diff --git a/binaries/MSP_EXP430FR2355_1MHz.txt b/binaries/MSP_EXP430FR2355_1MHz.txt index f3d334b..ae0f10f 100644 --- a/binaries/MSP_EXP430FR2355_1MHz.txt +++ b/binaries/MSP_EXP430FR2355_1MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 00 D6 E8 03 05 00 18 00 C2 98 8A 8E -2C 01 7B B0 FC 83 0E 84 +10 00 08 00 00 D6 E8 03 05 00 18 00 58 96 D0 8C +2D 01 6B B0 B6 82 C8 82 @8000 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 80 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 80 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 80 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 80 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 80 02 3E 52 00 -0E 12 3E 4F 30 4D 96 80 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 80 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 80 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 80 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 81 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 80 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 81 02 31 2D 00 -1E 83 30 4D D8 80 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 81 -02 30 3D 00 1E 83 0E 7E 30 4D 60 81 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 81 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 80 01 3E 3E 8F F4 3B EB 37 0E 81 02 42 4C 00 -85 12 20 00 AC 81 04 42 41 53 45 00 85 12 DC 21 -C8 80 05 53 54 41 54 45 85 12 BE 21 96 81 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 81 06 55 4D 2F -4D 4F 44 00 30 12 62 80 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 80 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 81 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 81 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 82 -02 23 53 00 87 12 32 82 6A 82 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 82 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 81 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 81 -02 44 2E 00 87 12 D2 81 44 80 B0 80 4C 81 64 82 -BC 80 A2 82 7E 82 14 85 DC 84 2A 80 DC 81 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 80 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 82 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 80 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A 82 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 82 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 82 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 81 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 83 03 4B 45 59 30 40 A0 83 -18 42 8C 05 2F 83 8F 4E 00 00 B0 12 FC 83 92 B3 -9C 05 FD 27 1E 42 8C 05 B0 12 0E 84 30 4D 00 83 -06 41 43 43 45 50 54 00 3C 40 6A 84 3B 40 34 84 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E 84 92 B3 9C 05 05 24 18 42 8C 05 38 90 -0A 00 04 20 21 53 39 40 22 84 4D 15 A2 B3 9C 05 -FD 27 B2 40 11 00 8E 05 D2 C3 03 02 30 41 B2 40 -13 00 8E 05 D2 D3 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 84 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 8C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 9C 05 FD 27 82 48 8E 05 30 4D 60 84 -2D 83 92 B3 9C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 82 04 45 4D 49 54 00 30 40 8C 84 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 84 04 45 43 48 -4F 00 B2 40 82 48 58 84 82 43 DE 21 30 4D E0 82 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 84 92 43 -DE 21 30 4D 9C 82 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 84 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE 84 EF 3F 00 85 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 83 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A 85 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C 85 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 83 02 43 -52 00 30 40 46 85 87 12 52 85 02 0D 0A 00 14 85 -2A 80 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA 84 82 53 22 00 82 43 B4 21 -87 12 34 80 52 85 C8 87 34 80 22 00 B6 85 80 85 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 84 82 2E -22 00 87 12 6C 85 34 80 14 85 C8 87 2A 80 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 80 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 80 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 80 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 80 02 3E 52 00 0E 12 3E 4F 30 4D 70 80 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 80 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 80 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 80 +01 21 BE 4F 00 00 3E 4F 30 4D CC 80 02 30 3D 00 +1E 83 0E 7E 30 4D FC 80 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 81 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 80 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 81 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 81 02 23 53 00 87 12 88 81 C0 81 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 81 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 80 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 81 34 80 86 80 D4 80 BA 81 +92 80 F8 81 D4 81 D6 83 42 87 82 83 2A 80 22 81 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 81 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 82 18 42 8C 05 2F 83 8F 4E +00 00 B0 12 B6 82 92 B3 9C 05 FD 27 1E 42 8C 05 +B0 12 C8 82 30 4D A2 B3 9C 05 FD 27 B2 40 11 00 +8E 05 D2 C3 03 02 30 41 B2 40 13 00 8E 05 D2 D3 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 82 +B0 12 B6 82 12 D2 0A 18 F9 3F F0 80 06 41 43 43 +45 50 54 00 3C 40 64 83 3B 40 2E 83 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 83 +92 B3 9C 05 05 24 18 42 8C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 8C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 9C 05 +FD 27 82 48 8E 05 30 4D 5A 83 2D 83 92 B3 9C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 80 04 45 4D 49 +54 00 30 40 86 83 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C 83 04 45 43 48 4F 00 B2 40 82 48 +52 83 82 43 DE 21 30 4D 32 82 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 83 92 43 DE 21 30 4D 20 82 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 83 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 83 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 81 +02 43 52 00 30 40 08 84 87 12 1E 84 02 0D 0A 00 +D6 83 2A 80 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 81 82 53 22 00 82 43 B4 21 87 12 14 84 +1E 84 B0 86 14 84 22 00 80 84 4C 84 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA 83 82 2E 22 00 87 12 38 84 14 84 D6 83 +B0 86 2A 80 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,301 +86,280 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E 80 34 40 00 80 30 4D A2 81 07 3E +00 00 35 40 0E 80 34 40 00 80 30 4D 82 80 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 87 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 87 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 81 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC 84 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 81 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 87 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 80 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E 85 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A 88 B0 81 -B6 85 44 88 3D 40 4C 88 E2 22 5D 3E 4E 88 0A 4E -3E 4F 3D 40 64 88 39 27 3D 40 3E 88 1A E2 BE 21 -B3 27 AD 23 66 88 3E 4F 3D 40 3E 88 BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 8B -CD 3F B6 87 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A 80 3A 88 -A2 88 B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C 81 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 85 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 85 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 81 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 82 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 80 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC 82 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 83 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 86 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 84 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 84 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 87 42 87 80 84 50 87 +3D 40 58 87 CC 22 82 3E 5A 87 0A 4E 3E 4F 3D 40 +70 87 23 27 3D 40 4A 87 1A E2 BE 21 A1 27 B5 23 +72 87 3E 4F 3D 40 4A 87 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 8A CB 3F D2 86 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 80 46 87 AE 87 B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 81 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A 80 -42 85 92 84 DC 84 3A 88 DE 80 70 81 52 85 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E 89 34 80 -30 FF F2 82 8A 81 52 85 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E 89 24 83 D0 88 C0 83 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C 89 86 41 42 4F 52 54 -22 00 87 12 6C 85 34 80 2E 89 C8 87 2A 80 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 90 B0 12 -FC 83 92 C3 9C 05 38 40 AA 0A 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 9C 05 F2 23 87 12 -6A 90 34 80 DE 21 F2 80 B2 84 52 85 04 1B 5B 37 -6D 00 14 85 54 80 28 83 8A 89 42 85 52 85 05 6C -69 6E 65 3A 14 85 40 81 D2 82 14 85 52 85 04 1B -5B 30 6D 00 14 85 12 89 00 00 83 5B 27 5D 87 12 -B0 89 34 80 34 80 C8 87 C8 87 2A 80 08 86 01 27 -87 12 B0 81 B6 85 0E 86 28 83 BE 89 2A 80 6E 88 -CE 81 81 5C 92 42 C0 21 C4 21 30 4D 9A 89 81 5B -82 43 BE 21 30 4D C2 89 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 83 82 49 53 00 87 12 -C8 81 F2 80 28 83 02 8A 9E 89 34 80 E0 89 C8 87 -2A 80 B0 89 E0 89 2A 80 EA 89 09 49 4D 4D 45 44 +04 84 8C 83 42 87 82 83 46 87 A4 80 0C 81 1E 84 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 88 +14 84 30 FF A0 86 26 81 1E 84 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 88 3C 82 E0 87 C2 86 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E 88 86 41 42 4F +52 54 22 00 87 12 38 84 14 84 40 88 B0 86 2A 80 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 8D +B0 12 B6 82 92 C3 9C 05 38 40 AA 0A 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 9C 05 F3 23 87 12 +42 8D 14 84 DE 21 EA 80 AC 83 1E 84 04 1B 5B 37 +6D 00 D6 83 58 80 40 82 9A 88 04 84 1E 84 05 6C +69 6E 65 3A D6 83 D0 80 24 82 D6 83 1E 84 04 1B +5B 30 6D 00 D6 83 24 88 00 00 83 5B 27 5D 87 12 +C0 88 14 84 14 84 B0 86 B0 86 2A 80 E8 84 01 27 +87 12 42 87 80 84 EE 84 40 82 CE 88 2A 80 7A 87 +32 81 81 5C 92 42 C0 21 C4 21 30 4D AA 88 81 5B +82 43 BE 21 30 4D D2 88 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 86 82 49 53 00 87 12 +BE 87 EA 80 40 82 12 89 AE 88 14 84 F0 88 B0 86 +2A 80 C0 88 F0 88 2A 80 FA 88 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 85 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 88 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 81 B6 85 0E 86 54 80 -28 83 BE 89 70 81 28 83 66 8A 34 80 34 80 C8 87 -C8 87 34 80 C8 87 C8 87 2A 80 CE 89 81 3B 82 93 -BE 21 A8 27 87 12 34 80 2A 80 C8 87 04 8B D0 89 -2A 80 6C 8A 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 8A BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 8A 01 3A 30 12 A4 8A -87 12 92 85 B0 81 B6 85 CA 8A 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 8A 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 85 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A 89 B0 85 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 8A BA 40 86 12 FC FF E4 3F 16 88 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 8A BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C 8B 06 43 52 45 41 54 -45 00 B0 12 C0 8A BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 88 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 8B 05 44 -45 46 45 52 30 12 12 8B 8B 3F 6E 86 05 3E 42 4F -44 59 2E 52 30 4D 6A 8B 04 43 4F 44 45 00 B0 12 -C0 8A 2A 82 82 4A C6 21 87 12 B2 8A 94 8E 66 8E -2A 80 B8 8B 07 43 4F 44 45 4E 4E 4D 87 12 8C 8A -D0 89 C2 8B 2A 80 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE 8E 04 8B 2A 80 1A 89 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A 8E DA 21 D9 3F E8 8B 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE 8E 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A 80 02 00 A2 52 C6 21 ED 3F 0A 8A 85 48 49 32 -4C 4F 87 12 F2 82 8C 8C C8 87 D0 89 94 8E 66 8E -2A 80 5C 8C 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 83 00 00 2E 53 30 4D -9E 8B 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 83 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E 85 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 8B 85 42 45 47 49 4E 30 40 F2 82 B2 8C -85 55 4E 54 49 4C 39 40 28 83 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA 8B -85 41 47 41 49 4E 39 40 24 83 EF 3F 34 8B 85 57 -48 49 4C 45 87 12 78 8C 78 80 2A 80 22 8A 86 52 -45 50 45 41 54 00 87 12 F6 8C B8 8C 2A 80 92 8C -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C 83 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA 87 84 4C 4F 4F 50 00 39 40 -5E 83 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 83 85 2B 4C 4F -4F 50 39 40 4C 83 E5 3F 48 8D 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E 83 00 00 BA 40 24 83 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A 8D 04 4D 4F 56 45 00 0A 4E +C4 87 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 87 +80 84 EE 84 58 80 40 82 CE 88 0C 81 40 82 5C 89 +14 84 14 84 B0 86 B0 86 14 84 B0 86 B0 86 2A 80 +DE 88 81 3B 82 93 BE 21 B5 27 87 12 14 84 2A 80 +B0 86 FA 89 E0 88 2A 80 62 89 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 89 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A 89 01 3A 30 12 A0 89 92 B3 C6 21 A2 63 C6 21 +87 12 42 87 80 84 C8 89 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 84 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 88 90 87 05 44 45 46 45 52 +B0 12 B8 89 BA 40 30 40 FC FF BA 40 AE 89 FE FF +E3 3F 1E 87 06 43 52 45 41 54 45 00 B0 12 B8 89 +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 8A 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 85 05 3E 42 4F 44 59 2E 52 +30 4D 44 8A 04 43 4F 44 45 00 B0 12 B8 89 A2 82 +C6 21 87 12 D2 8C AC 8C 2A 80 84 8A 07 43 4F 44 +45 4E 4E 4D B0 12 86 89 F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 8C FA 89 2A 80 2C 88 03 41 +53 4D B2 40 B0 8C DA 21 E0 3F AC 8A 06 45 4E 44 +41 53 4D 00 87 12 B4 8A F4 8C 2A 80 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 8C 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A 80 +02 00 A2 52 C6 21 ED 3F 1A 89 85 48 49 32 4C 4F +87 12 A0 86 4A 8B B0 86 E0 88 D2 8C AC 8C 2A 80 +1A 8B 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 82 00 00 2E 53 30 4D 5E 8A +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C 82 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 83 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C 8A 85 42 45 47 49 4E 30 40 A0 86 70 8B 85 55 +4E 54 49 4C 39 40 40 82 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 8A 85 41 +47 41 49 4E 39 40 3C 82 EF 3F 7A 84 85 57 48 49 +4C 45 87 12 36 8B 76 80 2A 80 34 84 86 52 45 50 +45 41 54 00 87 12 B4 8B 76 8B 2A 80 50 8B 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 82 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 86 84 4C 4F 4F 50 00 39 40 76 82 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 82 85 2B 4C 4F 4F 50 +39 40 64 82 E5 3F 06 8C 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE 8C -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 8B -34 80 10 00 34 80 00 00 3C 83 34 80 00 00 C8 87 -5E 83 0A 8E F2 82 34 80 C8 21 44 80 F2 80 C8 87 -FA 80 8A 8B 34 80 CA 21 FA 80 2A 80 AE 89 05 46 -4F 52 54 48 84 12 24 8E 8E 8E C2 91 CC 8E 2E 8E -74 8C 7C 8D F8 8F BE 8E 8E 90 A8 90 D0 8C 34 91 -00 00 CC 8F D8 89 AC 8B 00 00 F0 8C 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 8E AC 97 14 98 60 97 -7E 98 26 97 A2 98 52 94 00 00 1C 97 CC 97 7E 97 -BC 97 62 95 00 00 00 00 B0 98 58 8E 5C 8E 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C 8A 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E 85 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 8D 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 8C 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA 8A 86 5B 54 48 45 4E 5D 00 30 4D 14 8F -86 5B 45 4C 53 45 5D 00 87 12 34 80 00 00 36 81 -B0 81 B6 85 1C 88 44 80 28 83 8E 8F 8A 80 8A 80 -52 85 06 5B 54 48 45 4E 5D 00 EA 8E 32 83 5C 8F -36 85 40 81 54 80 32 83 30 8F 2A 80 8A 80 8A 80 -52 85 06 5B 45 4C 53 45 5D 00 EA 8E 32 83 7C 8F -36 85 40 81 54 80 32 83 2E 8F 2A 80 52 85 04 5B -49 46 5D 00 EA 8E 32 83 30 8F 24 83 2E 8F 36 85 -52 85 05 0D 0A 6B 6F 20 14 85 92 84 2A 88 24 83 -30 8F 20 8F 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 8F 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 81 B6 85 0E 86 6C 80 2A 80 B4 8F 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 81 B6 85 0E 86 -6C 80 64 81 2A 80 E8 8F 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 8D 06 4D 41 52 4B 45 52 00 -B0 12 C0 8A BA 40 84 12 FC FF BA 40 E6 8F FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A 8B 34 8E C4 8E D8 8E 2C 90 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 8E -09 50 57 52 5F 53 54 41 54 45 84 12 24 90 8A 8E -C2 98 0E 8D 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E 90 92 42 0C 18 70 90 EF 3F 60 90 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E 90 92 42 -C6 21 70 90 30 4D 74 90 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 8D 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 84 24 84 B2 40 3E 91 3C 91 -B2 40 8A 8E 0E 18 B2 40 C2 98 0C 18 30 12 7E 90 -B2 40 8C 84 8A 84 B2 40 46 85 44 85 B2 40 A0 83 -9E 83 B2 40 18 00 0A 18 37 40 1A 80 36 40 BC 80 -35 40 0E 80 34 40 00 80 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 90 04 57 41 52 4D 00 30 40 3E 91 3D 40 -72 91 92 C3 30 01 1E 42 08 18 0E 93 11 24 F2 B2 -21 02 02 20 3E E3 1E 53 F2 D0 0C 00 2B 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 85 06 0D 1B 5B 37 6D 23 00 14 85 E2 82 -52 85 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 85 34 80 80 FF F2 82 28 81 D2 82 52 85 -0B 62 79 74 65 73 20 66 72 65 65 20 24 83 8A 89 -E2 8E 04 43 4F 4C 44 00 92 B3 8A 05 FD 23 B2 40 -04 A5 20 01 B2 40 88 5A CC 01 B2 43 06 02 92 43 -04 02 B2 40 FE FF 02 02 D2 D3 05 02 F2 43 22 02 -F2 D3 26 02 F2 D0 BF 00 47 02 F2 40 BF 00 43 02 -F2 40 40 00 45 02 B2 40 00 A5 60 01 B2 40 FF 1E +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 84 +CA 21 F2 80 2A 80 84 12 7E 8C AE 8B 3E 8F DE 8B +BE 88 32 8B 3A 8C 52 90 64 84 66 8D 80 8D 8E 8B +00 8E 00 00 24 90 E8 88 78 8A 00 00 84 12 7E 8C +70 95 D2 95 24 95 46 96 EA 94 00 00 1A 92 00 00 +E0 94 90 95 42 95 80 95 2A 93 00 00 00 00 22 96 +AA 8C 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 8C EE 8C +F4 8C 04 8D 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 89 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 8C D0 8C 58 96 CC 8B 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 8D 92 42 0C 18 +48 8D EF 3F 38 8D 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 8D 92 42 C6 21 48 8D 30 4D 4C 8D +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC 8B 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 82 +DE 82 B2 40 0A 8E 08 8E B2 40 D0 8C 0E 18 B2 40 +58 96 0C 18 30 12 56 8D B2 40 86 83 84 83 B2 40 +08 84 06 84 B2 40 98 82 96 82 B2 40 18 00 0A 18 +37 40 1A 80 36 40 92 80 35 40 0E 80 34 40 00 80 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A 8D +04 57 41 52 4D 00 30 40 0A 8E 3D 40 3E 8E 92 C3 +30 01 1E 42 08 18 0E 93 11 24 F2 B2 21 02 02 20 +3E E3 1E 53 F2 D0 0C 00 2B 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E 84 +06 0D 1B 5B 37 6D 23 00 D6 83 34 82 1E 84 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 83 14 84 30 FF A0 86 +B8 80 24 82 1E 84 0A 62 79 74 65 73 20 66 72 65 +65 00 3C 82 9A 88 82 8B 04 43 4F 4C 44 00 92 B3 +8A 05 FD 23 B2 40 04 A5 20 01 3E 8E B2 40 88 5A +CC 01 B2 43 06 02 B2 40 FE FF 02 02 D2 D3 05 02 +F2 D3 26 02 F2 43 22 02 F2 D3 47 02 F2 40 BF 00 +43 02 B2 40 00 A5 60 01 82 43 88 01 B2 40 FF 1E 80 01 B2 40 B0 00 82 01 B2 40 1E 00 84 01 39 40 -10 00 82 43 88 01 92 D2 5E 01 08 18 38 40 59 14 -18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 89 43 -00 20 FC 23 39 40 32 00 29 83 B9 40 D4 91 CE FF -FB 23 B2 40 2C 84 E2 FF B2 40 81 00 80 05 92 42 -02 18 86 05 92 42 04 18 88 05 92 C3 80 05 92 D3 -9A 05 3F 40 80 20 31 40 E0 20 30 12 3A 91 41 3F -38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 09 9A -03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 21 -30 4D 1C 15 B0 12 2A 80 B6 85 0E 86 32 83 B8 92 -CA 86 28 83 BE 89 DA 92 BA 92 29 4E 39 90 86 12 -02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E 02 00 -04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 3E 40 -28 00 B0 12 A2 92 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 C4 21 -B0 12 2A 80 B6 85 CA 86 28 83 18 93 0E 93 21 53 -3E 90 10 00 83 2D E1 2B 1A 93 B2 41 C4 21 DD 3F -87 12 B0 81 80 92 28 93 0C 43 1B 42 C6 21 A2 53 -C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 C4 21 -B0 12 A2 92 0E 93 03 20 3C 40 00 03 21 3C 1E 93 -03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 20 03 -17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 03 20 -3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 08 3C -3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 -3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 -92 53 C4 21 B0 12 A2 92 ED 3F 7A 90 40 00 16 20 -3C 40 20 00 92 53 C4 21 B0 12 F6 92 0C 20 3C 50 -10 00 3E 40 2B 00 B0 12 F6 92 92 92 C0 21 C4 21 -02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 F6 92 -FA 23 3C 50 10 00 B0 12 DE 92 EF 3F 0C 43 1B 42 -C6 21 A2 53 C6 21 87 12 B0 81 80 92 FE 93 FE 90 -26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F -B0 12 F6 92 E1 23 3C 50 80 00 B0 12 DE 92 DC 3F -1C 84 04 52 45 54 49 00 87 12 34 80 00 13 C8 87 -2A 80 34 80 2C 00 20 93 F6 93 3C 94 2E 4E 0E DC -09 4B A4 3F 3E 8C 03 4D 4F 56 84 12 32 94 00 40 -46 94 05 4D 4F 56 2E 42 84 12 32 94 40 40 00 00 -03 41 44 44 84 12 32 94 00 50 60 94 05 41 44 44 -2E 42 84 12 32 94 40 50 6C 94 04 41 44 44 43 00 -84 12 32 94 00 60 7A 94 06 41 44 44 43 2E 42 00 -84 12 32 94 40 60 22 94 04 53 55 42 43 00 84 12 -32 94 00 70 98 94 06 53 55 42 43 2E 42 00 84 12 -32 94 40 70 A6 94 03 53 55 42 84 12 32 94 00 80 -B6 94 05 53 55 42 2E 42 84 12 32 94 40 80 20 8C -03 43 4D 50 84 12 32 94 00 90 D0 94 05 43 4D 50 -2E 42 84 12 32 94 40 90 0E 8C 04 44 41 44 44 00 -84 12 32 94 00 A0 EA 94 06 44 41 44 44 2E 42 00 -84 12 32 94 40 A0 DC 94 03 42 49 54 84 12 32 94 -00 B0 08 95 05 42 49 54 2E 42 84 12 32 94 40 B0 -14 95 03 42 49 43 84 12 32 94 00 C0 22 95 05 42 -49 43 2E 42 84 12 32 94 40 C0 2E 95 03 42 49 53 -84 12 32 94 00 D0 3C 95 05 42 49 53 2E 42 84 12 -32 94 40 D0 00 00 03 58 4F 52 84 12 32 94 00 E0 -56 95 05 58 4F 52 2E 42 84 12 32 94 40 E0 88 94 -03 41 4E 44 84 12 32 94 00 F0 70 95 05 41 4E 44 -2E 42 84 12 32 94 40 F0 B0 81 20 93 8E 95 0A 4C -3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F C2 94 -03 52 52 43 84 12 88 95 00 10 A0 95 05 52 52 43 -2E 42 84 12 88 95 40 10 AC 95 04 53 57 50 42 00 -84 12 88 95 80 10 BA 95 03 52 52 41 84 12 88 95 -00 11 C8 95 05 52 52 41 2E 42 84 12 88 95 40 11 -D4 95 03 53 58 54 84 12 88 95 80 11 00 00 04 50 -55 53 48 00 84 12 88 95 00 12 EE 95 06 50 55 53 -48 2E 42 00 84 12 88 95 40 12 48 95 04 43 41 4C -4C 00 84 12 88 95 80 12 1A 53 0E 4A 87 12 E2 82 -52 85 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 -3A 89 B0 81 80 92 38 96 92 53 C4 21 3E 40 2C 00 -B0 12 2A 80 B6 85 CA 86 28 83 BE 89 EC 93 50 96 -0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C -59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E -94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F E2 95 04 52 -52 43 4D 00 84 12 32 96 50 00 7E 96 04 52 52 41 -4D 00 84 12 32 96 50 01 8C 96 04 52 4C 41 4D 00 -84 12 32 96 50 02 9A 96 04 52 52 55 4D 00 84 12 -32 96 50 03 FC 95 05 50 55 53 48 4D 84 12 32 96 -00 15 B6 96 04 50 4F 50 4D 00 84 12 32 96 00 17 -85 12 00 3C A8 96 03 53 3E 3D 85 12 00 38 D6 96 -02 53 3C 00 85 12 00 34 C4 96 03 30 3E 3D 85 12 -00 30 EA 96 02 30 3C 00 85 12 00 30 00 00 02 55 -3C 00 85 12 00 2C FE 96 03 55 3E 3D 85 12 00 28 -F4 96 03 30 3C 3E 85 12 00 24 12 97 02 30 3D 00 -85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 8A 4E -00 00 A2 53 C6 21 0E 4A 30 4D 08 97 04 54 48 45 -4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 0A 89 -0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D F8 94 -04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C 00 00 -A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 3C 97 05 55 -4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 2A 83 -0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 08 DA -89 48 00 00 A2 53 C6 21 30 4D 7C 95 05 41 47 41 -49 4E 87 12 D0 96 84 97 2A 80 00 00 05 57 48 49 -4C 45 87 12 2A 97 78 80 2A 80 E0 96 06 52 45 50 -45 41 54 00 87 12 D0 96 84 97 42 97 2A 80 E0 97 -3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 00 00 -CA 23 98 42 C6 21 00 00 30 4D 0C 96 03 42 57 31 -84 12 DE 97 E0 21 FC 97 03 42 57 32 84 12 DE 97 -E2 21 08 98 03 42 57 33 84 12 DE 97 E4 21 20 98 -3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 00 00 -8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F -30 4D 00 00 03 46 57 31 84 12 1E 98 E6 21 44 98 -03 46 57 32 84 12 1E 98 E8 21 50 98 03 46 57 33 -84 12 1E 98 EA 21 3E 90 00 30 07 24 3E E0 00 04 -3E B0 00 10 02 24 3E E0 00 08 30 4D 5C 98 04 47 -4F 54 4F 00 87 12 D0 96 B0 89 BE 87 2A 80 00 00 -05 3F 47 4F 54 4F 87 12 66 98 B0 89 BE 87 2A 80 -00 00 03 4A 4D 50 87 12 B0 89 B2 97 2A 80 90 98 -04 3F 4A 4D 50 00 87 12 66 98 B0 89 78 80 84 97 -2A 80 +10 00 92 D2 5E 01 08 18 38 40 59 14 18 83 FE 23 +19 83 FA 23 39 40 00 10 29 83 89 43 00 20 FC 23 +39 40 32 00 29 83 B9 40 9C 8E CE FF FB 23 B2 40 +26 83 E2 FF B2 40 81 00 80 05 92 42 02 18 86 05 +92 42 04 18 88 05 92 C3 80 05 92 D3 9A 05 3F 40 +80 20 31 40 E0 20 30 12 06 8E 4F 3F 88 8E 07 43 +4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B +0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 +FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D B2 89 +86 5B 54 48 45 4E 5D 00 30 4D 70 8F 86 5B 45 4C +53 45 5D 00 87 12 14 84 00 00 C6 80 42 87 80 84 +24 87 34 80 40 82 E6 8F 44 80 1E 84 06 5B 54 48 +45 4E 5D 00 46 8F 4A 82 B6 8F F8 83 D0 80 58 80 +4A 82 8C 8F 2A 80 44 80 1E 84 06 5B 45 4C 53 45 +5D 00 46 8F 4A 82 D4 8F F8 83 D0 80 58 80 4A 82 +8A 8F 2A 80 1E 84 04 5B 49 46 5D 00 46 8F 4A 82 +8C 8F 3C 82 8A 8F F8 83 1E 84 05 0D 0A 6B 6F 20 +D6 83 8C 83 32 87 3C 82 8C 8F 7C 8F 84 5B 49 46 +5D 00 0E 93 3E 4F BE 27 30 4D FC 8F 89 5B 44 45 +46 49 4E 45 44 5D 87 12 42 87 80 84 EE 84 6A 80 +2A 80 0C 90 8B 5B 55 4E 44 45 46 49 4E 45 44 5D +87 12 42 87 80 84 EE 84 6A 80 00 81 2A 80 40 90 +3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F 30 40 56 8D +48 8C 06 4D 41 52 4B 45 52 00 B0 12 B8 89 BA 40 +84 12 FC FF BA 40 3E 90 FE FF 9A 42 C8 21 00 00 +28 83 8A 48 02 00 A2 52 C6 21 30 40 00 8A 1C 15 +B0 12 2A 80 80 84 EE 84 4A 82 94 90 AA 85 40 82 +CE 88 AE 90 96 90 39 4E 39 80 86 12 08 24 19 53 +02 20 2E 4E 04 3C 2E 53 19 53 01 24 2E 82 1B 17 +30 41 3E 40 28 00 B0 12 7E 90 19 42 C6 21 A2 53 +C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 +92 53 C4 21 B0 12 2A 80 80 84 AA 85 40 82 EC 90 +E2 90 21 53 3E 90 10 00 7D 2D E1 2B EE 90 B2 41 +C4 21 DD 3F 87 12 42 87 74 84 FC 90 0C 43 1B 42 +C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 27 20 +92 53 C4 21 B0 12 7E 90 3C 40 00 03 0E 93 1C 24 +3C 40 10 03 1E 93 18 24 3C 40 20 03 2E 93 14 24 +3C 40 20 02 2E 92 10 24 3C 40 30 02 3E 92 0C 24 +3C 40 30 03 3E 93 08 24 3C 40 30 00 19 42 C6 21 +A2 53 C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 +26 00 07 20 3C 40 10 02 92 53 C4 21 B0 12 7E 90 +ED 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 +B0 12 CA 90 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 +CA 90 92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 +0C 5E DA 3F B0 12 CA 90 FA 23 3C 50 10 00 B0 12 +B2 90 EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 +42 87 74 84 C6 91 FE 90 26 00 00 00 3E 40 20 00 +03 20 3C 50 82 00 C8 3F B0 12 CA 90 E1 23 3C 50 +80 00 B0 12 B2 90 DC 3F D6 82 04 52 45 54 49 00 +87 12 14 84 00 13 B0 86 2A 80 14 84 2C 00 F4 90 +BE 91 04 92 09 4B 2E 4E 0E DC A4 3F FC 8A 03 4D +4F 56 84 12 FA 91 00 40 0E 92 05 4D 4F 56 2E 42 +84 12 FA 91 40 40 00 00 03 41 44 44 84 12 FA 91 +00 50 28 92 05 41 44 44 2E 42 84 12 FA 91 40 50 +34 92 04 41 44 44 43 00 84 12 FA 91 00 60 42 92 +06 41 44 44 43 2E 42 00 84 12 FA 91 40 60 EA 91 +04 53 55 42 43 00 84 12 FA 91 00 70 60 92 06 53 +55 42 43 2E 42 00 84 12 FA 91 40 70 6E 92 03 53 +55 42 84 12 FA 91 00 80 7E 92 05 53 55 42 2E 42 +84 12 FA 91 40 80 DE 8A 03 43 4D 50 84 12 FA 91 +00 90 98 92 05 43 4D 50 2E 42 84 12 FA 91 40 90 +CC 8A 04 44 41 44 44 00 84 12 FA 91 00 A0 B2 92 +06 44 41 44 44 2E 42 00 84 12 FA 91 40 A0 A4 92 +03 42 49 54 84 12 FA 91 00 B0 D0 92 05 42 49 54 +2E 42 84 12 FA 91 40 B0 DC 92 03 42 49 43 84 12 +FA 91 00 C0 EA 92 05 42 49 43 2E 42 84 12 FA 91 +40 C0 F6 92 03 42 49 53 84 12 FA 91 00 D0 04 93 +05 42 49 53 2E 42 84 12 FA 91 40 D0 00 00 03 58 +4F 52 84 12 FA 91 00 E0 1E 93 05 58 4F 52 2E 42 +84 12 FA 91 40 E0 50 92 03 41 4E 44 84 12 FA 91 +00 F0 38 93 05 41 4E 44 2E 42 84 12 FA 91 40 F0 +42 87 F4 90 56 93 0A 4C 3C F0 70 00 8A 10 3A F0 +0F 00 0C DA 4F 3F 8A 92 03 52 52 43 84 12 50 93 +00 10 68 93 05 52 52 43 2E 42 84 12 50 93 40 10 +74 93 04 53 57 50 42 00 84 12 50 93 80 10 82 93 +03 52 52 41 84 12 50 93 00 11 90 93 05 52 52 41 +2E 42 84 12 50 93 40 11 9C 93 03 53 58 54 84 12 +50 93 80 11 00 00 04 50 55 53 48 00 84 12 50 93 +00 12 B6 93 06 50 55 53 48 2E 42 00 84 12 50 93 +40 12 10 93 04 43 41 4C 4C 00 84 12 50 93 80 12 +1A 53 0E 4A 87 12 34 82 1E 84 0D 6F 75 74 20 6F +66 20 62 6F 75 6E 64 73 4C 88 42 87 74 84 00 94 +92 53 C4 21 3E 40 2C 00 B0 12 2A 80 80 84 AA 85 +40 82 CE 88 B4 91 18 94 0A 4E 3E 4F 1A 83 E0 33 +29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A +38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 +5A 06 8F 3F AA 93 04 52 52 43 4D 00 84 12 FA 93 +50 00 46 94 04 52 52 41 4D 00 84 12 FA 93 50 01 +54 94 04 52 4C 41 4D 00 84 12 FA 93 50 02 62 94 +04 52 52 55 4D 00 84 12 FA 93 50 03 C4 93 05 50 +55 53 48 4D 84 12 FA 93 00 15 7E 94 04 50 4F 50 +4D 00 84 12 FA 93 00 17 70 94 03 53 3E 3D 85 12 +00 38 9A 94 02 53 3C 00 85 12 00 34 8C 94 03 30 +3E 3D 85 12 00 30 AE 94 02 30 3C 00 85 12 00 30 +00 00 02 55 3C 00 85 12 00 2C C2 94 03 55 3E 3D +85 12 00 28 B8 94 03 30 3C 3E 85 12 00 24 D6 94 +02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 +C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D CC 94 +04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 +29 53 0A 89 0A 11 3A 90 00 02 63 2F 88 DA 00 00 +30 4D C0 92 04 45 4C 53 45 00 1A 42 C6 21 BA 40 +00 3C 00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F +00 95 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 +C6 21 2A 83 0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 +FF 03 08 DA 89 48 00 00 A2 53 C6 21 30 4D 44 93 +05 41 47 41 49 4E 0A 4E 38 40 00 3C E7 3F 00 00 +05 57 48 49 4C 45 87 12 EE 94 76 80 2A 80 A4 94 +06 52 45 50 45 41 54 00 87 12 76 95 06 95 2A 80 +A2 95 3D 41 08 4E 3E 4F 2A 48 B2 92 C4 21 CD 2F +98 42 C6 21 00 00 30 4D D4 93 03 42 57 31 84 12 +A0 95 00 00 BA 95 03 42 57 32 84 12 A0 95 00 00 +C6 95 03 42 57 33 84 12 A0 95 00 00 DE 95 3D 41 +1A 42 C6 21 28 4E B2 92 C4 21 90 2B BA 4F 00 00 +A2 53 C6 21 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 +57 31 84 12 DC 95 00 00 FE 95 03 46 57 32 84 12 +DC 95 00 00 0A 96 03 46 57 33 84 12 DC 95 00 00 +00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 +00 04 3E B0 00 10 02 24 3E E0 00 08 87 12 C0 88 +DA 86 2A 80 16 96 04 47 4F 54 4F 00 2F 83 8F 4E +00 00 3E 40 00 3C F2 3F @FFFE -D4 91 +9C 8E q diff --git a/binaries/MSP_EXP430FR2355_24MHz.txt b/binaries/MSP_EXP430FR2355_24MHz.txt index fa866aa..80b0a1a 100644 --- a/binaries/MSP_EXP430FR2355_24MHz.txt +++ b/binaries/MSP_EXP430FR2355_24MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 0D 00 01 49 C0 5D 05 00 18 00 D2 98 8A 8E -2C 01 7B B0 FC 83 0E 84 +10 00 0D 00 01 49 C0 5D 05 00 18 00 68 96 D0 8C +2D 01 6B B0 B6 82 C8 82 @8000 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 80 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 80 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 80 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 80 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 80 02 3E 52 00 -0E 12 3E 4F 30 4D 96 80 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 80 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 80 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 80 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 81 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 80 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 81 02 31 2D 00 -1E 83 30 4D D8 80 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 81 -02 30 3D 00 1E 83 0E 7E 30 4D 60 81 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 81 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 80 01 3E 3E 8F F4 3B EB 37 0E 81 02 42 4C 00 -85 12 20 00 AC 81 04 42 41 53 45 00 85 12 DC 21 -C8 80 05 53 54 41 54 45 85 12 BE 21 96 81 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 81 06 55 4D 2F -4D 4F 44 00 30 12 62 80 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 80 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 81 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 81 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 82 -02 23 53 00 87 12 32 82 6A 82 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 82 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 81 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 81 -02 44 2E 00 87 12 D2 81 44 80 B0 80 4C 81 64 82 -BC 80 A2 82 7E 82 14 85 DC 84 2A 80 DC 81 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 80 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 82 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 80 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A 82 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 82 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 82 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 81 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 83 03 4B 45 59 30 40 A0 83 -18 42 8C 05 2F 83 8F 4E 00 00 B0 12 FC 83 92 B3 -9C 05 FD 27 1E 42 8C 05 B0 12 0E 84 30 4D 00 83 -06 41 43 43 45 50 54 00 3C 40 6A 84 3B 40 34 84 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E 84 92 B3 9C 05 05 24 18 42 8C 05 38 90 -0A 00 04 20 21 53 39 40 22 84 4D 15 A2 B3 9C 05 -FD 27 B2 40 11 00 8E 05 D2 C3 03 02 30 41 B2 40 -13 00 8E 05 D2 D3 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 84 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 8C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 9C 05 FD 27 82 48 8E 05 30 4D 60 84 -2D 83 92 B3 9C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 82 04 45 4D 49 54 00 30 40 8C 84 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 84 04 45 43 48 -4F 00 B2 40 82 48 58 84 82 43 DE 21 30 4D E0 82 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 84 92 43 -DE 21 30 4D 9C 82 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 84 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE 84 EF 3F 00 85 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 83 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A 85 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C 85 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 83 02 43 -52 00 30 40 46 85 87 12 52 85 02 0D 0A 00 14 85 -2A 80 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA 84 82 53 22 00 82 43 B4 21 -87 12 34 80 52 85 C8 87 34 80 22 00 B6 85 80 85 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 84 82 2E -22 00 87 12 6C 85 34 80 14 85 C8 87 2A 80 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 80 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 80 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 80 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 80 02 3E 52 00 0E 12 3E 4F 30 4D 70 80 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 80 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 80 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 80 +01 21 BE 4F 00 00 3E 4F 30 4D CC 80 02 30 3D 00 +1E 83 0E 7E 30 4D FC 80 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 81 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 80 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 81 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 81 02 23 53 00 87 12 88 81 C0 81 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 81 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 80 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 81 34 80 86 80 D4 80 BA 81 +92 80 F8 81 D4 81 D6 83 42 87 82 83 2A 80 22 81 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 81 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 82 18 42 8C 05 2F 83 8F 4E +00 00 B0 12 B6 82 92 B3 9C 05 FD 27 1E 42 8C 05 +B0 12 C8 82 30 4D A2 B3 9C 05 FD 27 B2 40 11 00 +8E 05 D2 C3 03 02 30 41 B2 40 13 00 8E 05 D2 D3 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 82 +B0 12 B6 82 12 D2 0A 18 F9 3F F0 80 06 41 43 43 +45 50 54 00 3C 40 64 83 3B 40 2E 83 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 83 +92 B3 9C 05 05 24 18 42 8C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 8C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 9C 05 +FD 27 82 48 8E 05 30 4D 5A 83 2D 83 92 B3 9C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 80 04 45 4D 49 +54 00 30 40 86 83 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C 83 04 45 43 48 4F 00 B2 40 82 48 +52 83 82 43 DE 21 30 4D 32 82 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 83 92 43 DE 21 30 4D 20 82 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 83 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 83 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 81 +02 43 52 00 30 40 08 84 87 12 1E 84 02 0D 0A 00 +D6 83 2A 80 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 81 82 53 22 00 82 43 B4 21 87 12 14 84 +1E 84 B0 86 14 84 22 00 80 84 4C 84 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA 83 82 2E 22 00 87 12 38 84 14 84 D6 83 +B0 86 2A 80 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,302 +86,281 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E 80 34 40 00 80 30 4D A2 81 07 3E +00 00 35 40 0E 80 34 40 00 80 30 4D 82 80 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 87 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 87 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 81 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC 84 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 81 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 87 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 80 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E 85 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A 88 B0 81 -B6 85 44 88 3D 40 4C 88 E2 22 5D 3E 4E 88 0A 4E -3E 4F 3D 40 64 88 39 27 3D 40 3E 88 1A E2 BE 21 -B3 27 AD 23 66 88 3E 4F 3D 40 3E 88 BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 8B -CD 3F B6 87 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A 80 3A 88 -A2 88 B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C 81 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 85 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 85 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 81 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 82 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 80 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC 82 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 83 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 86 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 84 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 84 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 87 42 87 80 84 50 87 +3D 40 58 87 CC 22 82 3E 5A 87 0A 4E 3E 4F 3D 40 +70 87 23 27 3D 40 4A 87 1A E2 BE 21 A1 27 B5 23 +72 87 3E 4F 3D 40 4A 87 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 8A CB 3F D2 86 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 80 46 87 AE 87 B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 81 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A 80 -42 85 92 84 DC 84 3A 88 DE 80 70 81 52 85 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E 89 34 80 -30 FF F2 82 8A 81 52 85 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E 89 24 83 D0 88 C0 83 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C 89 86 41 42 4F 52 54 -22 00 87 12 6C 85 34 80 2E 89 C8 87 2A 80 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 90 B0 12 -FC 83 92 C3 9C 05 38 40 F0 FF 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 9C 05 F2 23 87 12 -6A 90 34 80 DE 21 F2 80 B2 84 52 85 04 1B 5B 37 -6D 00 14 85 54 80 28 83 8A 89 42 85 52 85 05 6C -69 6E 65 3A 14 85 40 81 D2 82 14 85 52 85 04 1B -5B 30 6D 00 14 85 12 89 00 00 83 5B 27 5D 87 12 -B0 89 34 80 34 80 C8 87 C8 87 2A 80 08 86 01 27 -87 12 B0 81 B6 85 0E 86 28 83 BE 89 2A 80 6E 88 -CE 81 81 5C 92 42 C0 21 C4 21 30 4D 9A 89 81 5B -82 43 BE 21 30 4D C2 89 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 83 82 49 53 00 87 12 -C8 81 F2 80 28 83 02 8A 9E 89 34 80 E0 89 C8 87 -2A 80 B0 89 E0 89 2A 80 EA 89 09 49 4D 4D 45 44 +04 84 8C 83 42 87 82 83 46 87 A4 80 0C 81 1E 84 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 88 +14 84 30 FF A0 86 26 81 1E 84 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 88 3C 82 E0 87 C2 86 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E 88 86 41 42 4F +52 54 22 00 87 12 38 84 14 84 40 88 B0 86 2A 80 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 8D +B0 12 B6 82 92 C3 9C 05 38 40 F0 FF 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 9C 05 F3 23 87 12 +42 8D 14 84 DE 21 EA 80 AC 83 1E 84 04 1B 5B 37 +6D 00 D6 83 58 80 40 82 9A 88 04 84 1E 84 05 6C +69 6E 65 3A D6 83 D0 80 24 82 D6 83 1E 84 04 1B +5B 30 6D 00 D6 83 24 88 00 00 83 5B 27 5D 87 12 +C0 88 14 84 14 84 B0 86 B0 86 2A 80 E8 84 01 27 +87 12 42 87 80 84 EE 84 40 82 CE 88 2A 80 7A 87 +32 81 81 5C 92 42 C0 21 C4 21 30 4D AA 88 81 5B +82 43 BE 21 30 4D D2 88 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 86 82 49 53 00 87 12 +BE 87 EA 80 40 82 12 89 AE 88 14 84 F0 88 B0 86 +2A 80 C0 88 F0 88 2A 80 FA 88 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 85 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 88 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 81 B6 85 0E 86 54 80 -28 83 BE 89 70 81 28 83 66 8A 34 80 34 80 C8 87 -C8 87 34 80 C8 87 C8 87 2A 80 CE 89 81 3B 82 93 -BE 21 A8 27 87 12 34 80 2A 80 C8 87 04 8B D0 89 -2A 80 6C 8A 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 8A BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 8A 01 3A 30 12 A4 8A -87 12 92 85 B0 81 B6 85 CA 8A 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 8A 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 85 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A 89 B0 85 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 8A BA 40 86 12 FC FF E4 3F 16 88 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 8A BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C 8B 06 43 52 45 41 54 -45 00 B0 12 C0 8A BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 88 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 8B 05 44 -45 46 45 52 30 12 12 8B 8B 3F 6E 86 05 3E 42 4F -44 59 2E 52 30 4D 6A 8B 04 43 4F 44 45 00 B0 12 -C0 8A 2A 82 82 4A C6 21 87 12 B2 8A 94 8E 66 8E -2A 80 B8 8B 07 43 4F 44 45 4E 4E 4D 87 12 8C 8A -D0 89 C2 8B 2A 80 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE 8E 04 8B 2A 80 1A 89 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A 8E DA 21 D9 3F E8 8B 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE 8E 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A 80 02 00 A2 52 C6 21 ED 3F 0A 8A 85 48 49 32 -4C 4F 87 12 F2 82 8C 8C C8 87 D0 89 94 8E 66 8E -2A 80 5C 8C 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 83 00 00 2E 53 30 4D -9E 8B 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 83 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E 85 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 8B 85 42 45 47 49 4E 30 40 F2 82 B2 8C -85 55 4E 54 49 4C 39 40 28 83 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA 8B -85 41 47 41 49 4E 39 40 24 83 EF 3F 34 8B 85 57 -48 49 4C 45 87 12 78 8C 78 80 2A 80 22 8A 86 52 -45 50 45 41 54 00 87 12 F6 8C B8 8C 2A 80 92 8C -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C 83 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA 87 84 4C 4F 4F 50 00 39 40 -5E 83 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 83 85 2B 4C 4F -4F 50 39 40 4C 83 E5 3F 48 8D 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E 83 00 00 BA 40 24 83 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A 8D 04 4D 4F 56 45 00 0A 4E +C4 87 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 87 +80 84 EE 84 58 80 40 82 CE 88 0C 81 40 82 5C 89 +14 84 14 84 B0 86 B0 86 14 84 B0 86 B0 86 2A 80 +DE 88 81 3B 82 93 BE 21 B5 27 87 12 14 84 2A 80 +B0 86 FA 89 E0 88 2A 80 62 89 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 89 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A 89 01 3A 30 12 A0 89 92 B3 C6 21 A2 63 C6 21 +87 12 42 87 80 84 C8 89 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 84 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 88 90 87 05 44 45 46 45 52 +B0 12 B8 89 BA 40 30 40 FC FF BA 40 AE 89 FE FF +E3 3F 1E 87 06 43 52 45 41 54 45 00 B0 12 B8 89 +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 8A 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 85 05 3E 42 4F 44 59 2E 52 +30 4D 44 8A 04 43 4F 44 45 00 B0 12 B8 89 A2 82 +C6 21 87 12 D2 8C AC 8C 2A 80 84 8A 07 43 4F 44 +45 4E 4E 4D B0 12 86 89 F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 8C FA 89 2A 80 2C 88 03 41 +53 4D B2 40 B0 8C DA 21 E0 3F AC 8A 06 45 4E 44 +41 53 4D 00 87 12 B4 8A F4 8C 2A 80 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 8C 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A 80 +02 00 A2 52 C6 21 ED 3F 1A 89 85 48 49 32 4C 4F +87 12 A0 86 4A 8B B0 86 E0 88 D2 8C AC 8C 2A 80 +1A 8B 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 82 00 00 2E 53 30 4D 5E 8A +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C 82 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 83 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C 8A 85 42 45 47 49 4E 30 40 A0 86 70 8B 85 55 +4E 54 49 4C 39 40 40 82 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 8A 85 41 +47 41 49 4E 39 40 3C 82 EF 3F 7A 84 85 57 48 49 +4C 45 87 12 36 8B 76 80 2A 80 34 84 86 52 45 50 +45 41 54 00 87 12 B4 8B 76 8B 2A 80 50 8B 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 82 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 86 84 4C 4F 4F 50 00 39 40 76 82 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 82 85 2B 4C 4F 4F 50 +39 40 64 82 E5 3F 06 8C 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE 8C -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 8B -34 80 10 00 34 80 00 00 3C 83 34 80 00 00 C8 87 -5E 83 0A 8E F2 82 34 80 C8 21 44 80 F2 80 C8 87 -FA 80 8A 8B 34 80 CA 21 FA 80 2A 80 AE 89 05 46 -4F 52 54 48 84 12 24 8E 8E 8E C2 91 CC 8E 2E 8E -74 8C 7C 8D F8 8F BE 8E 8E 90 A8 90 D0 8C 34 91 -00 00 CC 8F D8 89 AC 8B 00 00 F0 8C 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 8E BC 97 24 98 70 97 -8E 98 36 97 B2 98 62 94 00 00 2C 97 DC 97 8E 97 -CC 97 72 95 00 00 00 00 C0 98 58 8E 5C 8E 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C 8A 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E 85 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 8D 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 8C 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA 8A 86 5B 54 48 45 4E 5D 00 30 4D 14 8F -86 5B 45 4C 53 45 5D 00 87 12 34 80 00 00 36 81 -B0 81 B6 85 1C 88 44 80 28 83 8E 8F 8A 80 8A 80 -52 85 06 5B 54 48 45 4E 5D 00 EA 8E 32 83 5C 8F -36 85 40 81 54 80 32 83 30 8F 2A 80 8A 80 8A 80 -52 85 06 5B 45 4C 53 45 5D 00 EA 8E 32 83 7C 8F -36 85 40 81 54 80 32 83 2E 8F 2A 80 52 85 04 5B -49 46 5D 00 EA 8E 32 83 30 8F 24 83 2E 8F 36 85 -52 85 05 0D 0A 6B 6F 20 14 85 92 84 2A 88 24 83 -30 8F 20 8F 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 8F 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 81 B6 85 0E 86 6C 80 2A 80 B4 8F 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 81 B6 85 0E 86 -6C 80 64 81 2A 80 E8 8F 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 8D 06 4D 41 52 4B 45 52 00 -B0 12 C0 8A BA 40 84 12 FC FF BA 40 E6 8F FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A 8B 34 8E C4 8E D8 8E 2C 90 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 8E -09 50 57 52 5F 53 54 41 54 45 84 12 24 90 8A 8E -D2 98 0E 8D 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E 90 92 42 0C 18 70 90 EF 3F 60 90 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E 90 92 42 -C6 21 70 90 30 4D 74 90 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 8D 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 84 24 84 B2 40 3E 91 3C 91 -B2 40 8A 8E 0E 18 B2 40 D2 98 0C 18 30 12 7E 90 -B2 40 8C 84 8A 84 B2 40 46 85 44 85 B2 40 A0 83 -9E 83 B2 40 18 00 0A 18 37 40 1A 80 36 40 BC 80 -35 40 0E 80 34 40 00 80 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 90 04 57 41 52 4D 00 30 40 3E 91 3D 40 -72 91 92 C3 30 01 1E 42 08 18 0E 93 11 24 F2 B2 -21 02 02 20 3E E3 1E 53 F2 D0 0C 00 2B 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 85 06 0D 1B 5B 37 6D 23 00 14 85 E2 82 -52 85 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 85 34 80 80 FF F2 82 28 81 D2 82 52 85 -0B 62 79 74 65 73 20 66 72 65 65 20 24 83 8A 89 -E2 8E 04 43 4F 4C 44 00 92 B3 8A 05 FD 23 B2 40 -04 A5 20 01 B2 40 88 5A CC 01 B2 43 06 02 92 43 -04 02 B2 40 FE FF 02 02 D2 D3 05 02 F2 43 22 02 -F2 D3 26 02 F2 D0 BF 00 47 02 F2 40 BF 00 43 02 -F2 40 40 00 45 02 F2 40 A5 00 A1 01 F2 40 20 00 -A0 01 D2 43 A1 01 B2 40 00 A5 60 01 B2 40 FF 1E +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 84 +CA 21 F2 80 2A 80 84 12 7E 8C AE 8B 4E 8F DE 8B +BE 88 32 8B 3A 8C 62 90 64 84 66 8D 80 8D 8E 8B +00 8E 00 00 34 90 E8 88 78 8A 00 00 84 12 7E 8C +80 95 E2 95 34 95 56 96 FA 94 00 00 2A 92 00 00 +F0 94 A0 95 52 95 90 95 3A 93 00 00 00 00 32 96 +AA 8C 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 8C EE 8C +F4 8C 04 8D 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 89 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 8C D0 8C 68 96 CC 8B 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 8D 92 42 0C 18 +48 8D EF 3F 38 8D 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 8D 92 42 C6 21 48 8D 30 4D 4C 8D +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC 8B 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 82 +DE 82 B2 40 0A 8E 08 8E B2 40 D0 8C 0E 18 B2 40 +68 96 0C 18 30 12 56 8D B2 40 86 83 84 83 B2 40 +08 84 06 84 B2 40 98 82 96 82 B2 40 18 00 0A 18 +37 40 1A 80 36 40 92 80 35 40 0E 80 34 40 00 80 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A 8D +04 57 41 52 4D 00 30 40 0A 8E 3D 40 3E 8E 92 C3 +30 01 1E 42 08 18 0E 93 11 24 F2 B2 21 02 02 20 +3E E3 1E 53 F2 D0 0C 00 2B 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E 84 +06 0D 1B 5B 37 6D 23 00 D6 83 34 82 1E 84 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 83 14 84 30 FF A0 86 +B8 80 24 82 1E 84 0A 62 79 74 65 73 20 66 72 65 +65 00 3C 82 9A 88 82 8B 04 43 4F 4C 44 00 92 B3 +8A 05 FD 23 B2 40 04 A5 20 01 3E 8E B2 40 88 5A +CC 01 B2 43 06 02 B2 40 FE FF 02 02 D2 D3 05 02 +F2 D3 26 02 F2 43 22 02 F2 D3 47 02 F2 40 BF 00 +43 02 F2 40 A5 00 A1 01 F2 40 20 00 A0 01 D2 43 +A1 01 B2 40 00 A5 60 01 82 43 88 01 B2 40 FF 1E 80 01 B2 40 BE 00 82 01 B2 40 DC 02 84 01 39 40 -80 01 82 43 88 01 92 D2 5E 01 08 18 38 40 59 14 -18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 89 43 -00 20 FC 23 39 40 32 00 29 83 B9 40 D4 91 CE FF -FB 23 B2 40 2C 84 E2 FF B2 40 81 00 80 05 92 42 -02 18 86 05 92 42 04 18 88 05 92 C3 80 05 92 D3 -9A 05 3F 40 80 20 31 40 E0 20 30 12 3A 91 39 3F -38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 09 9A -03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 21 -30 4D 1C 15 B0 12 2A 80 B6 85 0E 86 32 83 C8 92 -CA 86 28 83 BE 89 EA 92 CA 92 29 4E 39 90 86 12 -02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E 02 00 -04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 3E 40 -28 00 B0 12 B2 92 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 C4 21 -B0 12 2A 80 B6 85 CA 86 28 83 28 93 1E 93 21 53 -3E 90 10 00 83 2D E1 2B 2A 93 B2 41 C4 21 DD 3F -87 12 B0 81 90 92 38 93 0C 43 1B 42 C6 21 A2 53 -C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 C4 21 -B0 12 B2 92 0E 93 03 20 3C 40 00 03 21 3C 1E 93 -03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 20 03 -17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 03 20 -3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 08 3C -3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 -3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 -92 53 C4 21 B0 12 B2 92 ED 3F 7A 90 40 00 16 20 -3C 40 20 00 92 53 C4 21 B0 12 06 93 0C 20 3C 50 -10 00 3E 40 2B 00 B0 12 06 93 92 92 C0 21 C4 21 -02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 06 93 -FA 23 3C 50 10 00 B0 12 EE 92 EF 3F 0C 43 1B 42 -C6 21 A2 53 C6 21 87 12 B0 81 90 92 0E 94 FE 90 -26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F -B0 12 06 93 E1 23 3C 50 80 00 B0 12 EE 92 DC 3F -1C 84 04 52 45 54 49 00 87 12 34 80 00 13 C8 87 -2A 80 34 80 2C 00 30 93 06 94 4C 94 2E 4E 0E DC -09 4B A4 3F 3E 8C 03 4D 4F 56 84 12 42 94 00 40 -56 94 05 4D 4F 56 2E 42 84 12 42 94 40 40 00 00 -03 41 44 44 84 12 42 94 00 50 70 94 05 41 44 44 -2E 42 84 12 42 94 40 50 7C 94 04 41 44 44 43 00 -84 12 42 94 00 60 8A 94 06 41 44 44 43 2E 42 00 -84 12 42 94 40 60 32 94 04 53 55 42 43 00 84 12 -42 94 00 70 A8 94 06 53 55 42 43 2E 42 00 84 12 -42 94 40 70 B6 94 03 53 55 42 84 12 42 94 00 80 -C6 94 05 53 55 42 2E 42 84 12 42 94 40 80 20 8C -03 43 4D 50 84 12 42 94 00 90 E0 94 05 43 4D 50 -2E 42 84 12 42 94 40 90 0E 8C 04 44 41 44 44 00 -84 12 42 94 00 A0 FA 94 06 44 41 44 44 2E 42 00 -84 12 42 94 40 A0 EC 94 03 42 49 54 84 12 42 94 -00 B0 18 95 05 42 49 54 2E 42 84 12 42 94 40 B0 -24 95 03 42 49 43 84 12 42 94 00 C0 32 95 05 42 -49 43 2E 42 84 12 42 94 40 C0 3E 95 03 42 49 53 -84 12 42 94 00 D0 4C 95 05 42 49 53 2E 42 84 12 -42 94 40 D0 00 00 03 58 4F 52 84 12 42 94 00 E0 -66 95 05 58 4F 52 2E 42 84 12 42 94 40 E0 98 94 -03 41 4E 44 84 12 42 94 00 F0 80 95 05 41 4E 44 -2E 42 84 12 42 94 40 F0 B0 81 30 93 9E 95 0A 4C -3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F D2 94 -03 52 52 43 84 12 98 95 00 10 B0 95 05 52 52 43 -2E 42 84 12 98 95 40 10 BC 95 04 53 57 50 42 00 -84 12 98 95 80 10 CA 95 03 52 52 41 84 12 98 95 -00 11 D8 95 05 52 52 41 2E 42 84 12 98 95 40 11 -E4 95 03 53 58 54 84 12 98 95 80 11 00 00 04 50 -55 53 48 00 84 12 98 95 00 12 FE 95 06 50 55 53 -48 2E 42 00 84 12 98 95 40 12 58 95 04 43 41 4C -4C 00 84 12 98 95 80 12 1A 53 0E 4A 87 12 E2 82 -52 85 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 -3A 89 B0 81 90 92 48 96 92 53 C4 21 3E 40 2C 00 -B0 12 2A 80 B6 85 CA 86 28 83 BE 89 FC 93 60 96 -0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C -59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E -94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F F2 95 04 52 -52 43 4D 00 84 12 42 96 50 00 8E 96 04 52 52 41 -4D 00 84 12 42 96 50 01 9C 96 04 52 4C 41 4D 00 -84 12 42 96 50 02 AA 96 04 52 52 55 4D 00 84 12 -42 96 50 03 0C 96 05 50 55 53 48 4D 84 12 42 96 -00 15 C6 96 04 50 4F 50 4D 00 84 12 42 96 00 17 -85 12 00 3C B8 96 03 53 3E 3D 85 12 00 38 E6 96 -02 53 3C 00 85 12 00 34 D4 96 03 30 3E 3D 85 12 -00 30 FA 96 02 30 3C 00 85 12 00 30 00 00 02 55 -3C 00 85 12 00 2C 0E 97 03 55 3E 3D 85 12 00 28 -04 97 03 30 3C 3E 85 12 00 24 22 97 02 30 3D 00 -85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 8A 4E -00 00 A2 53 C6 21 0E 4A 30 4D 18 97 04 54 48 45 -4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 0A 89 -0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D 08 95 -04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C 00 00 -A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 4C 97 05 55 -4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 2A 83 -0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 08 DA -89 48 00 00 A2 53 C6 21 30 4D 8C 95 05 41 47 41 -49 4E 87 12 E0 96 94 97 2A 80 00 00 05 57 48 49 -4C 45 87 12 3A 97 78 80 2A 80 F0 96 06 52 45 50 -45 41 54 00 87 12 E0 96 94 97 52 97 2A 80 F0 97 -3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 00 00 -CA 23 98 42 C6 21 00 00 30 4D 1C 96 03 42 57 31 -84 12 EE 97 E0 21 0C 98 03 42 57 32 84 12 EE 97 -E2 21 18 98 03 42 57 33 84 12 EE 97 E4 21 30 98 -3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 00 00 -8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F -30 4D 00 00 03 46 57 31 84 12 2E 98 E6 21 54 98 -03 46 57 32 84 12 2E 98 E8 21 60 98 03 46 57 33 -84 12 2E 98 EA 21 3E 90 00 30 07 24 3E E0 00 04 -3E B0 00 10 02 24 3E E0 00 08 30 4D 6C 98 04 47 -4F 54 4F 00 87 12 E0 96 B0 89 BE 87 2A 80 00 00 -05 3F 47 4F 54 4F 87 12 76 98 B0 89 BE 87 2A 80 -00 00 03 4A 4D 50 87 12 B0 89 C2 97 2A 80 A0 98 -04 3F 4A 4D 50 00 87 12 76 98 B0 89 78 80 94 97 -2A 80 +80 01 92 D2 5E 01 08 18 38 40 59 14 18 83 FE 23 +19 83 FA 23 39 40 00 10 29 83 89 43 00 20 FC 23 +39 40 32 00 29 83 B9 40 9C 8E CE FF FB 23 B2 40 +26 83 E2 FF B2 40 81 00 80 05 92 42 02 18 86 05 +92 42 04 18 88 05 92 C3 80 05 92 D3 9A 05 3F 40 +80 20 31 40 E0 20 30 12 06 8E 47 3F 88 8E 07 43 +4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B +0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 +FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D B2 89 +86 5B 54 48 45 4E 5D 00 30 4D 80 8F 86 5B 45 4C +53 45 5D 00 87 12 14 84 00 00 C6 80 42 87 80 84 +24 87 34 80 40 82 F6 8F 44 80 1E 84 06 5B 54 48 +45 4E 5D 00 56 8F 4A 82 C6 8F F8 83 D0 80 58 80 +4A 82 9C 8F 2A 80 44 80 1E 84 06 5B 45 4C 53 45 +5D 00 56 8F 4A 82 E4 8F F8 83 D0 80 58 80 4A 82 +9A 8F 2A 80 1E 84 04 5B 49 46 5D 00 56 8F 4A 82 +9C 8F 3C 82 9A 8F F8 83 1E 84 05 0D 0A 6B 6F 20 +D6 83 8C 83 32 87 3C 82 9C 8F 8C 8F 84 5B 49 46 +5D 00 0E 93 3E 4F BE 27 30 4D 0C 90 89 5B 44 45 +46 49 4E 45 44 5D 87 12 42 87 80 84 EE 84 6A 80 +2A 80 1C 90 8B 5B 55 4E 44 45 46 49 4E 45 44 5D +87 12 42 87 80 84 EE 84 6A 80 00 81 2A 80 50 90 +3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F 30 40 56 8D +48 8C 06 4D 41 52 4B 45 52 00 B0 12 B8 89 BA 40 +84 12 FC FF BA 40 4E 90 FE FF 9A 42 C8 21 00 00 +28 83 8A 48 02 00 A2 52 C6 21 30 40 00 8A 1C 15 +B0 12 2A 80 80 84 EE 84 4A 82 A4 90 AA 85 40 82 +CE 88 BE 90 A6 90 39 4E 39 80 86 12 08 24 19 53 +02 20 2E 4E 04 3C 2E 53 19 53 01 24 2E 82 1B 17 +30 41 3E 40 28 00 B0 12 8E 90 19 42 C6 21 A2 53 +C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 +92 53 C4 21 B0 12 2A 80 80 84 AA 85 40 82 FC 90 +F2 90 21 53 3E 90 10 00 7D 2D E1 2B FE 90 B2 41 +C4 21 DD 3F 87 12 42 87 74 84 0C 91 0C 43 1B 42 +C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 27 20 +92 53 C4 21 B0 12 8E 90 3C 40 00 03 0E 93 1C 24 +3C 40 10 03 1E 93 18 24 3C 40 20 03 2E 93 14 24 +3C 40 20 02 2E 92 10 24 3C 40 30 02 3E 92 0C 24 +3C 40 30 03 3E 93 08 24 3C 40 30 00 19 42 C6 21 +A2 53 C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 +26 00 07 20 3C 40 10 02 92 53 C4 21 B0 12 8E 90 +ED 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 +B0 12 DA 90 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 +DA 90 92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 +0C 5E DA 3F B0 12 DA 90 FA 23 3C 50 10 00 B0 12 +C2 90 EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 +42 87 74 84 D6 91 FE 90 26 00 00 00 3E 40 20 00 +03 20 3C 50 82 00 C8 3F B0 12 DA 90 E1 23 3C 50 +80 00 B0 12 C2 90 DC 3F D6 82 04 52 45 54 49 00 +87 12 14 84 00 13 B0 86 2A 80 14 84 2C 00 04 91 +CE 91 14 92 09 4B 2E 4E 0E DC A4 3F FC 8A 03 4D +4F 56 84 12 0A 92 00 40 1E 92 05 4D 4F 56 2E 42 +84 12 0A 92 40 40 00 00 03 41 44 44 84 12 0A 92 +00 50 38 92 05 41 44 44 2E 42 84 12 0A 92 40 50 +44 92 04 41 44 44 43 00 84 12 0A 92 00 60 52 92 +06 41 44 44 43 2E 42 00 84 12 0A 92 40 60 FA 91 +04 53 55 42 43 00 84 12 0A 92 00 70 70 92 06 53 +55 42 43 2E 42 00 84 12 0A 92 40 70 7E 92 03 53 +55 42 84 12 0A 92 00 80 8E 92 05 53 55 42 2E 42 +84 12 0A 92 40 80 DE 8A 03 43 4D 50 84 12 0A 92 +00 90 A8 92 05 43 4D 50 2E 42 84 12 0A 92 40 90 +CC 8A 04 44 41 44 44 00 84 12 0A 92 00 A0 C2 92 +06 44 41 44 44 2E 42 00 84 12 0A 92 40 A0 B4 92 +03 42 49 54 84 12 0A 92 00 B0 E0 92 05 42 49 54 +2E 42 84 12 0A 92 40 B0 EC 92 03 42 49 43 84 12 +0A 92 00 C0 FA 92 05 42 49 43 2E 42 84 12 0A 92 +40 C0 06 93 03 42 49 53 84 12 0A 92 00 D0 14 93 +05 42 49 53 2E 42 84 12 0A 92 40 D0 00 00 03 58 +4F 52 84 12 0A 92 00 E0 2E 93 05 58 4F 52 2E 42 +84 12 0A 92 40 E0 60 92 03 41 4E 44 84 12 0A 92 +00 F0 48 93 05 41 4E 44 2E 42 84 12 0A 92 40 F0 +42 87 04 91 66 93 0A 4C 3C F0 70 00 8A 10 3A F0 +0F 00 0C DA 4F 3F 9A 92 03 52 52 43 84 12 60 93 +00 10 78 93 05 52 52 43 2E 42 84 12 60 93 40 10 +84 93 04 53 57 50 42 00 84 12 60 93 80 10 92 93 +03 52 52 41 84 12 60 93 00 11 A0 93 05 52 52 41 +2E 42 84 12 60 93 40 11 AC 93 03 53 58 54 84 12 +60 93 80 11 00 00 04 50 55 53 48 00 84 12 60 93 +00 12 C6 93 06 50 55 53 48 2E 42 00 84 12 60 93 +40 12 20 93 04 43 41 4C 4C 00 84 12 60 93 80 12 +1A 53 0E 4A 87 12 34 82 1E 84 0D 6F 75 74 20 6F +66 20 62 6F 75 6E 64 73 4C 88 42 87 74 84 10 94 +92 53 C4 21 3E 40 2C 00 B0 12 2A 80 80 84 AA 85 +40 82 CE 88 C4 91 28 94 0A 4E 3E 4F 1A 83 E0 33 +29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A +38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 +5A 06 8F 3F BA 93 04 52 52 43 4D 00 84 12 0A 94 +50 00 56 94 04 52 52 41 4D 00 84 12 0A 94 50 01 +64 94 04 52 4C 41 4D 00 84 12 0A 94 50 02 72 94 +04 52 52 55 4D 00 84 12 0A 94 50 03 D4 93 05 50 +55 53 48 4D 84 12 0A 94 00 15 8E 94 04 50 4F 50 +4D 00 84 12 0A 94 00 17 80 94 03 53 3E 3D 85 12 +00 38 AA 94 02 53 3C 00 85 12 00 34 9C 94 03 30 +3E 3D 85 12 00 30 BE 94 02 30 3C 00 85 12 00 30 +00 00 02 55 3C 00 85 12 00 2C D2 94 03 55 3E 3D +85 12 00 28 C8 94 03 30 3C 3E 85 12 00 24 E6 94 +02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 +C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D DC 94 +04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 +29 53 0A 89 0A 11 3A 90 00 02 63 2F 88 DA 00 00 +30 4D D0 92 04 45 4C 53 45 00 1A 42 C6 21 BA 40 +00 3C 00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F +10 95 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 +C6 21 2A 83 0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 +FF 03 08 DA 89 48 00 00 A2 53 C6 21 30 4D 54 93 +05 41 47 41 49 4E 0A 4E 38 40 00 3C E7 3F 00 00 +05 57 48 49 4C 45 87 12 FE 94 76 80 2A 80 B4 94 +06 52 45 50 45 41 54 00 87 12 86 95 16 95 2A 80 +B2 95 3D 41 08 4E 3E 4F 2A 48 B2 92 C4 21 CD 2F +98 42 C6 21 00 00 30 4D E4 93 03 42 57 31 84 12 +B0 95 00 00 CA 95 03 42 57 32 84 12 B0 95 00 00 +D6 95 03 42 57 33 84 12 B0 95 00 00 EE 95 3D 41 +1A 42 C6 21 28 4E B2 92 C4 21 90 2B BA 4F 00 00 +A2 53 C6 21 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 +57 31 84 12 EC 95 00 00 0E 96 03 46 57 32 84 12 +EC 95 00 00 1A 96 03 46 57 33 84 12 EC 95 00 00 +00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 +00 04 3E B0 00 10 02 24 3E E0 00 08 87 12 C0 88 +DA 86 2A 80 26 96 04 47 4F 54 4F 00 2F 83 8F 4E +00 00 3E 40 00 3C F2 3F @FFFE -D4 91 +9C 8E q diff --git a/binaries/MSP_EXP430FR2355_4MHz.txt b/binaries/MSP_EXP430FR2355_4MHz.txt deleted file mode 100644 index 6b55a99..0000000 --- a/binaries/MSP_EXP430FR2355_4MHz.txt +++ /dev/null @@ -1,404 +0,0 @@ -@1800 -10 00 02 00 21 BB A0 0F 05 00 18 00 C2 98 8A 8E -2C 01 7B B0 FC 83 0E 84 -@8000 -2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 -8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 80 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 80 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 80 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 80 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 80 02 3E 52 00 -0E 12 3E 4F 30 4D 96 80 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 80 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 80 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 80 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 81 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 80 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 81 02 31 2D 00 -1E 83 30 4D D8 80 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 81 -02 30 3D 00 1E 83 0E 7E 30 4D 60 81 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 81 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 80 01 3E 3E 8F F4 3B EB 37 0E 81 02 42 4C 00 -85 12 20 00 AC 81 04 42 41 53 45 00 85 12 DC 21 -C8 80 05 53 54 41 54 45 85 12 BE 21 96 81 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 81 06 55 4D 2F -4D 4F 44 00 30 12 62 80 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 80 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 81 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 81 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 82 -02 23 53 00 87 12 32 82 6A 82 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 82 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 81 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 81 -02 44 2E 00 87 12 D2 81 44 80 B0 80 4C 81 64 82 -BC 80 A2 82 7E 82 14 85 DC 84 2A 80 DC 81 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 80 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 82 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 80 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A 82 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 82 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 82 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 81 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 83 03 4B 45 59 30 40 A0 83 -18 42 8C 05 2F 83 8F 4E 00 00 B0 12 FC 83 92 B3 -9C 05 FD 27 1E 42 8C 05 B0 12 0E 84 30 4D 00 83 -06 41 43 43 45 50 54 00 3C 40 6A 84 3B 40 34 84 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E 84 92 B3 9C 05 05 24 18 42 8C 05 38 90 -0A 00 04 20 21 53 39 40 22 84 4D 15 A2 B3 9C 05 -FD 27 B2 40 11 00 8E 05 D2 C3 03 02 30 41 B2 40 -13 00 8E 05 D2 D3 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 84 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 8C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 9C 05 FD 27 82 48 8E 05 30 4D 60 84 -2D 83 92 B3 9C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 82 04 45 4D 49 54 00 30 40 8C 84 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 84 04 45 43 48 -4F 00 B2 40 82 48 58 84 82 43 DE 21 30 4D E0 82 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 84 92 43 -DE 21 30 4D 9C 82 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 84 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE 84 EF 3F 00 85 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 83 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A 85 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C 85 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 83 02 43 -52 00 30 40 46 85 87 12 52 85 02 0D 0A 00 14 85 -2A 80 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA 84 82 53 22 00 82 43 B4 21 -87 12 34 80 52 85 C8 87 34 80 22 00 B6 85 80 85 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 84 82 2E -22 00 87 12 6C 85 34 80 14 85 C8 87 2A 80 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 -60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 -18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 -F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E -CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 -0C 4E 65 4C 74 40 80 00 3B 40 CA 21 3E 4B 0E 93 -1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E -FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 -0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 -09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E 80 34 40 00 80 30 4D A2 81 07 3E -4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 -DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 -07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 -D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 -E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 87 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 87 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 81 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC 84 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 81 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 87 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 80 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E 85 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A 88 B0 81 -B6 85 44 88 3D 40 4C 88 E2 22 5D 3E 4E 88 0A 4E -3E 4F 3D 40 64 88 39 27 3D 40 3E 88 1A E2 BE 21 -B3 27 AD 23 66 88 3E 4F 3D 40 3E 88 BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 8B -CD 3F B6 87 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A 80 3A 88 -A2 88 B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C 81 04 51 55 49 54 00 82 43 08 18 31 40 -E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A 80 -42 85 92 84 DC 84 3A 88 DE 80 70 81 52 85 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E 89 34 80 -30 FF F2 82 8A 81 52 85 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E 89 24 83 D0 88 C0 83 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C 89 86 41 42 4F 52 54 -22 00 87 12 6C 85 34 80 2E 89 C8 87 2A 80 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 90 B0 12 -FC 83 92 C3 9C 05 38 40 A8 2A 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 9C 05 F2 23 87 12 -6A 90 34 80 DE 21 F2 80 B2 84 52 85 04 1B 5B 37 -6D 00 14 85 54 80 28 83 8A 89 42 85 52 85 05 6C -69 6E 65 3A 14 85 40 81 D2 82 14 85 52 85 04 1B -5B 30 6D 00 14 85 12 89 00 00 83 5B 27 5D 87 12 -B0 89 34 80 34 80 C8 87 C8 87 2A 80 08 86 01 27 -87 12 B0 81 B6 85 0E 86 28 83 BE 89 2A 80 6E 88 -CE 81 81 5C 92 42 C0 21 C4 21 30 4D 9A 89 81 5B -82 43 BE 21 30 4D C2 89 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 83 82 49 53 00 87 12 -C8 81 F2 80 28 83 02 8A 9E 89 34 80 E0 89 C8 87 -2A 80 B0 89 E0 89 2A 80 EA 89 09 49 4D 4D 45 44 -49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 85 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 88 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 81 B6 85 0E 86 54 80 -28 83 BE 89 70 81 28 83 66 8A 34 80 34 80 C8 87 -C8 87 34 80 C8 87 C8 87 2A 80 CE 89 81 3B 82 93 -BE 21 A8 27 87 12 34 80 2A 80 C8 87 04 8B D0 89 -2A 80 6C 8A 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 8A BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 8A 01 3A 30 12 A4 8A -87 12 92 85 B0 81 B6 85 CA 8A 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 8A 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 85 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A 89 B0 85 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 8A BA 40 86 12 FC FF E4 3F 16 88 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 8A BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C 8B 06 43 52 45 41 54 -45 00 B0 12 C0 8A BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 88 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 8B 05 44 -45 46 45 52 30 12 12 8B 8B 3F 6E 86 05 3E 42 4F -44 59 2E 52 30 4D 6A 8B 04 43 4F 44 45 00 B0 12 -C0 8A 2A 82 82 4A C6 21 87 12 B2 8A 94 8E 66 8E -2A 80 B8 8B 07 43 4F 44 45 4E 4E 4D 87 12 8C 8A -D0 89 C2 8B 2A 80 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE 8E 04 8B 2A 80 1A 89 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A 8E DA 21 D9 3F E8 8B 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE 8E 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A 80 02 00 A2 52 C6 21 ED 3F 0A 8A 85 48 49 32 -4C 4F 87 12 F2 82 8C 8C C8 87 D0 89 94 8E 66 8E -2A 80 5C 8C 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 83 00 00 2E 53 30 4D -9E 8B 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 83 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E 85 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 8B 85 42 45 47 49 4E 30 40 F2 82 B2 8C -85 55 4E 54 49 4C 39 40 28 83 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA 8B -85 41 47 41 49 4E 39 40 24 83 EF 3F 34 8B 85 57 -48 49 4C 45 87 12 78 8C 78 80 2A 80 22 8A 86 52 -45 50 45 41 54 00 87 12 F6 8C B8 8C 2A 80 92 8C -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C 83 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA 87 84 4C 4F 4F 50 00 39 40 -5E 83 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 83 85 2B 4C 4F -4F 50 39 40 4C 83 E5 3F 48 8D 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E 83 00 00 BA 40 24 83 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A 8D 04 4D 4F 56 45 00 0A 4E -38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C -F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE 8C -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 8B -34 80 10 00 34 80 00 00 3C 83 34 80 00 00 C8 87 -5E 83 0A 8E F2 82 34 80 C8 21 44 80 F2 80 C8 87 -FA 80 8A 8B 34 80 CA 21 FA 80 2A 80 AE 89 05 46 -4F 52 54 48 84 12 24 8E 8E 8E C2 91 CC 8E 2E 8E -74 8C 7C 8D F8 8F BE 8E 8E 90 A8 90 D0 8C 34 91 -00 00 CC 8F D8 89 AC 8B 00 00 F0 8C 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 8E AC 97 14 98 60 97 -7E 98 26 97 A2 98 52 94 00 00 1C 97 CC 97 7E 97 -BC 97 62 95 00 00 00 00 B0 98 58 8E 5C 8E 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C 8A 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E 85 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 8D 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 8C 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA 8A 86 5B 54 48 45 4E 5D 00 30 4D 14 8F -86 5B 45 4C 53 45 5D 00 87 12 34 80 00 00 36 81 -B0 81 B6 85 1C 88 44 80 28 83 8E 8F 8A 80 8A 80 -52 85 06 5B 54 48 45 4E 5D 00 EA 8E 32 83 5C 8F -36 85 40 81 54 80 32 83 30 8F 2A 80 8A 80 8A 80 -52 85 06 5B 45 4C 53 45 5D 00 EA 8E 32 83 7C 8F -36 85 40 81 54 80 32 83 2E 8F 2A 80 52 85 04 5B -49 46 5D 00 EA 8E 32 83 30 8F 24 83 2E 8F 36 85 -52 85 05 0D 0A 6B 6F 20 14 85 92 84 2A 88 24 83 -30 8F 20 8F 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 8F 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 81 B6 85 0E 86 6C 80 2A 80 B4 8F 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 81 B6 85 0E 86 -6C 80 64 81 2A 80 E8 8F 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 8D 06 4D 41 52 4B 45 52 00 -B0 12 C0 8A BA 40 84 12 FC FF BA 40 E6 8F FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A 8B 34 8E C4 8E D8 8E 2C 90 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 8E -09 50 57 52 5F 53 54 41 54 45 84 12 24 90 8A 8E -C2 98 0E 8D 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E 90 92 42 0C 18 70 90 EF 3F 60 90 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E 90 92 42 -C6 21 70 90 30 4D 74 90 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 8D 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 84 24 84 B2 40 3E 91 3C 91 -B2 40 8A 8E 0E 18 B2 40 C2 98 0C 18 30 12 7E 90 -B2 40 8C 84 8A 84 B2 40 46 85 44 85 B2 40 A0 83 -9E 83 B2 40 18 00 0A 18 37 40 1A 80 36 40 BC 80 -35 40 0E 80 34 40 00 80 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 90 04 57 41 52 4D 00 30 40 3E 91 3D 40 -72 91 92 C3 30 01 1E 42 08 18 0E 93 11 24 F2 B2 -21 02 02 20 3E E3 1E 53 F2 D0 0C 00 2B 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 85 06 0D 1B 5B 37 6D 23 00 14 85 E2 82 -52 85 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 85 34 80 80 FF F2 82 28 81 D2 82 52 85 -0B 62 79 74 65 73 20 66 72 65 65 20 24 83 8A 89 -E2 8E 04 43 4F 4C 44 00 92 B3 8A 05 FD 23 B2 40 -04 A5 20 01 B2 40 88 5A CC 01 B2 43 06 02 92 43 -04 02 B2 40 FE FF 02 02 D2 D3 05 02 F2 43 22 02 -F2 D3 26 02 F2 D0 BF 00 47 02 F2 40 BF 00 43 02 -F2 40 40 00 45 02 B2 40 00 A5 60 01 B2 40 FF 1E -80 01 B2 40 B4 00 82 01 B2 40 79 00 84 01 39 40 -40 00 82 43 88 01 92 D2 5E 01 08 18 38 40 59 14 -18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 89 43 -00 20 FC 23 39 40 32 00 29 83 B9 40 D4 91 CE FF -FB 23 B2 40 2C 84 E2 FF B2 40 81 00 80 05 92 42 -02 18 86 05 92 42 04 18 88 05 92 C3 80 05 92 D3 -9A 05 3F 40 80 20 31 40 E0 20 30 12 3A 91 41 3F -38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 09 9A -03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 21 -30 4D 1C 15 B0 12 2A 80 B6 85 0E 86 32 83 B8 92 -CA 86 28 83 BE 89 DA 92 BA 92 29 4E 39 90 86 12 -02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E 02 00 -04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 3E 40 -28 00 B0 12 A2 92 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 C4 21 -B0 12 2A 80 B6 85 CA 86 28 83 18 93 0E 93 21 53 -3E 90 10 00 83 2D E1 2B 1A 93 B2 41 C4 21 DD 3F -87 12 B0 81 80 92 28 93 0C 43 1B 42 C6 21 A2 53 -C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 C4 21 -B0 12 A2 92 0E 93 03 20 3C 40 00 03 21 3C 1E 93 -03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 20 03 -17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 03 20 -3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 08 3C -3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 -3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 -92 53 C4 21 B0 12 A2 92 ED 3F 7A 90 40 00 16 20 -3C 40 20 00 92 53 C4 21 B0 12 F6 92 0C 20 3C 50 -10 00 3E 40 2B 00 B0 12 F6 92 92 92 C0 21 C4 21 -02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 F6 92 -FA 23 3C 50 10 00 B0 12 DE 92 EF 3F 0C 43 1B 42 -C6 21 A2 53 C6 21 87 12 B0 81 80 92 FE 93 FE 90 -26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F -B0 12 F6 92 E1 23 3C 50 80 00 B0 12 DE 92 DC 3F -1C 84 04 52 45 54 49 00 87 12 34 80 00 13 C8 87 -2A 80 34 80 2C 00 20 93 F6 93 3C 94 2E 4E 0E DC -09 4B A4 3F 3E 8C 03 4D 4F 56 84 12 32 94 00 40 -46 94 05 4D 4F 56 2E 42 84 12 32 94 40 40 00 00 -03 41 44 44 84 12 32 94 00 50 60 94 05 41 44 44 -2E 42 84 12 32 94 40 50 6C 94 04 41 44 44 43 00 -84 12 32 94 00 60 7A 94 06 41 44 44 43 2E 42 00 -84 12 32 94 40 60 22 94 04 53 55 42 43 00 84 12 -32 94 00 70 98 94 06 53 55 42 43 2E 42 00 84 12 -32 94 40 70 A6 94 03 53 55 42 84 12 32 94 00 80 -B6 94 05 53 55 42 2E 42 84 12 32 94 40 80 20 8C -03 43 4D 50 84 12 32 94 00 90 D0 94 05 43 4D 50 -2E 42 84 12 32 94 40 90 0E 8C 04 44 41 44 44 00 -84 12 32 94 00 A0 EA 94 06 44 41 44 44 2E 42 00 -84 12 32 94 40 A0 DC 94 03 42 49 54 84 12 32 94 -00 B0 08 95 05 42 49 54 2E 42 84 12 32 94 40 B0 -14 95 03 42 49 43 84 12 32 94 00 C0 22 95 05 42 -49 43 2E 42 84 12 32 94 40 C0 2E 95 03 42 49 53 -84 12 32 94 00 D0 3C 95 05 42 49 53 2E 42 84 12 -32 94 40 D0 00 00 03 58 4F 52 84 12 32 94 00 E0 -56 95 05 58 4F 52 2E 42 84 12 32 94 40 E0 88 94 -03 41 4E 44 84 12 32 94 00 F0 70 95 05 41 4E 44 -2E 42 84 12 32 94 40 F0 B0 81 20 93 8E 95 0A 4C -3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F C2 94 -03 52 52 43 84 12 88 95 00 10 A0 95 05 52 52 43 -2E 42 84 12 88 95 40 10 AC 95 04 53 57 50 42 00 -84 12 88 95 80 10 BA 95 03 52 52 41 84 12 88 95 -00 11 C8 95 05 52 52 41 2E 42 84 12 88 95 40 11 -D4 95 03 53 58 54 84 12 88 95 80 11 00 00 04 50 -55 53 48 00 84 12 88 95 00 12 EE 95 06 50 55 53 -48 2E 42 00 84 12 88 95 40 12 48 95 04 43 41 4C -4C 00 84 12 88 95 80 12 1A 53 0E 4A 87 12 E2 82 -52 85 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 -3A 89 B0 81 80 92 38 96 92 53 C4 21 3E 40 2C 00 -B0 12 2A 80 B6 85 CA 86 28 83 BE 89 EC 93 50 96 -0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C -59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E -94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F E2 95 04 52 -52 43 4D 00 84 12 32 96 50 00 7E 96 04 52 52 41 -4D 00 84 12 32 96 50 01 8C 96 04 52 4C 41 4D 00 -84 12 32 96 50 02 9A 96 04 52 52 55 4D 00 84 12 -32 96 50 03 FC 95 05 50 55 53 48 4D 84 12 32 96 -00 15 B6 96 04 50 4F 50 4D 00 84 12 32 96 00 17 -85 12 00 3C A8 96 03 53 3E 3D 85 12 00 38 D6 96 -02 53 3C 00 85 12 00 34 C4 96 03 30 3E 3D 85 12 -00 30 EA 96 02 30 3C 00 85 12 00 30 00 00 02 55 -3C 00 85 12 00 2C FE 96 03 55 3E 3D 85 12 00 28 -F4 96 03 30 3C 3E 85 12 00 24 12 97 02 30 3D 00 -85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 8A 4E -00 00 A2 53 C6 21 0E 4A 30 4D 08 97 04 54 48 45 -4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 0A 89 -0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D F8 94 -04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C 00 00 -A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 3C 97 05 55 -4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 2A 83 -0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 08 DA -89 48 00 00 A2 53 C6 21 30 4D 7C 95 05 41 47 41 -49 4E 87 12 D0 96 84 97 2A 80 00 00 05 57 48 49 -4C 45 87 12 2A 97 78 80 2A 80 E0 96 06 52 45 50 -45 41 54 00 87 12 D0 96 84 97 42 97 2A 80 E0 97 -3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 00 00 -CA 23 98 42 C6 21 00 00 30 4D 0C 96 03 42 57 31 -84 12 DE 97 E0 21 FC 97 03 42 57 32 84 12 DE 97 -E2 21 08 98 03 42 57 33 84 12 DE 97 E4 21 20 98 -3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 00 00 -8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F -30 4D 00 00 03 46 57 31 84 12 1E 98 E6 21 44 98 -03 46 57 32 84 12 1E 98 E8 21 50 98 03 46 57 33 -84 12 1E 98 EA 21 3E 90 00 30 07 24 3E E0 00 04 -3E B0 00 10 02 24 3E E0 00 08 30 4D 5C 98 04 47 -4F 54 4F 00 87 12 D0 96 B0 89 BE 87 2A 80 00 00 -05 3F 47 4F 54 4F 87 12 66 98 B0 89 BE 87 2A 80 -00 00 03 4A 4D 50 87 12 B0 89 B2 97 2A 80 90 98 -04 3F 4A 4D 50 00 87 12 66 98 B0 89 78 80 84 97 -2A 80 -@FFFE -D4 91 -q diff --git a/binaries/MSP_EXP430FR2355_8MHz.txt b/binaries/MSP_EXP430FR2355_8MHz.txt index 4ad26e7..c286c33 100644 --- a/binaries/MSP_EXP430FR2355_8MHz.txt +++ b/binaries/MSP_EXP430FR2355_8MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 04 00 51 55 40 1F 05 00 18 00 C2 98 8A 8E -2C 01 7B B0 FC 83 0E 84 +10 00 04 00 51 55 40 1F 05 00 18 00 58 96 D0 8C +2D 01 6B B0 B6 82 C8 82 @8000 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 80 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 80 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 80 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 80 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 80 02 3E 52 00 -0E 12 3E 4F 30 4D 96 80 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 80 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 80 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 80 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 81 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 80 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 81 02 31 2D 00 -1E 83 30 4D D8 80 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 81 -02 30 3D 00 1E 83 0E 7E 30 4D 60 81 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 81 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 80 01 3E 3E 8F F4 3B EB 37 0E 81 02 42 4C 00 -85 12 20 00 AC 81 04 42 41 53 45 00 85 12 DC 21 -C8 80 05 53 54 41 54 45 85 12 BE 21 96 81 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 81 06 55 4D 2F -4D 4F 44 00 30 12 62 80 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 80 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 81 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 81 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 82 -02 23 53 00 87 12 32 82 6A 82 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 82 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 81 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 81 -02 44 2E 00 87 12 D2 81 44 80 B0 80 4C 81 64 82 -BC 80 A2 82 7E 82 14 85 DC 84 2A 80 DC 81 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 80 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 82 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 80 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A 82 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 82 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 82 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 81 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 83 03 4B 45 59 30 40 A0 83 -18 42 8C 05 2F 83 8F 4E 00 00 B0 12 FC 83 92 B3 -9C 05 FD 27 1E 42 8C 05 B0 12 0E 84 30 4D 00 83 -06 41 43 43 45 50 54 00 3C 40 6A 84 3B 40 34 84 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E 84 92 B3 9C 05 05 24 18 42 8C 05 38 90 -0A 00 04 20 21 53 39 40 22 84 4D 15 A2 B3 9C 05 -FD 27 B2 40 11 00 8E 05 D2 C3 03 02 30 41 B2 40 -13 00 8E 05 D2 D3 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 84 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 8C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 9C 05 FD 27 82 48 8E 05 30 4D 60 84 -2D 83 92 B3 9C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 82 04 45 4D 49 54 00 30 40 8C 84 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 84 04 45 43 48 -4F 00 B2 40 82 48 58 84 82 43 DE 21 30 4D E0 82 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 84 92 43 -DE 21 30 4D 9C 82 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 84 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE 84 EF 3F 00 85 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 83 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A 85 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C 85 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 83 02 43 -52 00 30 40 46 85 87 12 52 85 02 0D 0A 00 14 85 -2A 80 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA 84 82 53 22 00 82 43 B4 21 -87 12 34 80 52 85 C8 87 34 80 22 00 B6 85 80 85 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 84 82 2E -22 00 87 12 6C 85 34 80 14 85 C8 87 2A 80 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 80 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 80 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 80 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 80 02 3E 52 00 0E 12 3E 4F 30 4D 70 80 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 80 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 80 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 80 +01 21 BE 4F 00 00 3E 4F 30 4D CC 80 02 30 3D 00 +1E 83 0E 7E 30 4D FC 80 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 81 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 80 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 81 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 81 02 23 53 00 87 12 88 81 C0 81 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 81 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 80 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 81 34 80 86 80 D4 80 BA 81 +92 80 F8 81 D4 81 D6 83 42 87 82 83 2A 80 22 81 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 81 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 82 18 42 8C 05 2F 83 8F 4E +00 00 B0 12 B6 82 92 B3 9C 05 FD 27 1E 42 8C 05 +B0 12 C8 82 30 4D A2 B3 9C 05 FD 27 B2 40 11 00 +8E 05 D2 C3 03 02 30 41 B2 40 13 00 8E 05 D2 D3 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 82 +B0 12 B6 82 12 D2 0A 18 F9 3F F0 80 06 41 43 43 +45 50 54 00 3C 40 64 83 3B 40 2E 83 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 83 +92 B3 9C 05 05 24 18 42 8C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 8C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 9C 05 +FD 27 82 48 8E 05 30 4D 5A 83 2D 83 92 B3 9C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 80 04 45 4D 49 +54 00 30 40 86 83 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C 83 04 45 43 48 4F 00 B2 40 82 48 +52 83 82 43 DE 21 30 4D 32 82 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 83 92 43 DE 21 30 4D 20 82 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 83 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 83 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 81 +02 43 52 00 30 40 08 84 87 12 1E 84 02 0D 0A 00 +D6 83 2A 80 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 81 82 53 22 00 82 43 B4 21 87 12 14 84 +1E 84 B0 86 14 84 22 00 80 84 4C 84 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA 83 82 2E 22 00 87 12 38 84 14 84 D6 83 +B0 86 2A 80 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,301 +86,280 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E 80 34 40 00 80 30 4D A2 81 07 3E +00 00 35 40 0E 80 34 40 00 80 30 4D 82 80 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 87 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 87 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 81 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC 84 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 81 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 87 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 80 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E 85 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A 88 B0 81 -B6 85 44 88 3D 40 4C 88 E2 22 5D 3E 4E 88 0A 4E -3E 4F 3D 40 64 88 39 27 3D 40 3E 88 1A E2 BE 21 -B3 27 AD 23 66 88 3E 4F 3D 40 3E 88 BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 8B -CD 3F B6 87 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A 80 3A 88 -A2 88 B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C 81 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 85 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 85 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 81 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 82 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 80 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC 82 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 83 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 86 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 84 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 84 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 87 42 87 80 84 50 87 +3D 40 58 87 CC 22 82 3E 5A 87 0A 4E 3E 4F 3D 40 +70 87 23 27 3D 40 4A 87 1A E2 BE 21 A1 27 B5 23 +72 87 3E 4F 3D 40 4A 87 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 8A CB 3F D2 86 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 80 46 87 AE 87 B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 81 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A 80 -42 85 92 84 DC 84 3A 88 DE 80 70 81 52 85 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E 89 34 80 -30 FF F2 82 8A 81 52 85 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E 89 24 83 D0 88 C0 83 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C 89 86 41 42 4F 52 54 -22 00 87 12 6C 85 34 80 2E 89 C8 87 2A 80 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 90 B0 12 -FC 83 92 C3 9C 05 38 40 50 55 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 9C 05 F2 23 87 12 -6A 90 34 80 DE 21 F2 80 B2 84 52 85 04 1B 5B 37 -6D 00 14 85 54 80 28 83 8A 89 42 85 52 85 05 6C -69 6E 65 3A 14 85 40 81 D2 82 14 85 52 85 04 1B -5B 30 6D 00 14 85 12 89 00 00 83 5B 27 5D 87 12 -B0 89 34 80 34 80 C8 87 C8 87 2A 80 08 86 01 27 -87 12 B0 81 B6 85 0E 86 28 83 BE 89 2A 80 6E 88 -CE 81 81 5C 92 42 C0 21 C4 21 30 4D 9A 89 81 5B -82 43 BE 21 30 4D C2 89 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 83 82 49 53 00 87 12 -C8 81 F2 80 28 83 02 8A 9E 89 34 80 E0 89 C8 87 -2A 80 B0 89 E0 89 2A 80 EA 89 09 49 4D 4D 45 44 +04 84 8C 83 42 87 82 83 46 87 A4 80 0C 81 1E 84 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 88 +14 84 30 FF A0 86 26 81 1E 84 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 88 3C 82 E0 87 C2 86 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E 88 86 41 42 4F +52 54 22 00 87 12 38 84 14 84 40 88 B0 86 2A 80 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 8D +B0 12 B6 82 92 C3 9C 05 38 40 50 55 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 9C 05 F3 23 87 12 +42 8D 14 84 DE 21 EA 80 AC 83 1E 84 04 1B 5B 37 +6D 00 D6 83 58 80 40 82 9A 88 04 84 1E 84 05 6C +69 6E 65 3A D6 83 D0 80 24 82 D6 83 1E 84 04 1B +5B 30 6D 00 D6 83 24 88 00 00 83 5B 27 5D 87 12 +C0 88 14 84 14 84 B0 86 B0 86 2A 80 E8 84 01 27 +87 12 42 87 80 84 EE 84 40 82 CE 88 2A 80 7A 87 +32 81 81 5C 92 42 C0 21 C4 21 30 4D AA 88 81 5B +82 43 BE 21 30 4D D2 88 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 86 82 49 53 00 87 12 +BE 87 EA 80 40 82 12 89 AE 88 14 84 F0 88 B0 86 +2A 80 C0 88 F0 88 2A 80 FA 88 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 85 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 88 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 81 B6 85 0E 86 54 80 -28 83 BE 89 70 81 28 83 66 8A 34 80 34 80 C8 87 -C8 87 34 80 C8 87 C8 87 2A 80 CE 89 81 3B 82 93 -BE 21 A8 27 87 12 34 80 2A 80 C8 87 04 8B D0 89 -2A 80 6C 8A 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 8A BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 8A 01 3A 30 12 A4 8A -87 12 92 85 B0 81 B6 85 CA 8A 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 8A 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 85 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A 89 B0 85 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 8A BA 40 86 12 FC FF E4 3F 16 88 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 8A BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C 8B 06 43 52 45 41 54 -45 00 B0 12 C0 8A BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 88 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 8B 05 44 -45 46 45 52 30 12 12 8B 8B 3F 6E 86 05 3E 42 4F -44 59 2E 52 30 4D 6A 8B 04 43 4F 44 45 00 B0 12 -C0 8A 2A 82 82 4A C6 21 87 12 B2 8A 94 8E 66 8E -2A 80 B8 8B 07 43 4F 44 45 4E 4E 4D 87 12 8C 8A -D0 89 C2 8B 2A 80 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE 8E 04 8B 2A 80 1A 89 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A 8E DA 21 D9 3F E8 8B 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE 8E 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A 80 02 00 A2 52 C6 21 ED 3F 0A 8A 85 48 49 32 -4C 4F 87 12 F2 82 8C 8C C8 87 D0 89 94 8E 66 8E -2A 80 5C 8C 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 83 00 00 2E 53 30 4D -9E 8B 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 83 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E 85 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 8B 85 42 45 47 49 4E 30 40 F2 82 B2 8C -85 55 4E 54 49 4C 39 40 28 83 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA 8B -85 41 47 41 49 4E 39 40 24 83 EF 3F 34 8B 85 57 -48 49 4C 45 87 12 78 8C 78 80 2A 80 22 8A 86 52 -45 50 45 41 54 00 87 12 F6 8C B8 8C 2A 80 92 8C -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C 83 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA 87 84 4C 4F 4F 50 00 39 40 -5E 83 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 83 85 2B 4C 4F -4F 50 39 40 4C 83 E5 3F 48 8D 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E 83 00 00 BA 40 24 83 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A 8D 04 4D 4F 56 45 00 0A 4E +C4 87 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 87 +80 84 EE 84 58 80 40 82 CE 88 0C 81 40 82 5C 89 +14 84 14 84 B0 86 B0 86 14 84 B0 86 B0 86 2A 80 +DE 88 81 3B 82 93 BE 21 B5 27 87 12 14 84 2A 80 +B0 86 FA 89 E0 88 2A 80 62 89 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 89 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A 89 01 3A 30 12 A0 89 92 B3 C6 21 A2 63 C6 21 +87 12 42 87 80 84 C8 89 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 84 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 88 90 87 05 44 45 46 45 52 +B0 12 B8 89 BA 40 30 40 FC FF BA 40 AE 89 FE FF +E3 3F 1E 87 06 43 52 45 41 54 45 00 B0 12 B8 89 +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 8A 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 85 05 3E 42 4F 44 59 2E 52 +30 4D 44 8A 04 43 4F 44 45 00 B0 12 B8 89 A2 82 +C6 21 87 12 D2 8C AC 8C 2A 80 84 8A 07 43 4F 44 +45 4E 4E 4D B0 12 86 89 F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 8C FA 89 2A 80 2C 88 03 41 +53 4D B2 40 B0 8C DA 21 E0 3F AC 8A 06 45 4E 44 +41 53 4D 00 87 12 B4 8A F4 8C 2A 80 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 8C 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A 80 +02 00 A2 52 C6 21 ED 3F 1A 89 85 48 49 32 4C 4F +87 12 A0 86 4A 8B B0 86 E0 88 D2 8C AC 8C 2A 80 +1A 8B 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 82 00 00 2E 53 30 4D 5E 8A +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C 82 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 83 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C 8A 85 42 45 47 49 4E 30 40 A0 86 70 8B 85 55 +4E 54 49 4C 39 40 40 82 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 8A 85 41 +47 41 49 4E 39 40 3C 82 EF 3F 7A 84 85 57 48 49 +4C 45 87 12 36 8B 76 80 2A 80 34 84 86 52 45 50 +45 41 54 00 87 12 B4 8B 76 8B 2A 80 50 8B 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 82 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 86 84 4C 4F 4F 50 00 39 40 76 82 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 82 85 2B 4C 4F 4F 50 +39 40 64 82 E5 3F 06 8C 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE 8C -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 8B -34 80 10 00 34 80 00 00 3C 83 34 80 00 00 C8 87 -5E 83 0A 8E F2 82 34 80 C8 21 44 80 F2 80 C8 87 -FA 80 8A 8B 34 80 CA 21 FA 80 2A 80 AE 89 05 46 -4F 52 54 48 84 12 24 8E 8E 8E C2 91 CC 8E 2E 8E -74 8C 7C 8D F8 8F BE 8E 8E 90 A8 90 D0 8C 34 91 -00 00 CC 8F D8 89 AC 8B 00 00 F0 8C 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 8E AC 97 14 98 60 97 -7E 98 26 97 A2 98 52 94 00 00 1C 97 CC 97 7E 97 -BC 97 62 95 00 00 00 00 B0 98 58 8E 5C 8E 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C 8A 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E 85 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 8D 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 8C 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA 8A 86 5B 54 48 45 4E 5D 00 30 4D 14 8F -86 5B 45 4C 53 45 5D 00 87 12 34 80 00 00 36 81 -B0 81 B6 85 1C 88 44 80 28 83 8E 8F 8A 80 8A 80 -52 85 06 5B 54 48 45 4E 5D 00 EA 8E 32 83 5C 8F -36 85 40 81 54 80 32 83 30 8F 2A 80 8A 80 8A 80 -52 85 06 5B 45 4C 53 45 5D 00 EA 8E 32 83 7C 8F -36 85 40 81 54 80 32 83 2E 8F 2A 80 52 85 04 5B -49 46 5D 00 EA 8E 32 83 30 8F 24 83 2E 8F 36 85 -52 85 05 0D 0A 6B 6F 20 14 85 92 84 2A 88 24 83 -30 8F 20 8F 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 8F 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 81 B6 85 0E 86 6C 80 2A 80 B4 8F 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 81 B6 85 0E 86 -6C 80 64 81 2A 80 E8 8F 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 8D 06 4D 41 52 4B 45 52 00 -B0 12 C0 8A BA 40 84 12 FC FF BA 40 E6 8F FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A 8B 34 8E C4 8E D8 8E 2C 90 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 8E -09 50 57 52 5F 53 54 41 54 45 84 12 24 90 8A 8E -C2 98 0E 8D 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E 90 92 42 0C 18 70 90 EF 3F 60 90 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E 90 92 42 -C6 21 70 90 30 4D 74 90 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 8D 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 84 24 84 B2 40 3E 91 3C 91 -B2 40 8A 8E 0E 18 B2 40 C2 98 0C 18 30 12 7E 90 -B2 40 8C 84 8A 84 B2 40 46 85 44 85 B2 40 A0 83 -9E 83 B2 40 18 00 0A 18 37 40 1A 80 36 40 BC 80 -35 40 0E 80 34 40 00 80 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 90 04 57 41 52 4D 00 30 40 3E 91 3D 40 -72 91 92 C3 30 01 1E 42 08 18 0E 93 11 24 F2 B2 -21 02 02 20 3E E3 1E 53 F2 D0 0C 00 2B 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 85 06 0D 1B 5B 37 6D 23 00 14 85 E2 82 -52 85 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 85 34 80 80 FF F2 82 28 81 D2 82 52 85 -0B 62 79 74 65 73 20 66 72 65 65 20 24 83 8A 89 -E2 8E 04 43 4F 4C 44 00 92 B3 8A 05 FD 23 B2 40 -04 A5 20 01 B2 40 88 5A CC 01 B2 43 06 02 92 43 -04 02 B2 40 FE FF 02 02 D2 D3 05 02 F2 43 22 02 -F2 D3 26 02 F2 D0 BF 00 47 02 F2 40 BF 00 43 02 -F2 40 40 00 45 02 B2 40 00 A5 60 01 B2 40 FF 1E +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 84 +CA 21 F2 80 2A 80 84 12 7E 8C AE 8B 3E 8F DE 8B +BE 88 32 8B 3A 8C 52 90 64 84 66 8D 80 8D 8E 8B +00 8E 00 00 24 90 E8 88 78 8A 00 00 84 12 7E 8C +70 95 D2 95 24 95 46 96 EA 94 00 00 1A 92 00 00 +E0 94 90 95 42 95 80 95 2A 93 00 00 00 00 22 96 +AA 8C 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 8C EE 8C +F4 8C 04 8D 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 89 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 8C D0 8C 58 96 CC 8B 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 8D 92 42 0C 18 +48 8D EF 3F 38 8D 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 8D 92 42 C6 21 48 8D 30 4D 4C 8D +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC 8B 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 82 +DE 82 B2 40 0A 8E 08 8E B2 40 D0 8C 0E 18 B2 40 +58 96 0C 18 30 12 56 8D B2 40 86 83 84 83 B2 40 +08 84 06 84 B2 40 98 82 96 82 B2 40 18 00 0A 18 +37 40 1A 80 36 40 92 80 35 40 0E 80 34 40 00 80 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A 8D +04 57 41 52 4D 00 30 40 0A 8E 3D 40 3E 8E 92 C3 +30 01 1E 42 08 18 0E 93 11 24 F2 B2 21 02 02 20 +3E E3 1E 53 F2 D0 0C 00 2B 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E 84 +06 0D 1B 5B 37 6D 23 00 D6 83 34 82 1E 84 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 83 14 84 30 FF A0 86 +B8 80 24 82 1E 84 0A 62 79 74 65 73 20 66 72 65 +65 00 3C 82 9A 88 82 8B 04 43 4F 4C 44 00 92 B3 +8A 05 FD 23 B2 40 04 A5 20 01 3E 8E B2 40 88 5A +CC 01 B2 43 06 02 B2 40 FE FF 02 02 D2 D3 05 02 +F2 D3 26 02 F2 43 22 02 F2 D3 47 02 F2 40 BF 00 +43 02 B2 40 00 A5 60 01 82 43 88 01 B2 40 FF 1E 80 01 B2 40 B6 00 82 01 B2 40 F4 00 84 01 39 40 -80 00 82 43 88 01 92 D2 5E 01 08 18 38 40 59 14 -18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 89 43 -00 20 FC 23 39 40 32 00 29 83 B9 40 D4 91 CE FF -FB 23 B2 40 2C 84 E2 FF B2 40 81 00 80 05 92 42 -02 18 86 05 92 42 04 18 88 05 92 C3 80 05 92 D3 -9A 05 3F 40 80 20 31 40 E0 20 30 12 3A 91 41 3F -38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 09 9A -03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 21 -30 4D 1C 15 B0 12 2A 80 B6 85 0E 86 32 83 B8 92 -CA 86 28 83 BE 89 DA 92 BA 92 29 4E 39 90 86 12 -02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E 02 00 -04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 3E 40 -28 00 B0 12 A2 92 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 C4 21 -B0 12 2A 80 B6 85 CA 86 28 83 18 93 0E 93 21 53 -3E 90 10 00 83 2D E1 2B 1A 93 B2 41 C4 21 DD 3F -87 12 B0 81 80 92 28 93 0C 43 1B 42 C6 21 A2 53 -C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 C4 21 -B0 12 A2 92 0E 93 03 20 3C 40 00 03 21 3C 1E 93 -03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 20 03 -17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 03 20 -3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 08 3C -3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 -3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 -92 53 C4 21 B0 12 A2 92 ED 3F 7A 90 40 00 16 20 -3C 40 20 00 92 53 C4 21 B0 12 F6 92 0C 20 3C 50 -10 00 3E 40 2B 00 B0 12 F6 92 92 92 C0 21 C4 21 -02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 F6 92 -FA 23 3C 50 10 00 B0 12 DE 92 EF 3F 0C 43 1B 42 -C6 21 A2 53 C6 21 87 12 B0 81 80 92 FE 93 FE 90 -26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F -B0 12 F6 92 E1 23 3C 50 80 00 B0 12 DE 92 DC 3F -1C 84 04 52 45 54 49 00 87 12 34 80 00 13 C8 87 -2A 80 34 80 2C 00 20 93 F6 93 3C 94 2E 4E 0E DC -09 4B A4 3F 3E 8C 03 4D 4F 56 84 12 32 94 00 40 -46 94 05 4D 4F 56 2E 42 84 12 32 94 40 40 00 00 -03 41 44 44 84 12 32 94 00 50 60 94 05 41 44 44 -2E 42 84 12 32 94 40 50 6C 94 04 41 44 44 43 00 -84 12 32 94 00 60 7A 94 06 41 44 44 43 2E 42 00 -84 12 32 94 40 60 22 94 04 53 55 42 43 00 84 12 -32 94 00 70 98 94 06 53 55 42 43 2E 42 00 84 12 -32 94 40 70 A6 94 03 53 55 42 84 12 32 94 00 80 -B6 94 05 53 55 42 2E 42 84 12 32 94 40 80 20 8C -03 43 4D 50 84 12 32 94 00 90 D0 94 05 43 4D 50 -2E 42 84 12 32 94 40 90 0E 8C 04 44 41 44 44 00 -84 12 32 94 00 A0 EA 94 06 44 41 44 44 2E 42 00 -84 12 32 94 40 A0 DC 94 03 42 49 54 84 12 32 94 -00 B0 08 95 05 42 49 54 2E 42 84 12 32 94 40 B0 -14 95 03 42 49 43 84 12 32 94 00 C0 22 95 05 42 -49 43 2E 42 84 12 32 94 40 C0 2E 95 03 42 49 53 -84 12 32 94 00 D0 3C 95 05 42 49 53 2E 42 84 12 -32 94 40 D0 00 00 03 58 4F 52 84 12 32 94 00 E0 -56 95 05 58 4F 52 2E 42 84 12 32 94 40 E0 88 94 -03 41 4E 44 84 12 32 94 00 F0 70 95 05 41 4E 44 -2E 42 84 12 32 94 40 F0 B0 81 20 93 8E 95 0A 4C -3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F C2 94 -03 52 52 43 84 12 88 95 00 10 A0 95 05 52 52 43 -2E 42 84 12 88 95 40 10 AC 95 04 53 57 50 42 00 -84 12 88 95 80 10 BA 95 03 52 52 41 84 12 88 95 -00 11 C8 95 05 52 52 41 2E 42 84 12 88 95 40 11 -D4 95 03 53 58 54 84 12 88 95 80 11 00 00 04 50 -55 53 48 00 84 12 88 95 00 12 EE 95 06 50 55 53 -48 2E 42 00 84 12 88 95 40 12 48 95 04 43 41 4C -4C 00 84 12 88 95 80 12 1A 53 0E 4A 87 12 E2 82 -52 85 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 -3A 89 B0 81 80 92 38 96 92 53 C4 21 3E 40 2C 00 -B0 12 2A 80 B6 85 CA 86 28 83 BE 89 EC 93 50 96 -0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C -59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E -94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F E2 95 04 52 -52 43 4D 00 84 12 32 96 50 00 7E 96 04 52 52 41 -4D 00 84 12 32 96 50 01 8C 96 04 52 4C 41 4D 00 -84 12 32 96 50 02 9A 96 04 52 52 55 4D 00 84 12 -32 96 50 03 FC 95 05 50 55 53 48 4D 84 12 32 96 -00 15 B6 96 04 50 4F 50 4D 00 84 12 32 96 00 17 -85 12 00 3C A8 96 03 53 3E 3D 85 12 00 38 D6 96 -02 53 3C 00 85 12 00 34 C4 96 03 30 3E 3D 85 12 -00 30 EA 96 02 30 3C 00 85 12 00 30 00 00 02 55 -3C 00 85 12 00 2C FE 96 03 55 3E 3D 85 12 00 28 -F4 96 03 30 3C 3E 85 12 00 24 12 97 02 30 3D 00 -85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 8A 4E -00 00 A2 53 C6 21 0E 4A 30 4D 08 97 04 54 48 45 -4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 0A 89 -0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D F8 94 -04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C 00 00 -A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 3C 97 05 55 -4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 2A 83 -0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 08 DA -89 48 00 00 A2 53 C6 21 30 4D 7C 95 05 41 47 41 -49 4E 87 12 D0 96 84 97 2A 80 00 00 05 57 48 49 -4C 45 87 12 2A 97 78 80 2A 80 E0 96 06 52 45 50 -45 41 54 00 87 12 D0 96 84 97 42 97 2A 80 E0 97 -3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 00 00 -CA 23 98 42 C6 21 00 00 30 4D 0C 96 03 42 57 31 -84 12 DE 97 E0 21 FC 97 03 42 57 32 84 12 DE 97 -E2 21 08 98 03 42 57 33 84 12 DE 97 E4 21 20 98 -3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 00 00 -8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F -30 4D 00 00 03 46 57 31 84 12 1E 98 E6 21 44 98 -03 46 57 32 84 12 1E 98 E8 21 50 98 03 46 57 33 -84 12 1E 98 EA 21 3E 90 00 30 07 24 3E E0 00 04 -3E B0 00 10 02 24 3E E0 00 08 30 4D 5C 98 04 47 -4F 54 4F 00 87 12 D0 96 B0 89 BE 87 2A 80 00 00 -05 3F 47 4F 54 4F 87 12 66 98 B0 89 BE 87 2A 80 -00 00 03 4A 4D 50 87 12 B0 89 B2 97 2A 80 90 98 -04 3F 4A 4D 50 00 87 12 66 98 B0 89 78 80 84 97 -2A 80 +80 00 92 D2 5E 01 08 18 38 40 59 14 18 83 FE 23 +19 83 FA 23 39 40 00 10 29 83 89 43 00 20 FC 23 +39 40 32 00 29 83 B9 40 9C 8E CE FF FB 23 B2 40 +26 83 E2 FF B2 40 81 00 80 05 92 42 02 18 86 05 +92 42 04 18 88 05 92 C3 80 05 92 D3 9A 05 3F 40 +80 20 31 40 E0 20 30 12 06 8E 4F 3F 88 8E 07 43 +4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B +0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 +FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D B2 89 +86 5B 54 48 45 4E 5D 00 30 4D 70 8F 86 5B 45 4C +53 45 5D 00 87 12 14 84 00 00 C6 80 42 87 80 84 +24 87 34 80 40 82 E6 8F 44 80 1E 84 06 5B 54 48 +45 4E 5D 00 46 8F 4A 82 B6 8F F8 83 D0 80 58 80 +4A 82 8C 8F 2A 80 44 80 1E 84 06 5B 45 4C 53 45 +5D 00 46 8F 4A 82 D4 8F F8 83 D0 80 58 80 4A 82 +8A 8F 2A 80 1E 84 04 5B 49 46 5D 00 46 8F 4A 82 +8C 8F 3C 82 8A 8F F8 83 1E 84 05 0D 0A 6B 6F 20 +D6 83 8C 83 32 87 3C 82 8C 8F 7C 8F 84 5B 49 46 +5D 00 0E 93 3E 4F BE 27 30 4D FC 8F 89 5B 44 45 +46 49 4E 45 44 5D 87 12 42 87 80 84 EE 84 6A 80 +2A 80 0C 90 8B 5B 55 4E 44 45 46 49 4E 45 44 5D +87 12 42 87 80 84 EE 84 6A 80 00 81 2A 80 40 90 +3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F 30 40 56 8D +48 8C 06 4D 41 52 4B 45 52 00 B0 12 B8 89 BA 40 +84 12 FC FF BA 40 3E 90 FE FF 9A 42 C8 21 00 00 +28 83 8A 48 02 00 A2 52 C6 21 30 40 00 8A 1C 15 +B0 12 2A 80 80 84 EE 84 4A 82 94 90 AA 85 40 82 +CE 88 AE 90 96 90 39 4E 39 80 86 12 08 24 19 53 +02 20 2E 4E 04 3C 2E 53 19 53 01 24 2E 82 1B 17 +30 41 3E 40 28 00 B0 12 7E 90 19 42 C6 21 A2 53 +C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 +92 53 C4 21 B0 12 2A 80 80 84 AA 85 40 82 EC 90 +E2 90 21 53 3E 90 10 00 7D 2D E1 2B EE 90 B2 41 +C4 21 DD 3F 87 12 42 87 74 84 FC 90 0C 43 1B 42 +C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 27 20 +92 53 C4 21 B0 12 7E 90 3C 40 00 03 0E 93 1C 24 +3C 40 10 03 1E 93 18 24 3C 40 20 03 2E 93 14 24 +3C 40 20 02 2E 92 10 24 3C 40 30 02 3E 92 0C 24 +3C 40 30 03 3E 93 08 24 3C 40 30 00 19 42 C6 21 +A2 53 C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 +26 00 07 20 3C 40 10 02 92 53 C4 21 B0 12 7E 90 +ED 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 +B0 12 CA 90 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 +CA 90 92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 +0C 5E DA 3F B0 12 CA 90 FA 23 3C 50 10 00 B0 12 +B2 90 EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 +42 87 74 84 C6 91 FE 90 26 00 00 00 3E 40 20 00 +03 20 3C 50 82 00 C8 3F B0 12 CA 90 E1 23 3C 50 +80 00 B0 12 B2 90 DC 3F D6 82 04 52 45 54 49 00 +87 12 14 84 00 13 B0 86 2A 80 14 84 2C 00 F4 90 +BE 91 04 92 09 4B 2E 4E 0E DC A4 3F FC 8A 03 4D +4F 56 84 12 FA 91 00 40 0E 92 05 4D 4F 56 2E 42 +84 12 FA 91 40 40 00 00 03 41 44 44 84 12 FA 91 +00 50 28 92 05 41 44 44 2E 42 84 12 FA 91 40 50 +34 92 04 41 44 44 43 00 84 12 FA 91 00 60 42 92 +06 41 44 44 43 2E 42 00 84 12 FA 91 40 60 EA 91 +04 53 55 42 43 00 84 12 FA 91 00 70 60 92 06 53 +55 42 43 2E 42 00 84 12 FA 91 40 70 6E 92 03 53 +55 42 84 12 FA 91 00 80 7E 92 05 53 55 42 2E 42 +84 12 FA 91 40 80 DE 8A 03 43 4D 50 84 12 FA 91 +00 90 98 92 05 43 4D 50 2E 42 84 12 FA 91 40 90 +CC 8A 04 44 41 44 44 00 84 12 FA 91 00 A0 B2 92 +06 44 41 44 44 2E 42 00 84 12 FA 91 40 A0 A4 92 +03 42 49 54 84 12 FA 91 00 B0 D0 92 05 42 49 54 +2E 42 84 12 FA 91 40 B0 DC 92 03 42 49 43 84 12 +FA 91 00 C0 EA 92 05 42 49 43 2E 42 84 12 FA 91 +40 C0 F6 92 03 42 49 53 84 12 FA 91 00 D0 04 93 +05 42 49 53 2E 42 84 12 FA 91 40 D0 00 00 03 58 +4F 52 84 12 FA 91 00 E0 1E 93 05 58 4F 52 2E 42 +84 12 FA 91 40 E0 50 92 03 41 4E 44 84 12 FA 91 +00 F0 38 93 05 41 4E 44 2E 42 84 12 FA 91 40 F0 +42 87 F4 90 56 93 0A 4C 3C F0 70 00 8A 10 3A F0 +0F 00 0C DA 4F 3F 8A 92 03 52 52 43 84 12 50 93 +00 10 68 93 05 52 52 43 2E 42 84 12 50 93 40 10 +74 93 04 53 57 50 42 00 84 12 50 93 80 10 82 93 +03 52 52 41 84 12 50 93 00 11 90 93 05 52 52 41 +2E 42 84 12 50 93 40 11 9C 93 03 53 58 54 84 12 +50 93 80 11 00 00 04 50 55 53 48 00 84 12 50 93 +00 12 B6 93 06 50 55 53 48 2E 42 00 84 12 50 93 +40 12 10 93 04 43 41 4C 4C 00 84 12 50 93 80 12 +1A 53 0E 4A 87 12 34 82 1E 84 0D 6F 75 74 20 6F +66 20 62 6F 75 6E 64 73 4C 88 42 87 74 84 00 94 +92 53 C4 21 3E 40 2C 00 B0 12 2A 80 80 84 AA 85 +40 82 CE 88 B4 91 18 94 0A 4E 3E 4F 1A 83 E0 33 +29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A +38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 +5A 06 8F 3F AA 93 04 52 52 43 4D 00 84 12 FA 93 +50 00 46 94 04 52 52 41 4D 00 84 12 FA 93 50 01 +54 94 04 52 4C 41 4D 00 84 12 FA 93 50 02 62 94 +04 52 52 55 4D 00 84 12 FA 93 50 03 C4 93 05 50 +55 53 48 4D 84 12 FA 93 00 15 7E 94 04 50 4F 50 +4D 00 84 12 FA 93 00 17 70 94 03 53 3E 3D 85 12 +00 38 9A 94 02 53 3C 00 85 12 00 34 8C 94 03 30 +3E 3D 85 12 00 30 AE 94 02 30 3C 00 85 12 00 30 +00 00 02 55 3C 00 85 12 00 2C C2 94 03 55 3E 3D +85 12 00 28 B8 94 03 30 3C 3E 85 12 00 24 D6 94 +02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 +C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D CC 94 +04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 +29 53 0A 89 0A 11 3A 90 00 02 63 2F 88 DA 00 00 +30 4D C0 92 04 45 4C 53 45 00 1A 42 C6 21 BA 40 +00 3C 00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F +00 95 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 +C6 21 2A 83 0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 +FF 03 08 DA 89 48 00 00 A2 53 C6 21 30 4D 44 93 +05 41 47 41 49 4E 0A 4E 38 40 00 3C E7 3F 00 00 +05 57 48 49 4C 45 87 12 EE 94 76 80 2A 80 A4 94 +06 52 45 50 45 41 54 00 87 12 76 95 06 95 2A 80 +A2 95 3D 41 08 4E 3E 4F 2A 48 B2 92 C4 21 CD 2F +98 42 C6 21 00 00 30 4D D4 93 03 42 57 31 84 12 +A0 95 00 00 BA 95 03 42 57 32 84 12 A0 95 00 00 +C6 95 03 42 57 33 84 12 A0 95 00 00 DE 95 3D 41 +1A 42 C6 21 28 4E B2 92 C4 21 90 2B BA 4F 00 00 +A2 53 C6 21 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 +57 31 84 12 DC 95 00 00 FE 95 03 46 57 32 84 12 +DC 95 00 00 0A 96 03 46 57 33 84 12 DC 95 00 00 +00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 +00 04 3E B0 00 10 02 24 3E E0 00 08 87 12 C0 88 +DA 86 2A 80 16 96 04 47 4F 54 4F 00 2F 83 8F 4E +00 00 3E 40 00 3C F2 3F @FFFE -D4 91 +9C 8E q diff --git a/binaries/MSP_EXP430FR2433_16MHz.txt b/binaries/MSP_EXP430FR2433_16MHz.txt index 781937d..5464dd7 100644 --- a/binaries/MSP_EXP430FR2433_16MHz.txt +++ b/binaries/MSP_EXP430FR2433_16MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 A1 F7 80 3E 05 00 18 00 C4 DC 8A D2 -2C 01 7B B0 FC C7 0E C8 +10 00 08 00 A1 F7 80 3E 05 00 18 00 60 DA D0 D0 +2D 01 6B B0 B6 C6 C8 C6 @C400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 D2 C3 02 02 30 41 B2 40 -13 00 0E 05 D2 D3 02 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 C8 CB 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 C8 CB 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C4 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C4 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C4 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C4 02 3E 52 00 0E 12 3E 4F 30 4D 70 C4 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C4 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C4 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C4 +01 21 BE 4F 00 00 3E 4F 30 4D CC C4 02 30 3D 00 +1E 83 0E 7E 30 4D FC C4 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C5 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C4 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 C5 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 C5 02 23 53 00 87 12 88 C5 C0 C5 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C5 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C4 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C5 34 C4 86 C4 D4 C4 BA C5 +92 C4 F8 C5 D4 C5 D6 C7 42 CB 82 C7 2A C4 22 C5 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C5 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C6 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 C6 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 C6 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 D2 C3 02 02 30 41 B2 40 13 00 0E 05 D2 D3 +02 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C6 +B0 12 B6 C6 12 D2 0A 18 F9 3F F0 C4 06 41 43 43 +45 50 54 00 3C 40 64 C7 3B 40 2E C7 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C7 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A C7 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C4 04 45 4D 49 +54 00 30 40 86 C7 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C C7 04 45 43 48 4F 00 B2 40 82 48 +52 C7 82 43 DE 21 30 4D 32 C6 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C7 92 43 DE 21 30 4D 20 C6 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C7 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C7 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C5 +02 43 52 00 30 40 08 C8 87 12 1E C8 02 0D 0A 00 +D6 C7 2A C4 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C5 82 53 22 00 82 43 B4 21 87 12 14 C8 +1E C8 B0 CA 14 C8 22 00 80 C8 4C C8 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA C7 82 2E 22 00 87 12 38 C8 14 C8 D6 C7 +B0 CA 2A C4 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,301 +86,280 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D A2 C5 07 3E +00 00 35 40 0E C4 34 40 00 C4 30 4D 82 C4 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 CB 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 CB 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C5 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 CB 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A CC B0 C5 -B6 C9 44 CC 3D 40 4C CC E2 22 5D 3E 4E CC 0A 4E -3E 4F 3D 40 64 CC 39 27 3D 40 3E CC 1A E2 BE 21 -B3 27 AD 23 66 CC 3E 4F 3D 40 3E CC BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CF -CD 3F B6 CB 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 3A CC -A2 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 C9 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C9 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C6 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 C4 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC C6 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 C7 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE CA 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 C8 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C8 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 CB 42 CB 80 C8 50 CB +3D 40 58 CB CC 22 82 3E 5A CB 0A 4E 3E 4F 3D 40 +70 CB 23 27 3D 40 4A CB 1A E2 BE 21 A1 27 B5 23 +72 CB 3E 4F 3D 40 4A CB B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CE CB 3F D2 CA +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C4 46 CB AE CB B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 C5 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A C4 -42 C9 92 C8 DC C8 3A CC DE C4 70 C5 52 C9 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CD 34 C4 -30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CD 24 C7 D0 CC C0 C7 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C CD 86 41 42 4F 52 54 -22 00 87 12 6C C9 34 C4 2E CD C8 CB 2A C4 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D4 B0 12 -FC C7 92 C3 1C 05 38 40 A0 AA 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 87 12 -6A D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B 5B 37 -6D 00 14 C9 54 C4 28 C7 8A CD 42 C9 52 C9 05 6C -69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 04 1B -5B 30 6D 00 14 C9 12 CD 00 00 83 5B 27 5D 87 12 -B0 CD 34 C4 34 C4 C8 CB C8 CB 2A C4 08 CA 01 27 -87 12 B0 C5 B6 C9 0E CA 28 C7 BE CD 2A C4 6E CC -CE C5 81 5C 92 42 C0 21 C4 21 30 4D 9A CD 81 5B -82 43 BE 21 30 4D C2 CD 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 87 12 -C8 C5 F2 C4 28 C7 02 CE 9E CD 34 C4 E0 CD C8 CB -2A C4 B0 CD E0 CD 2A C4 EA CD 09 49 4D 4D 45 44 +04 C8 8C C7 42 CB 82 C7 46 CB A4 C4 0C C5 1E C8 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CC +14 C8 30 FF A0 CA 26 C5 1E C8 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CC 3C C6 E0 CB C2 CA 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E CC 86 41 42 4F +52 54 22 00 87 12 38 C8 14 C8 40 CC B0 CA 2A C4 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 D1 +B0 12 B6 C6 92 C3 1C 05 38 40 A0 AA 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 1C 05 F3 23 87 12 +42 D1 14 C8 DE 21 EA C4 AC C7 1E C8 04 1B 5B 37 +6D 00 D6 C7 58 C4 40 C6 9A CC 04 C8 1E C8 05 6C +69 6E 65 3A D6 C7 D0 C4 24 C6 D6 C7 1E C8 04 1B +5B 30 6D 00 D6 C7 24 CC 00 00 83 5B 27 5D 87 12 +C0 CC 14 C8 14 C8 B0 CA B0 CA 2A C4 E8 C8 01 27 +87 12 42 CB 80 C8 EE C8 40 C6 CE CC 2A C4 7A CB +32 C5 81 5C 92 42 C0 21 C4 21 30 4D AA CC 81 5B +82 43 BE 21 30 4D D2 CC 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A CA 82 49 53 00 87 12 +BE CB EA C4 40 C6 12 CD AE CC 14 C8 F0 CC B0 CA +2A C4 C0 CC F0 CC 2A C4 FA CC 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 CC 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA 54 C4 -28 C7 BE CD 70 C5 28 C7 66 CE 34 C4 34 C4 C8 CB -C8 CB 34 C4 C8 CB C8 CB 2A C4 CE CD 81 3B 82 93 -BE 21 A8 27 87 12 34 C4 2A C4 C8 CB 04 CF D0 CD -2A C4 6C CE 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CE BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 CE 01 3A 30 12 A4 CE -87 12 92 C9 B0 C5 B6 C9 CA CE 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CE 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C9 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CD B0 C9 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CE BA 40 86 12 FC FF E4 3F 16 CC 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CE BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CF 06 43 52 45 41 54 -45 00 B0 12 C0 CE BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CC 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CF 05 44 -45 46 45 52 30 12 12 CF 8B 3F 6E CA 05 3E 42 4F -44 59 2E 52 30 4D 6A CF 04 43 4F 44 45 00 B0 12 -C0 CE 2A 82 82 4A C6 21 87 12 B2 CE 94 D2 66 D2 -2A C4 B8 CF 07 43 4F 44 45 4E 4E 4D 87 12 8C CE -D0 CD C2 CF 2A C4 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D2 04 CF 2A C4 1A CD 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A D2 DA 21 D9 3F E8 CF 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE D2 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A C4 02 00 A2 52 C6 21 ED 3F 0A CE 85 48 49 32 -4C 4F 87 12 F2 C6 8C D0 C8 CB D0 CD 94 D2 66 D2 -2A C4 5C D0 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 30 4D -9E CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C9 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 CF 85 42 45 47 49 4E 30 40 F2 C6 B2 D0 -85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CF -85 41 47 41 49 4E 39 40 24 C7 EF 3F 34 CF 85 57 -48 49 4C 45 87 12 78 D0 78 C4 2A C4 22 CE 86 52 -45 50 45 41 54 00 87 12 F6 D0 B8 D0 2A C4 92 D0 -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA CB 84 4C 4F 4F 50 00 39 40 -5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B 4C 4F -4F 50 39 40 4C C7 E5 3F 48 D1 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A D1 04 4D 4F 56 45 00 0A 4E +C4 CB 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 CB +80 C8 EE C8 58 C4 40 C6 CE CC 0C C5 40 C6 5C CD +14 C8 14 C8 B0 CA B0 CA 14 C8 B0 CA B0 CA 2A C4 +DE CC 81 3B 82 93 BE 21 B5 27 87 12 14 C8 2A C4 +B0 CA FA CD E0 CC 2A C4 62 CD 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CD 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A CD 01 3A 30 12 A0 CD 92 B3 C6 21 A2 63 C6 21 +87 12 42 CB 80 C8 C8 CD 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C8 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CC 90 CB 05 44 45 46 45 52 +B0 12 B8 CD BA 40 30 40 FC FF BA 40 AE CD FE FF +E3 3F 1E CB 06 43 52 45 41 54 45 00 B0 12 B8 CD +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CE 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C9 05 3E 42 4F 44 59 2E 52 +30 4D 44 CE 04 43 4F 44 45 00 B0 12 B8 CD A2 82 +C6 21 87 12 D2 D0 AC D0 2A C4 84 CE 07 43 4F 44 +45 4E 4E 4D B0 12 86 CD F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 D0 FA CD 2A C4 2C CC 03 41 +53 4D B2 40 B0 D0 DA 21 E0 3F AC CE 06 45 4E 44 +41 53 4D 00 87 12 B4 CE F4 D0 2A C4 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 D0 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A C4 +02 00 A2 52 C6 21 ED 3F 1A CD 85 48 49 32 4C 4F +87 12 A0 CA 4A CF B0 CA E0 CC D2 D0 AC D0 2A C4 +1A CF 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 C6 00 00 2E 53 30 4D 5E CE +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C C6 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C7 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C CE 85 42 45 47 49 4E 30 40 A0 CA 70 CF 85 55 +4E 54 49 4C 39 40 40 C6 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CE 85 41 +47 41 49 4E 39 40 3C C6 EF 3F 7A C8 85 57 48 49 +4C 45 87 12 36 CF 76 C4 2A C4 34 C8 86 52 45 50 +45 41 54 00 87 12 B4 CF 76 CF 2A C4 50 CF 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 C6 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 CA 84 4C 4F 4F 50 00 39 40 76 C6 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C6 85 2B 4C 4F 4F 50 +39 40 64 C6 E5 3F 06 D0 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE D0 -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CF -34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 C8 CB -5E C7 0A D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 C8 CB -FA C4 8A CF 34 C4 CA 21 FA C4 2A C4 AE CD 05 46 -4F 52 54 48 84 12 24 D2 8E D2 C4 D5 CC D2 2E D2 -74 D0 7C D1 F8 D3 BE D2 8E D4 A8 D4 D0 D0 34 D5 -00 00 CC D3 D8 CD AC CF 00 00 F0 D0 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D2 AE DB 16 DC 62 DB -80 DC 28 DB A4 DC 54 D8 00 00 1E DB CE DB 80 DB -BE DB 64 D9 00 00 00 00 B2 DC 58 D2 5C D2 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C CE 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 D1 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 D0 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CE 86 5B 54 48 45 4E 5D 00 30 4D 14 D3 -86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 36 C5 -B0 C5 B6 C9 1C CC 44 C4 28 C7 8E D3 8A C4 8A C4 -52 C9 06 5B 54 48 45 4E 5D 00 EA D2 32 C7 5C D3 -36 C9 40 C5 54 C4 32 C7 30 D3 2A C4 8A C4 8A C4 -52 C9 06 5B 45 4C 53 45 5D 00 EA D2 32 C7 7C D3 -36 C9 40 C5 54 C4 32 C7 2E D3 2A C4 52 C9 04 5B -49 46 5D 00 EA D2 32 C7 30 D3 24 C7 2E D3 36 C9 -52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 2A CC 24 C7 -30 D3 20 D3 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C5 B6 C9 0E CA 6C C4 2A C4 B4 D3 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 0E CA -6C C4 64 C5 2A C4 E8 D3 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 D1 06 4D 41 52 4B 45 52 00 -B0 12 C0 CE BA 40 84 12 FC FF BA 40 E6 D3 FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A CF 34 D2 C4 D2 D8 D2 2C D4 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D2 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D4 8A D2 -C4 DC 0E D1 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D4 92 42 0C 18 70 D4 EF 3F 60 D4 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E D4 92 42 -C6 21 70 D4 30 4D 74 D4 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 D1 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C8 24 C8 B2 40 3E D5 3C D5 -B2 40 8A D2 0E 18 B2 40 C4 DC 0C 18 30 12 7E D4 -B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 A0 C7 -9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 BC C4 -35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 D4 04 57 41 52 4D 00 30 40 3E D5 3D 40 -74 D5 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 -10 00 00 02 02 20 3E E3 1E 53 F2 D0 30 00 0A 02 -3E 90 0A 00 B1 27 3E 90 16 00 AE 2F 2E 93 7D 27 -86 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -8A CD E2 D2 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 43 06 02 -B2 40 03 00 04 02 B2 40 FC FF 02 02 D2 D3 02 02 -F2 43 22 02 F2 D3 26 02 F2 40 A5 00 A1 01 F2 40 -10 00 A0 01 D2 43 A1 01 B2 40 00 A5 60 01 B2 40 -FF 1E 80 01 B2 40 BA 00 82 01 B2 40 E8 01 84 01 -39 40 00 01 82 43 88 01 92 D2 5E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 -89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 D6 D5 -DA FF FB 23 B2 40 2C C8 E4 FF B2 40 81 00 00 05 -92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 -92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 3A D5 -40 3F 38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 -09 9A 03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A -C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 0E CA 32 C7 -BA D6 CA CA 28 C7 BE CD DC D6 BC D6 29 4E 39 90 -86 12 02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E -02 00 04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 -3E 40 28 00 B0 12 A4 D6 19 42 C6 21 A2 53 C6 21 -89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 -C4 21 B0 12 2A C4 B6 C9 CA CA 28 C7 1A D7 10 D7 -21 53 3E 90 10 00 83 2D E1 2B 1C D7 B2 41 C4 21 -DD 3F 87 12 B0 C5 82 D6 2A D7 0C 43 1B 42 C6 21 -A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 -C4 21 B0 12 A4 D6 0E 93 03 20 3C 40 00 03 21 3C -1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 -20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 -03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 -08 3C 3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 -10 02 92 53 C4 21 B0 12 A4 D6 ED 3F 7A 90 40 00 -16 20 3C 40 20 00 92 53 C4 21 B0 12 F8 D6 0C 20 -3C 50 10 00 3E 40 2B 00 B0 12 F8 D6 92 92 C0 21 -C4 21 02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 -F8 D6 FA 23 3C 50 10 00 B0 12 E0 D6 EF 3F 0C 43 -1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 82 D6 00 D8 -FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 -C8 3F B0 12 F8 D6 E1 23 3C 50 80 00 B0 12 E0 D6 -DC 3F 1C C8 04 52 45 54 49 00 87 12 34 C4 00 13 -C8 CB 2A C4 34 C4 2C 00 22 D7 F8 D7 3E D8 2E 4E -0E DC 09 4B A4 3F 3E D0 03 4D 4F 56 84 12 34 D8 -00 40 48 D8 05 4D 4F 56 2E 42 84 12 34 D8 40 40 -00 00 03 41 44 44 84 12 34 D8 00 50 62 D8 05 41 -44 44 2E 42 84 12 34 D8 40 50 6E D8 04 41 44 44 -43 00 84 12 34 D8 00 60 7C D8 06 41 44 44 43 2E -42 00 84 12 34 D8 40 60 24 D8 04 53 55 42 43 00 -84 12 34 D8 00 70 9A D8 06 53 55 42 43 2E 42 00 -84 12 34 D8 40 70 A8 D8 03 53 55 42 84 12 34 D8 -00 80 B8 D8 05 53 55 42 2E 42 84 12 34 D8 40 80 -20 D0 03 43 4D 50 84 12 34 D8 00 90 D2 D8 05 43 -4D 50 2E 42 84 12 34 D8 40 90 0E D0 04 44 41 44 -44 00 84 12 34 D8 00 A0 EC D8 06 44 41 44 44 2E -42 00 84 12 34 D8 40 A0 DE D8 03 42 49 54 84 12 -34 D8 00 B0 0A D9 05 42 49 54 2E 42 84 12 34 D8 -40 B0 16 D9 03 42 49 43 84 12 34 D8 00 C0 24 D9 -05 42 49 43 2E 42 84 12 34 D8 40 C0 30 D9 03 42 -49 53 84 12 34 D8 00 D0 3E D9 05 42 49 53 2E 42 -84 12 34 D8 40 D0 00 00 03 58 4F 52 84 12 34 D8 -00 E0 58 D9 05 58 4F 52 2E 42 84 12 34 D8 40 E0 -8A D8 03 41 4E 44 84 12 34 D8 00 F0 72 D9 05 41 -4E 44 2E 42 84 12 34 D8 40 F0 B0 C5 22 D7 90 D9 -0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F -C4 D8 03 52 52 43 84 12 8A D9 00 10 A2 D9 05 52 -52 43 2E 42 84 12 8A D9 40 10 AE D9 04 53 57 50 -42 00 84 12 8A D9 80 10 BC D9 03 52 52 41 84 12 -8A D9 00 11 CA D9 05 52 52 41 2E 42 84 12 8A D9 -40 11 D6 D9 03 53 58 54 84 12 8A D9 80 11 00 00 -04 50 55 53 48 00 84 12 8A D9 00 12 F0 D9 06 50 -55 53 48 2E 42 00 84 12 8A D9 40 12 4A D9 04 43 -41 4C 4C 00 84 12 8A D9 80 12 1A 53 0E 4A 87 12 -E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 62 6F 75 6E -64 73 3A CD B0 C5 82 D6 3A DA 92 53 C4 21 3E 40 -2C 00 B0 12 2A C4 B6 C9 CA CA 28 C7 BE CD EE D7 -52 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 -08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F -5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F E4 D9 -04 52 52 43 4D 00 84 12 34 DA 50 00 80 DA 04 52 -52 41 4D 00 84 12 34 DA 50 01 8E DA 04 52 4C 41 -4D 00 84 12 34 DA 50 02 9C DA 04 52 52 55 4D 00 -84 12 34 DA 50 03 FE D9 05 50 55 53 48 4D 84 12 -34 DA 00 15 B8 DA 04 50 4F 50 4D 00 84 12 34 DA -00 17 85 12 00 3C AA DA 03 53 3E 3D 85 12 00 38 -D8 DA 02 53 3C 00 85 12 00 34 C6 DA 03 30 3E 3D -85 12 00 30 EC DA 02 30 3C 00 85 12 00 30 00 00 -02 55 3C 00 85 12 00 2C 00 DB 03 55 3E 3D 85 12 -00 28 F6 DA 03 30 3C 3E 85 12 00 24 14 DB 02 30 -3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 -8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D 0A DB 04 54 -48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 -0A 89 0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D -FA D8 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C -00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 3E DB -05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 -2A 83 0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 -08 DA 89 48 00 00 A2 53 C6 21 30 4D 7E D9 05 41 -47 41 49 4E 87 12 D2 DA 86 DB 2A C4 00 00 05 57 -48 49 4C 45 87 12 2C DB 78 C4 2A C4 E2 DA 06 52 -45 50 45 41 54 00 87 12 D2 DA 86 DB 44 DB 2A C4 -E2 DB 3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 -00 00 CA 23 98 42 C6 21 00 00 30 4D 0E DA 03 42 -57 31 84 12 E0 DB E0 21 FE DB 03 42 57 32 84 12 -E0 DB E2 21 0A DC 03 42 57 33 84 12 E0 DB E4 21 -22 DC 3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 -00 00 8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 -3E 4F 30 4D 00 00 03 46 57 31 84 12 20 DC E6 21 -46 DC 03 46 57 32 84 12 20 DC E8 21 52 DC 03 46 -57 33 84 12 20 DC EA 21 3E 90 00 30 07 24 3E E0 -00 04 3E B0 00 10 02 24 3E E0 00 08 30 4D 5E DC -04 47 4F 54 4F 00 87 12 D2 DA B0 CD BE CB 2A C4 -00 00 05 3F 47 4F 54 4F 87 12 68 DC B0 CD BE CB -2A C4 00 00 03 4A 4D 50 87 12 B0 CD B4 DB 2A C4 -92 DC 04 3F 4A 4D 50 00 87 12 68 DC B0 CD 78 C4 -86 DB 2A C4 +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C8 +CA 21 F2 C4 2A C4 84 12 7E D0 AE CF 46 D3 DE CF +BE CC 32 CF 3A D0 5A D4 64 C8 66 D1 80 D1 8E CF +00 D2 00 00 2C D4 E8 CC 78 CE 00 00 84 12 7E D0 +78 D9 DA D9 2C D9 4E DA F2 D8 00 00 22 D6 00 00 +E8 D8 98 D9 4A D9 88 D9 32 D7 00 00 00 00 2A DA +AA D0 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 D0 EE D0 +F4 D0 04 D1 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CD 09 50 57 52 5F 53 54 41 +54 45 84 12 FC D0 D0 D0 60 DA CC CF 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 D1 92 42 0C 18 +48 D1 EF 3F 38 D1 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 D1 92 42 C6 21 48 D1 30 4D 4C D1 +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC CF 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C6 +DE C6 B2 40 0A D2 08 D2 B2 40 D0 D0 0E 18 B2 40 +60 DA 0C 18 30 12 56 D1 B2 40 86 C7 84 C7 B2 40 +08 C8 06 C8 B2 40 98 C6 96 C6 B2 40 18 00 0A 18 +37 40 1A C4 36 40 92 C4 35 40 0E C4 34 40 00 C4 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A D1 +04 57 41 52 4D 00 30 40 0A D2 3D 40 40 D2 92 C3 +30 01 1E 42 08 18 0E 93 12 24 F2 B0 10 00 00 02 +02 20 3E E3 1E 53 F2 D0 30 00 0A 02 3E 90 0A 00 +B7 27 3E 90 16 00 B4 2F 2E 93 83 27 8C 2F 30 4D +1E C8 06 0D 1B 5B 37 6D 23 00 D6 C7 34 C6 1E C8 +19 46 61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D +2E 54 68 6F 6F 72 65 6E 73 20 D6 C7 14 C8 30 FF +A0 CA B8 C4 24 C6 1E C8 0A 62 79 74 65 73 20 66 +72 65 65 00 3C C6 9A CC 82 CF 04 43 4F 4C 44 00 +92 B3 0A 05 FD 23 B2 40 04 A5 20 01 40 D2 B2 40 +88 5A CC 01 B2 43 06 02 B2 40 FC FF 02 02 D2 D3 +02 02 F2 D3 26 02 F2 43 22 02 F2 40 A5 00 A1 01 +F2 40 10 00 A0 01 D2 43 A1 01 B2 40 00 A5 60 01 +B2 40 FF 1E 80 01 B2 40 BA 00 82 01 B2 40 E8 01 +84 01 39 40 00 01 82 43 88 01 92 D2 5E 01 08 18 +38 40 59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 +29 83 89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 +9E D2 DA FF FB 23 B2 40 26 C7 E4 FF B2 40 81 00 +00 05 92 42 02 18 06 05 92 42 04 18 08 05 92 C3 +00 05 92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 +06 D2 4B 3F 8A D2 07 43 4F 4D 50 41 52 45 0C 4E +38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 +1C 83 07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 +30 4D 1E 43 30 4D B2 CD 86 5B 54 48 45 4E 5D 00 +30 4D 78 D3 86 5B 45 4C 53 45 5D 00 87 12 14 C8 +00 00 C6 C4 42 CB 80 C8 24 CB 34 C4 40 C6 EE D3 +44 C4 1E C8 06 5B 54 48 45 4E 5D 00 4E D3 4A C6 +BE D3 F8 C7 D0 C4 58 C4 4A C6 94 D3 2A C4 44 C4 +1E C8 06 5B 45 4C 53 45 5D 00 4E D3 4A C6 DC D3 +F8 C7 D0 C4 58 C4 4A C6 92 D3 2A C4 1E C8 04 5B +49 46 5D 00 4E D3 4A C6 94 D3 3C C6 92 D3 F8 C7 +1E C8 05 0D 0A 6B 6F 20 D6 C7 8C C7 32 CB 3C C6 +94 D3 84 D3 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 +30 4D 04 D4 89 5B 44 45 46 49 4E 45 44 5D 87 12 +42 CB 80 C8 EE C8 6A C4 2A C4 14 D4 8B 5B 55 4E +44 45 46 49 4E 45 44 5D 87 12 42 CB 80 C8 EE C8 +6A C4 00 C5 2A C4 48 D4 3D 41 B2 4E 0E 18 A2 4E +0C 18 3E 4F 30 40 56 D1 48 D0 06 4D 41 52 4B 45 +52 00 B0 12 B8 CD BA 40 84 12 FC FF BA 40 46 D4 +FE FF 9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 +C6 21 30 40 00 CE 1C 15 B0 12 2A C4 80 C8 EE C8 +4A C6 9C D4 AA C9 40 C6 CE CC B6 D4 9E D4 39 4E +39 80 86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 +19 53 01 24 2E 82 1B 17 30 41 3E 40 28 00 B0 12 +86 D4 19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 40 +29 00 1C 15 12 12 C4 21 92 53 C4 21 B0 12 2A C4 +80 C8 AA C9 40 C6 F4 D4 EA D4 21 53 3E 90 10 00 +7D 2D E1 2B F6 D4 B2 41 C4 21 DD 3F 87 12 42 CB +74 C8 04 D5 0C 43 1B 42 C6 21 A2 53 C6 21 6A 4E +3E 4F 7A 90 23 00 27 20 92 53 C4 21 B0 12 86 D4 +3C 40 00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 +3C 40 20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 +3C 40 30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 +3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 +3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 +92 53 C4 21 B0 12 86 D4 ED 3F 7A 90 40 00 16 20 +3C 40 20 00 92 53 C4 21 B0 12 D2 D4 0C 20 3C 50 +10 00 3E 40 2B 00 B0 12 D2 D4 92 92 C0 21 C4 21 +02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 D2 D4 +FA 23 3C 50 10 00 B0 12 BA D4 EF 3F 0C 43 1B 42 +C6 21 A2 53 C6 21 87 12 42 CB 74 C8 CE D5 FE 90 +26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F +B0 12 D2 D4 E1 23 3C 50 80 00 B0 12 BA D4 DC 3F +D6 C6 04 52 45 54 49 00 87 12 14 C8 00 13 B0 CA +2A C4 14 C8 2C 00 FC D4 C6 D5 0C D6 09 4B 2E 4E +0E DC A4 3F FC CE 03 4D 4F 56 84 12 02 D6 00 40 +16 D6 05 4D 4F 56 2E 42 84 12 02 D6 40 40 00 00 +03 41 44 44 84 12 02 D6 00 50 30 D6 05 41 44 44 +2E 42 84 12 02 D6 40 50 3C D6 04 41 44 44 43 00 +84 12 02 D6 00 60 4A D6 06 41 44 44 43 2E 42 00 +84 12 02 D6 40 60 F2 D5 04 53 55 42 43 00 84 12 +02 D6 00 70 68 D6 06 53 55 42 43 2E 42 00 84 12 +02 D6 40 70 76 D6 03 53 55 42 84 12 02 D6 00 80 +86 D6 05 53 55 42 2E 42 84 12 02 D6 40 80 DE CE +03 43 4D 50 84 12 02 D6 00 90 A0 D6 05 43 4D 50 +2E 42 84 12 02 D6 40 90 CC CE 04 44 41 44 44 00 +84 12 02 D6 00 A0 BA D6 06 44 41 44 44 2E 42 00 +84 12 02 D6 40 A0 AC D6 03 42 49 54 84 12 02 D6 +00 B0 D8 D6 05 42 49 54 2E 42 84 12 02 D6 40 B0 +E4 D6 03 42 49 43 84 12 02 D6 00 C0 F2 D6 05 42 +49 43 2E 42 84 12 02 D6 40 C0 FE D6 03 42 49 53 +84 12 02 D6 00 D0 0C D7 05 42 49 53 2E 42 84 12 +02 D6 40 D0 00 00 03 58 4F 52 84 12 02 D6 00 E0 +26 D7 05 58 4F 52 2E 42 84 12 02 D6 40 E0 58 D6 +03 41 4E 44 84 12 02 D6 00 F0 40 D7 05 41 4E 44 +2E 42 84 12 02 D6 40 F0 42 CB FC D4 5E D7 0A 4C +3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F 92 D6 +03 52 52 43 84 12 58 D7 00 10 70 D7 05 52 52 43 +2E 42 84 12 58 D7 40 10 7C D7 04 53 57 50 42 00 +84 12 58 D7 80 10 8A D7 03 52 52 41 84 12 58 D7 +00 11 98 D7 05 52 52 41 2E 42 84 12 58 D7 40 11 +A4 D7 03 53 58 54 84 12 58 D7 80 11 00 00 04 50 +55 53 48 00 84 12 58 D7 00 12 BE D7 06 50 55 53 +48 2E 42 00 84 12 58 D7 40 12 18 D7 04 43 41 4C +4C 00 84 12 58 D7 80 12 1A 53 0E 4A 87 12 34 C6 +1E C8 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 +4C CC 42 CB 74 C8 08 D8 92 53 C4 21 3E 40 2C 00 +B0 12 2A C4 80 C8 AA C9 40 C6 CE CC BC D5 20 D8 +0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C +59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E +94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F B2 D7 04 52 +52 43 4D 00 84 12 02 D8 50 00 4E D8 04 52 52 41 +4D 00 84 12 02 D8 50 01 5C D8 04 52 4C 41 4D 00 +84 12 02 D8 50 02 6A D8 04 52 52 55 4D 00 84 12 +02 D8 50 03 CC D7 05 50 55 53 48 4D 84 12 02 D8 +00 15 86 D8 04 50 4F 50 4D 00 84 12 02 D8 00 17 +78 D8 03 53 3E 3D 85 12 00 38 A2 D8 02 53 3C 00 +85 12 00 34 94 D8 03 30 3E 3D 85 12 00 30 B6 D8 +02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 +00 2C CA D8 03 55 3E 3D 85 12 00 28 C0 D8 03 30 +3C 3E 85 12 00 24 DE D8 02 30 3D 00 85 12 00 20 +00 00 02 49 46 00 1A 42 C6 21 8A 4E 00 00 A2 53 +C6 21 0E 4A 30 4D D4 D8 04 54 48 45 4E 00 1A 42 +C6 21 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 +00 02 63 2F 88 DA 00 00 30 4D C8 D6 04 45 4C 53 +45 00 1A 42 C6 21 BA 40 00 3C 00 00 A2 53 C6 21 +2F 83 8F 4A 00 00 E3 3F 08 D9 05 55 4E 54 49 4C +3A 4F 08 4E 3E 4F 19 42 C6 21 2A 83 0A 89 0A 11 +3A 90 00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 +A2 53 C6 21 30 4D 4C D7 05 41 47 41 49 4E 0A 4E +38 40 00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 +F6 D8 76 C4 2A C4 AC D8 06 52 45 50 45 41 54 00 +87 12 7E D9 0E D9 2A C4 AA D9 3D 41 08 4E 3E 4F +2A 48 B2 92 C4 21 CD 2F 98 42 C6 21 00 00 30 4D +DC D7 03 42 57 31 84 12 A8 D9 00 00 C2 D9 03 42 +57 32 84 12 A8 D9 00 00 CE D9 03 42 57 33 84 12 +A8 D9 00 00 E6 D9 3D 41 1A 42 C6 21 28 4E B2 92 +C4 21 90 2B BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 +3E 4F 30 4D 00 00 03 46 57 31 84 12 E4 D9 00 00 +06 DA 03 46 57 32 84 12 E4 D9 00 00 12 DA 03 46 +57 33 84 12 E4 D9 00 00 00 00 05 3F 47 4F 54 4F +3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 +3E E0 00 08 87 12 C0 CC DA CA 2A C4 1E DA 04 47 +4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -D6 D5 +9E D2 q diff --git a/binaries/MSP_EXP430FR2433_1MHz.txt b/binaries/MSP_EXP430FR2433_1MHz.txt index 2684308..4d775ef 100644 --- a/binaries/MSP_EXP430FR2433_1MHz.txt +++ b/binaries/MSP_EXP430FR2433_1MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 00 D6 E8 03 05 00 18 00 B4 DC 8A D2 -2C 01 7B B0 FC C7 0E C8 +10 00 08 00 00 D6 E8 03 05 00 18 00 50 DA D0 D0 +2D 01 6B B0 B6 C6 C8 C6 @C400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 D2 C3 02 02 30 41 B2 40 -13 00 0E 05 D2 D3 02 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 C8 CB 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 C8 CB 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C4 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C4 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C4 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C4 02 3E 52 00 0E 12 3E 4F 30 4D 70 C4 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C4 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C4 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C4 +01 21 BE 4F 00 00 3E 4F 30 4D CC C4 02 30 3D 00 +1E 83 0E 7E 30 4D FC C4 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C5 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C4 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 C5 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 C5 02 23 53 00 87 12 88 C5 C0 C5 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C5 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C4 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C5 34 C4 86 C4 D4 C4 BA C5 +92 C4 F8 C5 D4 C5 D6 C7 42 CB 82 C7 2A C4 22 C5 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C5 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C6 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 C6 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 C6 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 D2 C3 02 02 30 41 B2 40 13 00 0E 05 D2 D3 +02 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C6 +B0 12 B6 C6 12 D2 0A 18 F9 3F F0 C4 06 41 43 43 +45 50 54 00 3C 40 64 C7 3B 40 2E C7 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C7 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A C7 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C4 04 45 4D 49 +54 00 30 40 86 C7 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C C7 04 45 43 48 4F 00 B2 40 82 48 +52 C7 82 43 DE 21 30 4D 32 C6 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C7 92 43 DE 21 30 4D 20 C6 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C7 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C7 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C5 +02 43 52 00 30 40 08 C8 87 12 1E C8 02 0D 0A 00 +D6 C7 2A C4 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C5 82 53 22 00 82 43 B4 21 87 12 14 C8 +1E C8 B0 CA 14 C8 22 00 80 C8 4C C8 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA C7 82 2E 22 00 87 12 38 C8 14 C8 D6 C7 +B0 CA 2A C4 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,300 +86,279 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D A2 C5 07 3E +00 00 35 40 0E C4 34 40 00 C4 30 4D 82 C4 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 CB 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 CB 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C5 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 CB 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A CC B0 C5 -B6 C9 44 CC 3D 40 4C CC E2 22 5D 3E 4E CC 0A 4E -3E 4F 3D 40 64 CC 39 27 3D 40 3E CC 1A E2 BE 21 -B3 27 AD 23 66 CC 3E 4F 3D 40 3E CC BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CF -CD 3F B6 CB 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 3A CC -A2 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 C9 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C9 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C6 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 C4 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC C6 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 C7 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE CA 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 C8 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C8 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 CB 42 CB 80 C8 50 CB +3D 40 58 CB CC 22 82 3E 5A CB 0A 4E 3E 4F 3D 40 +70 CB 23 27 3D 40 4A CB 1A E2 BE 21 A1 27 B5 23 +72 CB 3E 4F 3D 40 4A CB B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CE CB 3F D2 CA +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C4 46 CB AE CB B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 C5 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A C4 -42 C9 92 C8 DC C8 3A CC DE C4 70 C5 52 C9 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CD 34 C4 -30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CD 24 C7 D0 CC C0 C7 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C CD 86 41 42 4F 52 54 -22 00 87 12 6C C9 34 C4 2E CD C8 CB 2A C4 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D4 B0 12 -FC C7 92 C3 1C 05 38 40 AA 0A 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 87 12 -6A D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B 5B 37 -6D 00 14 C9 54 C4 28 C7 8A CD 42 C9 52 C9 05 6C -69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 04 1B -5B 30 6D 00 14 C9 12 CD 00 00 83 5B 27 5D 87 12 -B0 CD 34 C4 34 C4 C8 CB C8 CB 2A C4 08 CA 01 27 -87 12 B0 C5 B6 C9 0E CA 28 C7 BE CD 2A C4 6E CC -CE C5 81 5C 92 42 C0 21 C4 21 30 4D 9A CD 81 5B -82 43 BE 21 30 4D C2 CD 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 87 12 -C8 C5 F2 C4 28 C7 02 CE 9E CD 34 C4 E0 CD C8 CB -2A C4 B0 CD E0 CD 2A C4 EA CD 09 49 4D 4D 45 44 +04 C8 8C C7 42 CB 82 C7 46 CB A4 C4 0C C5 1E C8 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CC +14 C8 30 FF A0 CA 26 C5 1E C8 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CC 3C C6 E0 CB C2 CA 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E CC 86 41 42 4F +52 54 22 00 87 12 38 C8 14 C8 40 CC B0 CA 2A C4 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 D1 +B0 12 B6 C6 92 C3 1C 05 38 40 AA 0A 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 1C 05 F3 23 87 12 +42 D1 14 C8 DE 21 EA C4 AC C7 1E C8 04 1B 5B 37 +6D 00 D6 C7 58 C4 40 C6 9A CC 04 C8 1E C8 05 6C +69 6E 65 3A D6 C7 D0 C4 24 C6 D6 C7 1E C8 04 1B +5B 30 6D 00 D6 C7 24 CC 00 00 83 5B 27 5D 87 12 +C0 CC 14 C8 14 C8 B0 CA B0 CA 2A C4 E8 C8 01 27 +87 12 42 CB 80 C8 EE C8 40 C6 CE CC 2A C4 7A CB +32 C5 81 5C 92 42 C0 21 C4 21 30 4D AA CC 81 5B +82 43 BE 21 30 4D D2 CC 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A CA 82 49 53 00 87 12 +BE CB EA C4 40 C6 12 CD AE CC 14 C8 F0 CC B0 CA +2A C4 C0 CC F0 CC 2A C4 FA CC 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 CC 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA 54 C4 -28 C7 BE CD 70 C5 28 C7 66 CE 34 C4 34 C4 C8 CB -C8 CB 34 C4 C8 CB C8 CB 2A C4 CE CD 81 3B 82 93 -BE 21 A8 27 87 12 34 C4 2A C4 C8 CB 04 CF D0 CD -2A C4 6C CE 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CE BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 CE 01 3A 30 12 A4 CE -87 12 92 C9 B0 C5 B6 C9 CA CE 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CE 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C9 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CD B0 C9 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CE BA 40 86 12 FC FF E4 3F 16 CC 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CE BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CF 06 43 52 45 41 54 -45 00 B0 12 C0 CE BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CC 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CF 05 44 -45 46 45 52 30 12 12 CF 8B 3F 6E CA 05 3E 42 4F -44 59 2E 52 30 4D 6A CF 04 43 4F 44 45 00 B0 12 -C0 CE 2A 82 82 4A C6 21 87 12 B2 CE 94 D2 66 D2 -2A C4 B8 CF 07 43 4F 44 45 4E 4E 4D 87 12 8C CE -D0 CD C2 CF 2A C4 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D2 04 CF 2A C4 1A CD 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A D2 DA 21 D9 3F E8 CF 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE D2 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A C4 02 00 A2 52 C6 21 ED 3F 0A CE 85 48 49 32 -4C 4F 87 12 F2 C6 8C D0 C8 CB D0 CD 94 D2 66 D2 -2A C4 5C D0 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 30 4D -9E CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C9 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 CF 85 42 45 47 49 4E 30 40 F2 C6 B2 D0 -85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CF -85 41 47 41 49 4E 39 40 24 C7 EF 3F 34 CF 85 57 -48 49 4C 45 87 12 78 D0 78 C4 2A C4 22 CE 86 52 -45 50 45 41 54 00 87 12 F6 D0 B8 D0 2A C4 92 D0 -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA CB 84 4C 4F 4F 50 00 39 40 -5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B 4C 4F -4F 50 39 40 4C C7 E5 3F 48 D1 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A D1 04 4D 4F 56 45 00 0A 4E +C4 CB 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 CB +80 C8 EE C8 58 C4 40 C6 CE CC 0C C5 40 C6 5C CD +14 C8 14 C8 B0 CA B0 CA 14 C8 B0 CA B0 CA 2A C4 +DE CC 81 3B 82 93 BE 21 B5 27 87 12 14 C8 2A C4 +B0 CA FA CD E0 CC 2A C4 62 CD 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CD 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A CD 01 3A 30 12 A0 CD 92 B3 C6 21 A2 63 C6 21 +87 12 42 CB 80 C8 C8 CD 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C8 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CC 90 CB 05 44 45 46 45 52 +B0 12 B8 CD BA 40 30 40 FC FF BA 40 AE CD FE FF +E3 3F 1E CB 06 43 52 45 41 54 45 00 B0 12 B8 CD +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CE 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C9 05 3E 42 4F 44 59 2E 52 +30 4D 44 CE 04 43 4F 44 45 00 B0 12 B8 CD A2 82 +C6 21 87 12 D2 D0 AC D0 2A C4 84 CE 07 43 4F 44 +45 4E 4E 4D B0 12 86 CD F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 D0 FA CD 2A C4 2C CC 03 41 +53 4D B2 40 B0 D0 DA 21 E0 3F AC CE 06 45 4E 44 +41 53 4D 00 87 12 B4 CE F4 D0 2A C4 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 D0 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A C4 +02 00 A2 52 C6 21 ED 3F 1A CD 85 48 49 32 4C 4F +87 12 A0 CA 4A CF B0 CA E0 CC D2 D0 AC D0 2A C4 +1A CF 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 C6 00 00 2E 53 30 4D 5E CE +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C C6 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C7 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C CE 85 42 45 47 49 4E 30 40 A0 CA 70 CF 85 55 +4E 54 49 4C 39 40 40 C6 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CE 85 41 +47 41 49 4E 39 40 3C C6 EF 3F 7A C8 85 57 48 49 +4C 45 87 12 36 CF 76 C4 2A C4 34 C8 86 52 45 50 +45 41 54 00 87 12 B4 CF 76 CF 2A C4 50 CF 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 C6 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 CA 84 4C 4F 4F 50 00 39 40 76 C6 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C6 85 2B 4C 4F 4F 50 +39 40 64 C6 E5 3F 06 D0 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE D0 -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CF -34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 C8 CB -5E C7 0A D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 C8 CB -FA C4 8A CF 34 C4 CA 21 FA C4 2A C4 AE CD 05 46 -4F 52 54 48 84 12 24 D2 8E D2 C4 D5 CC D2 2E D2 -74 D0 7C D1 F8 D3 BE D2 8E D4 A8 D4 D0 D0 34 D5 -00 00 CC D3 D8 CD AC CF 00 00 F0 D0 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D2 9E DB 06 DC 52 DB -70 DC 18 DB 94 DC 44 D8 00 00 0E DB BE DB 70 DB -AE DB 54 D9 00 00 00 00 A2 DC 58 D2 5C D2 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C CE 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 D1 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 D0 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CE 86 5B 54 48 45 4E 5D 00 30 4D 14 D3 -86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 36 C5 -B0 C5 B6 C9 1C CC 44 C4 28 C7 8E D3 8A C4 8A C4 -52 C9 06 5B 54 48 45 4E 5D 00 EA D2 32 C7 5C D3 -36 C9 40 C5 54 C4 32 C7 30 D3 2A C4 8A C4 8A C4 -52 C9 06 5B 45 4C 53 45 5D 00 EA D2 32 C7 7C D3 -36 C9 40 C5 54 C4 32 C7 2E D3 2A C4 52 C9 04 5B -49 46 5D 00 EA D2 32 C7 30 D3 24 C7 2E D3 36 C9 -52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 2A CC 24 C7 -30 D3 20 D3 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C5 B6 C9 0E CA 6C C4 2A C4 B4 D3 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 0E CA -6C C4 64 C5 2A C4 E8 D3 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 D1 06 4D 41 52 4B 45 52 00 -B0 12 C0 CE BA 40 84 12 FC FF BA 40 E6 D3 FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A CF 34 D2 C4 D2 D8 D2 2C D4 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D2 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D4 8A D2 -B4 DC 0E D1 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D4 92 42 0C 18 70 D4 EF 3F 60 D4 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E D4 92 42 -C6 21 70 D4 30 4D 74 D4 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 D1 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C8 24 C8 B2 40 3E D5 3C D5 -B2 40 8A D2 0E 18 B2 40 B4 DC 0C 18 30 12 7E D4 -B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 A0 C7 -9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 BC C4 -35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 D4 04 57 41 52 4D 00 30 40 3E D5 3D 40 -74 D5 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 -10 00 00 02 02 20 3E E3 1E 53 F2 D0 30 00 0A 02 -3E 90 0A 00 B1 27 3E 90 16 00 AE 2F 2E 93 7D 27 -86 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -8A CD E2 D2 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 43 06 02 -B2 40 03 00 04 02 B2 40 FC FF 02 02 D2 D3 02 02 -F2 43 22 02 F2 D3 26 02 B2 40 00 A5 60 01 B2 40 -FF 1E 80 01 B2 40 B0 00 82 01 B2 40 1E 00 84 01 -39 40 10 00 82 43 88 01 92 D2 5E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 -89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 D6 D5 -DA FF FB 23 B2 40 2C C8 E4 FF B2 40 81 00 00 05 -92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 -92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 3A D5 -48 3F 38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 -09 9A 03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A -C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 0E CA 32 C7 -AA D6 CA CA 28 C7 BE CD CC D6 AC D6 29 4E 39 90 -86 12 02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E -02 00 04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 -3E 40 28 00 B0 12 94 D6 19 42 C6 21 A2 53 C6 21 -89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 -C4 21 B0 12 2A C4 B6 C9 CA CA 28 C7 0A D7 00 D7 -21 53 3E 90 10 00 83 2D E1 2B 0C D7 B2 41 C4 21 -DD 3F 87 12 B0 C5 72 D6 1A D7 0C 43 1B 42 C6 21 -A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 -C4 21 B0 12 94 D6 0E 93 03 20 3C 40 00 03 21 3C -1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 -20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 -03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 -08 3C 3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 -10 02 92 53 C4 21 B0 12 94 D6 ED 3F 7A 90 40 00 -16 20 3C 40 20 00 92 53 C4 21 B0 12 E8 D6 0C 20 -3C 50 10 00 3E 40 2B 00 B0 12 E8 D6 92 92 C0 21 -C4 21 02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 -E8 D6 FA 23 3C 50 10 00 B0 12 D0 D6 EF 3F 0C 43 -1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 72 D6 F0 D7 -FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 -C8 3F B0 12 E8 D6 E1 23 3C 50 80 00 B0 12 D0 D6 -DC 3F 1C C8 04 52 45 54 49 00 87 12 34 C4 00 13 -C8 CB 2A C4 34 C4 2C 00 12 D7 E8 D7 2E D8 2E 4E -0E DC 09 4B A4 3F 3E D0 03 4D 4F 56 84 12 24 D8 -00 40 38 D8 05 4D 4F 56 2E 42 84 12 24 D8 40 40 -00 00 03 41 44 44 84 12 24 D8 00 50 52 D8 05 41 -44 44 2E 42 84 12 24 D8 40 50 5E D8 04 41 44 44 -43 00 84 12 24 D8 00 60 6C D8 06 41 44 44 43 2E -42 00 84 12 24 D8 40 60 14 D8 04 53 55 42 43 00 -84 12 24 D8 00 70 8A D8 06 53 55 42 43 2E 42 00 -84 12 24 D8 40 70 98 D8 03 53 55 42 84 12 24 D8 -00 80 A8 D8 05 53 55 42 2E 42 84 12 24 D8 40 80 -20 D0 03 43 4D 50 84 12 24 D8 00 90 C2 D8 05 43 -4D 50 2E 42 84 12 24 D8 40 90 0E D0 04 44 41 44 -44 00 84 12 24 D8 00 A0 DC D8 06 44 41 44 44 2E -42 00 84 12 24 D8 40 A0 CE D8 03 42 49 54 84 12 -24 D8 00 B0 FA D8 05 42 49 54 2E 42 84 12 24 D8 -40 B0 06 D9 03 42 49 43 84 12 24 D8 00 C0 14 D9 -05 42 49 43 2E 42 84 12 24 D8 40 C0 20 D9 03 42 -49 53 84 12 24 D8 00 D0 2E D9 05 42 49 53 2E 42 -84 12 24 D8 40 D0 00 00 03 58 4F 52 84 12 24 D8 -00 E0 48 D9 05 58 4F 52 2E 42 84 12 24 D8 40 E0 -7A D8 03 41 4E 44 84 12 24 D8 00 F0 62 D9 05 41 -4E 44 2E 42 84 12 24 D8 40 F0 B0 C5 12 D7 80 D9 -0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F -B4 D8 03 52 52 43 84 12 7A D9 00 10 92 D9 05 52 -52 43 2E 42 84 12 7A D9 40 10 9E D9 04 53 57 50 -42 00 84 12 7A D9 80 10 AC D9 03 52 52 41 84 12 -7A D9 00 11 BA D9 05 52 52 41 2E 42 84 12 7A D9 -40 11 C6 D9 03 53 58 54 84 12 7A D9 80 11 00 00 -04 50 55 53 48 00 84 12 7A D9 00 12 E0 D9 06 50 -55 53 48 2E 42 00 84 12 7A D9 40 12 3A D9 04 43 -41 4C 4C 00 84 12 7A D9 80 12 1A 53 0E 4A 87 12 -E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 62 6F 75 6E -64 73 3A CD B0 C5 72 D6 2A DA 92 53 C4 21 3E 40 -2C 00 B0 12 2A C4 B6 C9 CA CA 28 C7 BE CD DE D7 -42 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 -08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F -5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F D4 D9 -04 52 52 43 4D 00 84 12 24 DA 50 00 70 DA 04 52 -52 41 4D 00 84 12 24 DA 50 01 7E DA 04 52 4C 41 -4D 00 84 12 24 DA 50 02 8C DA 04 52 52 55 4D 00 -84 12 24 DA 50 03 EE D9 05 50 55 53 48 4D 84 12 -24 DA 00 15 A8 DA 04 50 4F 50 4D 00 84 12 24 DA -00 17 85 12 00 3C 9A DA 03 53 3E 3D 85 12 00 38 -C8 DA 02 53 3C 00 85 12 00 34 B6 DA 03 30 3E 3D -85 12 00 30 DC DA 02 30 3C 00 85 12 00 30 00 00 -02 55 3C 00 85 12 00 2C F0 DA 03 55 3E 3D 85 12 -00 28 E6 DA 03 30 3C 3E 85 12 00 24 04 DB 02 30 -3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 -8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D FA DA 04 54 -48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 -0A 89 0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D -EA D8 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C -00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 2E DB -05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 -2A 83 0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 -08 DA 89 48 00 00 A2 53 C6 21 30 4D 6E D9 05 41 -47 41 49 4E 87 12 C2 DA 76 DB 2A C4 00 00 05 57 -48 49 4C 45 87 12 1C DB 78 C4 2A C4 D2 DA 06 52 -45 50 45 41 54 00 87 12 C2 DA 76 DB 34 DB 2A C4 -D2 DB 3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 -00 00 CA 23 98 42 C6 21 00 00 30 4D FE D9 03 42 -57 31 84 12 D0 DB E0 21 EE DB 03 42 57 32 84 12 -D0 DB E2 21 FA DB 03 42 57 33 84 12 D0 DB E4 21 -12 DC 3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 -00 00 8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 -3E 4F 30 4D 00 00 03 46 57 31 84 12 10 DC E6 21 -36 DC 03 46 57 32 84 12 10 DC E8 21 42 DC 03 46 -57 33 84 12 10 DC EA 21 3E 90 00 30 07 24 3E E0 -00 04 3E B0 00 10 02 24 3E E0 00 08 30 4D 4E DC -04 47 4F 54 4F 00 87 12 C2 DA B0 CD BE CB 2A C4 -00 00 05 3F 47 4F 54 4F 87 12 58 DC B0 CD BE CB -2A C4 00 00 03 4A 4D 50 87 12 B0 CD A4 DB 2A C4 -82 DC 04 3F 4A 4D 50 00 87 12 58 DC B0 CD 78 C4 -76 DB 2A C4 +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C8 +CA 21 F2 C4 2A C4 84 12 7E D0 AE CF 36 D3 DE CF +BE CC 32 CF 3A D0 4A D4 64 C8 66 D1 80 D1 8E CF +00 D2 00 00 1C D4 E8 CC 78 CE 00 00 84 12 7E D0 +68 D9 CA D9 1C D9 3E DA E2 D8 00 00 12 D6 00 00 +D8 D8 88 D9 3A D9 78 D9 22 D7 00 00 00 00 1A DA +AA D0 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 D0 EE D0 +F4 D0 04 D1 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CD 09 50 57 52 5F 53 54 41 +54 45 84 12 FC D0 D0 D0 50 DA CC CF 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 D1 92 42 0C 18 +48 D1 EF 3F 38 D1 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 D1 92 42 C6 21 48 D1 30 4D 4C D1 +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC CF 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C6 +DE C6 B2 40 0A D2 08 D2 B2 40 D0 D0 0E 18 B2 40 +50 DA 0C 18 30 12 56 D1 B2 40 86 C7 84 C7 B2 40 +08 C8 06 C8 B2 40 98 C6 96 C6 B2 40 18 00 0A 18 +37 40 1A C4 36 40 92 C4 35 40 0E C4 34 40 00 C4 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A D1 +04 57 41 52 4D 00 30 40 0A D2 3D 40 40 D2 92 C3 +30 01 1E 42 08 18 0E 93 12 24 F2 B0 10 00 00 02 +02 20 3E E3 1E 53 F2 D0 30 00 0A 02 3E 90 0A 00 +B7 27 3E 90 16 00 B4 2F 2E 93 83 27 8C 2F 30 4D +1E C8 06 0D 1B 5B 37 6D 23 00 D6 C7 34 C6 1E C8 +19 46 61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D +2E 54 68 6F 6F 72 65 6E 73 20 D6 C7 14 C8 30 FF +A0 CA B8 C4 24 C6 1E C8 0A 62 79 74 65 73 20 66 +72 65 65 00 3C C6 9A CC 82 CF 04 43 4F 4C 44 00 +92 B3 0A 05 FD 23 B2 40 04 A5 20 01 40 D2 B2 40 +88 5A CC 01 B2 43 06 02 B2 40 FC FF 02 02 D2 D3 +02 02 F2 D3 26 02 F2 43 22 02 B2 40 00 A5 60 01 +B2 40 FF 1E 80 01 B2 40 B0 00 82 01 B2 40 1E 00 +84 01 39 40 10 00 82 43 88 01 92 D2 5E 01 08 18 +38 40 59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 +29 83 89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 +9E D2 DA FF FB 23 B2 40 26 C7 E4 FF B2 40 81 00 +00 05 92 42 02 18 06 05 92 42 04 18 08 05 92 C3 +00 05 92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 +06 D2 53 3F 8A D2 07 43 4F 4D 50 41 52 45 0C 4E +38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 +1C 83 07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 +30 4D 1E 43 30 4D B2 CD 86 5B 54 48 45 4E 5D 00 +30 4D 68 D3 86 5B 45 4C 53 45 5D 00 87 12 14 C8 +00 00 C6 C4 42 CB 80 C8 24 CB 34 C4 40 C6 DE D3 +44 C4 1E C8 06 5B 54 48 45 4E 5D 00 3E D3 4A C6 +AE D3 F8 C7 D0 C4 58 C4 4A C6 84 D3 2A C4 44 C4 +1E C8 06 5B 45 4C 53 45 5D 00 3E D3 4A C6 CC D3 +F8 C7 D0 C4 58 C4 4A C6 82 D3 2A C4 1E C8 04 5B +49 46 5D 00 3E D3 4A C6 84 D3 3C C6 82 D3 F8 C7 +1E C8 05 0D 0A 6B 6F 20 D6 C7 8C C7 32 CB 3C C6 +84 D3 74 D3 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 +30 4D F4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 +42 CB 80 C8 EE C8 6A C4 2A C4 04 D4 8B 5B 55 4E +44 45 46 49 4E 45 44 5D 87 12 42 CB 80 C8 EE C8 +6A C4 00 C5 2A C4 38 D4 3D 41 B2 4E 0E 18 A2 4E +0C 18 3E 4F 30 40 56 D1 48 D0 06 4D 41 52 4B 45 +52 00 B0 12 B8 CD BA 40 84 12 FC FF BA 40 36 D4 +FE FF 9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 +C6 21 30 40 00 CE 1C 15 B0 12 2A C4 80 C8 EE C8 +4A C6 8C D4 AA C9 40 C6 CE CC A6 D4 8E D4 39 4E +39 80 86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 +19 53 01 24 2E 82 1B 17 30 41 3E 40 28 00 B0 12 +76 D4 19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 40 +29 00 1C 15 12 12 C4 21 92 53 C4 21 B0 12 2A C4 +80 C8 AA C9 40 C6 E4 D4 DA D4 21 53 3E 90 10 00 +7D 2D E1 2B E6 D4 B2 41 C4 21 DD 3F 87 12 42 CB +74 C8 F4 D4 0C 43 1B 42 C6 21 A2 53 C6 21 6A 4E +3E 4F 7A 90 23 00 27 20 92 53 C4 21 B0 12 76 D4 +3C 40 00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 +3C 40 20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 +3C 40 30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 +3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 +3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 +92 53 C4 21 B0 12 76 D4 ED 3F 7A 90 40 00 16 20 +3C 40 20 00 92 53 C4 21 B0 12 C2 D4 0C 20 3C 50 +10 00 3E 40 2B 00 B0 12 C2 D4 92 92 C0 21 C4 21 +02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 C2 D4 +FA 23 3C 50 10 00 B0 12 AA D4 EF 3F 0C 43 1B 42 +C6 21 A2 53 C6 21 87 12 42 CB 74 C8 BE D5 FE 90 +26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F +B0 12 C2 D4 E1 23 3C 50 80 00 B0 12 AA D4 DC 3F +D6 C6 04 52 45 54 49 00 87 12 14 C8 00 13 B0 CA +2A C4 14 C8 2C 00 EC D4 B6 D5 FC D5 09 4B 2E 4E +0E DC A4 3F FC CE 03 4D 4F 56 84 12 F2 D5 00 40 +06 D6 05 4D 4F 56 2E 42 84 12 F2 D5 40 40 00 00 +03 41 44 44 84 12 F2 D5 00 50 20 D6 05 41 44 44 +2E 42 84 12 F2 D5 40 50 2C D6 04 41 44 44 43 00 +84 12 F2 D5 00 60 3A D6 06 41 44 44 43 2E 42 00 +84 12 F2 D5 40 60 E2 D5 04 53 55 42 43 00 84 12 +F2 D5 00 70 58 D6 06 53 55 42 43 2E 42 00 84 12 +F2 D5 40 70 66 D6 03 53 55 42 84 12 F2 D5 00 80 +76 D6 05 53 55 42 2E 42 84 12 F2 D5 40 80 DE CE +03 43 4D 50 84 12 F2 D5 00 90 90 D6 05 43 4D 50 +2E 42 84 12 F2 D5 40 90 CC CE 04 44 41 44 44 00 +84 12 F2 D5 00 A0 AA D6 06 44 41 44 44 2E 42 00 +84 12 F2 D5 40 A0 9C D6 03 42 49 54 84 12 F2 D5 +00 B0 C8 D6 05 42 49 54 2E 42 84 12 F2 D5 40 B0 +D4 D6 03 42 49 43 84 12 F2 D5 00 C0 E2 D6 05 42 +49 43 2E 42 84 12 F2 D5 40 C0 EE D6 03 42 49 53 +84 12 F2 D5 00 D0 FC D6 05 42 49 53 2E 42 84 12 +F2 D5 40 D0 00 00 03 58 4F 52 84 12 F2 D5 00 E0 +16 D7 05 58 4F 52 2E 42 84 12 F2 D5 40 E0 48 D6 +03 41 4E 44 84 12 F2 D5 00 F0 30 D7 05 41 4E 44 +2E 42 84 12 F2 D5 40 F0 42 CB EC D4 4E D7 0A 4C +3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F 82 D6 +03 52 52 43 84 12 48 D7 00 10 60 D7 05 52 52 43 +2E 42 84 12 48 D7 40 10 6C D7 04 53 57 50 42 00 +84 12 48 D7 80 10 7A D7 03 52 52 41 84 12 48 D7 +00 11 88 D7 05 52 52 41 2E 42 84 12 48 D7 40 11 +94 D7 03 53 58 54 84 12 48 D7 80 11 00 00 04 50 +55 53 48 00 84 12 48 D7 00 12 AE D7 06 50 55 53 +48 2E 42 00 84 12 48 D7 40 12 08 D7 04 43 41 4C +4C 00 84 12 48 D7 80 12 1A 53 0E 4A 87 12 34 C6 +1E C8 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 +4C CC 42 CB 74 C8 F8 D7 92 53 C4 21 3E 40 2C 00 +B0 12 2A C4 80 C8 AA C9 40 C6 CE CC AC D5 10 D8 +0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C +59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E +94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F A2 D7 04 52 +52 43 4D 00 84 12 F2 D7 50 00 3E D8 04 52 52 41 +4D 00 84 12 F2 D7 50 01 4C D8 04 52 4C 41 4D 00 +84 12 F2 D7 50 02 5A D8 04 52 52 55 4D 00 84 12 +F2 D7 50 03 BC D7 05 50 55 53 48 4D 84 12 F2 D7 +00 15 76 D8 04 50 4F 50 4D 00 84 12 F2 D7 00 17 +68 D8 03 53 3E 3D 85 12 00 38 92 D8 02 53 3C 00 +85 12 00 34 84 D8 03 30 3E 3D 85 12 00 30 A6 D8 +02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 +00 2C BA D8 03 55 3E 3D 85 12 00 28 B0 D8 03 30 +3C 3E 85 12 00 24 CE D8 02 30 3D 00 85 12 00 20 +00 00 02 49 46 00 1A 42 C6 21 8A 4E 00 00 A2 53 +C6 21 0E 4A 30 4D C4 D8 04 54 48 45 4E 00 1A 42 +C6 21 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 +00 02 63 2F 88 DA 00 00 30 4D B8 D6 04 45 4C 53 +45 00 1A 42 C6 21 BA 40 00 3C 00 00 A2 53 C6 21 +2F 83 8F 4A 00 00 E3 3F F8 D8 05 55 4E 54 49 4C +3A 4F 08 4E 3E 4F 19 42 C6 21 2A 83 0A 89 0A 11 +3A 90 00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 +A2 53 C6 21 30 4D 3C D7 05 41 47 41 49 4E 0A 4E +38 40 00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 +E6 D8 76 C4 2A C4 9C D8 06 52 45 50 45 41 54 00 +87 12 6E D9 FE D8 2A C4 9A D9 3D 41 08 4E 3E 4F +2A 48 B2 92 C4 21 CD 2F 98 42 C6 21 00 00 30 4D +CC D7 03 42 57 31 84 12 98 D9 00 00 B2 D9 03 42 +57 32 84 12 98 D9 00 00 BE D9 03 42 57 33 84 12 +98 D9 00 00 D6 D9 3D 41 1A 42 C6 21 28 4E B2 92 +C4 21 90 2B BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 +3E 4F 30 4D 00 00 03 46 57 31 84 12 D4 D9 00 00 +F6 D9 03 46 57 32 84 12 D4 D9 00 00 02 DA 03 46 +57 33 84 12 D4 D9 00 00 00 00 05 3F 47 4F 54 4F +3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 +3E E0 00 08 87 12 C0 CC DA CA 2A C4 0E DA 04 47 +4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -D6 D5 +9E D2 q diff --git a/binaries/MSP_EXP430FR2433_4MHz.txt b/binaries/MSP_EXP430FR2433_4MHz.txt deleted file mode 100644 index f0cd118..0000000 --- a/binaries/MSP_EXP430FR2433_4MHz.txt +++ /dev/null @@ -1,403 +0,0 @@ -@1800 -10 00 02 00 21 BB A0 0F 05 00 18 00 B4 DC 8A D2 -2C 01 7B B0 FC C7 0E C8 -@C400 -2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 -8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 D2 C3 02 02 30 41 B2 40 -13 00 0E 05 D2 D3 02 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 C8 CB 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 C8 CB 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 -60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 -18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 -F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E -CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 -0C 4E 65 4C 74 40 80 00 3B 40 CA 21 3E 4B 0E 93 -1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E -FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 -0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 -09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D A2 C5 07 3E -4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 -DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 -07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 -D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 -E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 CB 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 CB 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C5 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 CB 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A CC B0 C5 -B6 C9 44 CC 3D 40 4C CC E2 22 5D 3E 4E CC 0A 4E -3E 4F 3D 40 64 CC 39 27 3D 40 3E CC 1A E2 BE 21 -B3 27 AD 23 66 CC 3E 4F 3D 40 3E CC BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CF -CD 3F B6 CB 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 3A CC -A2 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 31 40 -E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A C4 -42 C9 92 C8 DC C8 3A CC DE C4 70 C5 52 C9 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CD 34 C4 -30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CD 24 C7 D0 CC C0 C7 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C CD 86 41 42 4F 52 54 -22 00 87 12 6C C9 34 C4 2E CD C8 CB 2A C4 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D4 B0 12 -FC C7 92 C3 1C 05 38 40 A8 2A 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 87 12 -6A D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B 5B 37 -6D 00 14 C9 54 C4 28 C7 8A CD 42 C9 52 C9 05 6C -69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 04 1B -5B 30 6D 00 14 C9 12 CD 00 00 83 5B 27 5D 87 12 -B0 CD 34 C4 34 C4 C8 CB C8 CB 2A C4 08 CA 01 27 -87 12 B0 C5 B6 C9 0E CA 28 C7 BE CD 2A C4 6E CC -CE C5 81 5C 92 42 C0 21 C4 21 30 4D 9A CD 81 5B -82 43 BE 21 30 4D C2 CD 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 87 12 -C8 C5 F2 C4 28 C7 02 CE 9E CD 34 C4 E0 CD C8 CB -2A C4 B0 CD E0 CD 2A C4 EA CD 09 49 4D 4D 45 44 -49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 CC 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA 54 C4 -28 C7 BE CD 70 C5 28 C7 66 CE 34 C4 34 C4 C8 CB -C8 CB 34 C4 C8 CB C8 CB 2A C4 CE CD 81 3B 82 93 -BE 21 A8 27 87 12 34 C4 2A C4 C8 CB 04 CF D0 CD -2A C4 6C CE 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CE BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 CE 01 3A 30 12 A4 CE -87 12 92 C9 B0 C5 B6 C9 CA CE 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CE 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C9 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CD B0 C9 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CE BA 40 86 12 FC FF E4 3F 16 CC 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CE BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CF 06 43 52 45 41 54 -45 00 B0 12 C0 CE BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CC 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CF 05 44 -45 46 45 52 30 12 12 CF 8B 3F 6E CA 05 3E 42 4F -44 59 2E 52 30 4D 6A CF 04 43 4F 44 45 00 B0 12 -C0 CE 2A 82 82 4A C6 21 87 12 B2 CE 94 D2 66 D2 -2A C4 B8 CF 07 43 4F 44 45 4E 4E 4D 87 12 8C CE -D0 CD C2 CF 2A C4 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D2 04 CF 2A C4 1A CD 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A D2 DA 21 D9 3F E8 CF 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE D2 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A C4 02 00 A2 52 C6 21 ED 3F 0A CE 85 48 49 32 -4C 4F 87 12 F2 C6 8C D0 C8 CB D0 CD 94 D2 66 D2 -2A C4 5C D0 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 30 4D -9E CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C9 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 CF 85 42 45 47 49 4E 30 40 F2 C6 B2 D0 -85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CF -85 41 47 41 49 4E 39 40 24 C7 EF 3F 34 CF 85 57 -48 49 4C 45 87 12 78 D0 78 C4 2A C4 22 CE 86 52 -45 50 45 41 54 00 87 12 F6 D0 B8 D0 2A C4 92 D0 -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA CB 84 4C 4F 4F 50 00 39 40 -5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B 4C 4F -4F 50 39 40 4C C7 E5 3F 48 D1 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A D1 04 4D 4F 56 45 00 0A 4E -38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C -F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE D0 -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CF -34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 C8 CB -5E C7 0A D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 C8 CB -FA C4 8A CF 34 C4 CA 21 FA C4 2A C4 AE CD 05 46 -4F 52 54 48 84 12 24 D2 8E D2 C4 D5 CC D2 2E D2 -74 D0 7C D1 F8 D3 BE D2 8E D4 A8 D4 D0 D0 34 D5 -00 00 CC D3 D8 CD AC CF 00 00 F0 D0 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D2 9E DB 06 DC 52 DB -70 DC 18 DB 94 DC 44 D8 00 00 0E DB BE DB 70 DB -AE DB 54 D9 00 00 00 00 A2 DC 58 D2 5C D2 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C CE 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 D1 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 D0 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CE 86 5B 54 48 45 4E 5D 00 30 4D 14 D3 -86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 36 C5 -B0 C5 B6 C9 1C CC 44 C4 28 C7 8E D3 8A C4 8A C4 -52 C9 06 5B 54 48 45 4E 5D 00 EA D2 32 C7 5C D3 -36 C9 40 C5 54 C4 32 C7 30 D3 2A C4 8A C4 8A C4 -52 C9 06 5B 45 4C 53 45 5D 00 EA D2 32 C7 7C D3 -36 C9 40 C5 54 C4 32 C7 2E D3 2A C4 52 C9 04 5B -49 46 5D 00 EA D2 32 C7 30 D3 24 C7 2E D3 36 C9 -52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 2A CC 24 C7 -30 D3 20 D3 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C5 B6 C9 0E CA 6C C4 2A C4 B4 D3 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 0E CA -6C C4 64 C5 2A C4 E8 D3 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 D1 06 4D 41 52 4B 45 52 00 -B0 12 C0 CE BA 40 84 12 FC FF BA 40 E6 D3 FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A CF 34 D2 C4 D2 D8 D2 2C D4 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D2 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D4 8A D2 -B4 DC 0E D1 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D4 92 42 0C 18 70 D4 EF 3F 60 D4 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E D4 92 42 -C6 21 70 D4 30 4D 74 D4 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 D1 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C8 24 C8 B2 40 3E D5 3C D5 -B2 40 8A D2 0E 18 B2 40 B4 DC 0C 18 30 12 7E D4 -B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 A0 C7 -9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 BC C4 -35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 D4 04 57 41 52 4D 00 30 40 3E D5 3D 40 -74 D5 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 -10 00 00 02 02 20 3E E3 1E 53 F2 D0 30 00 0A 02 -3E 90 0A 00 B1 27 3E 90 16 00 AE 2F 2E 93 7D 27 -86 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -8A CD E2 D2 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 43 06 02 -B2 40 03 00 04 02 B2 40 FC FF 02 02 D2 D3 02 02 -F2 43 22 02 F2 D3 26 02 B2 40 00 A5 60 01 B2 40 -FF 1E 80 01 B2 40 B4 00 82 01 B2 40 79 00 84 01 -39 40 40 00 82 43 88 01 92 D2 5E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 -89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 D6 D5 -DA FF FB 23 B2 40 2C C8 E4 FF B2 40 81 00 00 05 -92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 -92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 3A D5 -48 3F 38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 -09 9A 03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A -C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 0E CA 32 C7 -AA D6 CA CA 28 C7 BE CD CC D6 AC D6 29 4E 39 90 -86 12 02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E -02 00 04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 -3E 40 28 00 B0 12 94 D6 19 42 C6 21 A2 53 C6 21 -89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 -C4 21 B0 12 2A C4 B6 C9 CA CA 28 C7 0A D7 00 D7 -21 53 3E 90 10 00 83 2D E1 2B 0C D7 B2 41 C4 21 -DD 3F 87 12 B0 C5 72 D6 1A D7 0C 43 1B 42 C6 21 -A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 -C4 21 B0 12 94 D6 0E 93 03 20 3C 40 00 03 21 3C -1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 -20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 -03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 -08 3C 3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 -10 02 92 53 C4 21 B0 12 94 D6 ED 3F 7A 90 40 00 -16 20 3C 40 20 00 92 53 C4 21 B0 12 E8 D6 0C 20 -3C 50 10 00 3E 40 2B 00 B0 12 E8 D6 92 92 C0 21 -C4 21 02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 -E8 D6 FA 23 3C 50 10 00 B0 12 D0 D6 EF 3F 0C 43 -1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 72 D6 F0 D7 -FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 -C8 3F B0 12 E8 D6 E1 23 3C 50 80 00 B0 12 D0 D6 -DC 3F 1C C8 04 52 45 54 49 00 87 12 34 C4 00 13 -C8 CB 2A C4 34 C4 2C 00 12 D7 E8 D7 2E D8 2E 4E -0E DC 09 4B A4 3F 3E D0 03 4D 4F 56 84 12 24 D8 -00 40 38 D8 05 4D 4F 56 2E 42 84 12 24 D8 40 40 -00 00 03 41 44 44 84 12 24 D8 00 50 52 D8 05 41 -44 44 2E 42 84 12 24 D8 40 50 5E D8 04 41 44 44 -43 00 84 12 24 D8 00 60 6C D8 06 41 44 44 43 2E -42 00 84 12 24 D8 40 60 14 D8 04 53 55 42 43 00 -84 12 24 D8 00 70 8A D8 06 53 55 42 43 2E 42 00 -84 12 24 D8 40 70 98 D8 03 53 55 42 84 12 24 D8 -00 80 A8 D8 05 53 55 42 2E 42 84 12 24 D8 40 80 -20 D0 03 43 4D 50 84 12 24 D8 00 90 C2 D8 05 43 -4D 50 2E 42 84 12 24 D8 40 90 0E D0 04 44 41 44 -44 00 84 12 24 D8 00 A0 DC D8 06 44 41 44 44 2E -42 00 84 12 24 D8 40 A0 CE D8 03 42 49 54 84 12 -24 D8 00 B0 FA D8 05 42 49 54 2E 42 84 12 24 D8 -40 B0 06 D9 03 42 49 43 84 12 24 D8 00 C0 14 D9 -05 42 49 43 2E 42 84 12 24 D8 40 C0 20 D9 03 42 -49 53 84 12 24 D8 00 D0 2E D9 05 42 49 53 2E 42 -84 12 24 D8 40 D0 00 00 03 58 4F 52 84 12 24 D8 -00 E0 48 D9 05 58 4F 52 2E 42 84 12 24 D8 40 E0 -7A D8 03 41 4E 44 84 12 24 D8 00 F0 62 D9 05 41 -4E 44 2E 42 84 12 24 D8 40 F0 B0 C5 12 D7 80 D9 -0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F -B4 D8 03 52 52 43 84 12 7A D9 00 10 92 D9 05 52 -52 43 2E 42 84 12 7A D9 40 10 9E D9 04 53 57 50 -42 00 84 12 7A D9 80 10 AC D9 03 52 52 41 84 12 -7A D9 00 11 BA D9 05 52 52 41 2E 42 84 12 7A D9 -40 11 C6 D9 03 53 58 54 84 12 7A D9 80 11 00 00 -04 50 55 53 48 00 84 12 7A D9 00 12 E0 D9 06 50 -55 53 48 2E 42 00 84 12 7A D9 40 12 3A D9 04 43 -41 4C 4C 00 84 12 7A D9 80 12 1A 53 0E 4A 87 12 -E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 62 6F 75 6E -64 73 3A CD B0 C5 72 D6 2A DA 92 53 C4 21 3E 40 -2C 00 B0 12 2A C4 B6 C9 CA CA 28 C7 BE CD DE D7 -42 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 -08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F -5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F D4 D9 -04 52 52 43 4D 00 84 12 24 DA 50 00 70 DA 04 52 -52 41 4D 00 84 12 24 DA 50 01 7E DA 04 52 4C 41 -4D 00 84 12 24 DA 50 02 8C DA 04 52 52 55 4D 00 -84 12 24 DA 50 03 EE D9 05 50 55 53 48 4D 84 12 -24 DA 00 15 A8 DA 04 50 4F 50 4D 00 84 12 24 DA -00 17 85 12 00 3C 9A DA 03 53 3E 3D 85 12 00 38 -C8 DA 02 53 3C 00 85 12 00 34 B6 DA 03 30 3E 3D -85 12 00 30 DC DA 02 30 3C 00 85 12 00 30 00 00 -02 55 3C 00 85 12 00 2C F0 DA 03 55 3E 3D 85 12 -00 28 E6 DA 03 30 3C 3E 85 12 00 24 04 DB 02 30 -3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 -8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D FA DA 04 54 -48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 -0A 89 0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D -EA D8 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C -00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 2E DB -05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 -2A 83 0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 -08 DA 89 48 00 00 A2 53 C6 21 30 4D 6E D9 05 41 -47 41 49 4E 87 12 C2 DA 76 DB 2A C4 00 00 05 57 -48 49 4C 45 87 12 1C DB 78 C4 2A C4 D2 DA 06 52 -45 50 45 41 54 00 87 12 C2 DA 76 DB 34 DB 2A C4 -D2 DB 3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 -00 00 CA 23 98 42 C6 21 00 00 30 4D FE D9 03 42 -57 31 84 12 D0 DB E0 21 EE DB 03 42 57 32 84 12 -D0 DB E2 21 FA DB 03 42 57 33 84 12 D0 DB E4 21 -12 DC 3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 -00 00 8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 -3E 4F 30 4D 00 00 03 46 57 31 84 12 10 DC E6 21 -36 DC 03 46 57 32 84 12 10 DC E8 21 42 DC 03 46 -57 33 84 12 10 DC EA 21 3E 90 00 30 07 24 3E E0 -00 04 3E B0 00 10 02 24 3E E0 00 08 30 4D 4E DC -04 47 4F 54 4F 00 87 12 C2 DA B0 CD BE CB 2A C4 -00 00 05 3F 47 4F 54 4F 87 12 58 DC B0 CD BE CB -2A C4 00 00 03 4A 4D 50 87 12 B0 CD A4 DB 2A C4 -82 DC 04 3F 4A 4D 50 00 87 12 58 DC B0 CD 78 C4 -76 DB 2A C4 -@FFFE -D6 D5 -q diff --git a/binaries/MSP_EXP430FR2433_8MHz.txt b/binaries/MSP_EXP430FR2433_8MHz.txt index 0cf9a92..62de337 100644 --- a/binaries/MSP_EXP430FR2433_8MHz.txt +++ b/binaries/MSP_EXP430FR2433_8MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 04 00 51 55 40 1F 05 00 18 00 B4 DC 8A D2 -2C 01 7B B0 FC C7 0E C8 +10 00 04 00 51 55 40 1F 05 00 18 00 50 DA D0 D0 +2D 01 6B B0 B6 C6 C8 C6 @C400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 D2 C3 02 02 30 41 B2 40 -13 00 0E 05 D2 D3 02 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 C8 CB 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 C8 CB 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C4 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C4 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C4 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C4 02 3E 52 00 0E 12 3E 4F 30 4D 70 C4 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C4 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C4 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C4 +01 21 BE 4F 00 00 3E 4F 30 4D CC C4 02 30 3D 00 +1E 83 0E 7E 30 4D FC C4 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C5 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C4 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 C5 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 C5 02 23 53 00 87 12 88 C5 C0 C5 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C5 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C4 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C5 34 C4 86 C4 D4 C4 BA C5 +92 C4 F8 C5 D4 C5 D6 C7 42 CB 82 C7 2A C4 22 C5 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C5 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C6 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 C6 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 C6 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 D2 C3 02 02 30 41 B2 40 13 00 0E 05 D2 D3 +02 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C6 +B0 12 B6 C6 12 D2 0A 18 F9 3F F0 C4 06 41 43 43 +45 50 54 00 3C 40 64 C7 3B 40 2E C7 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C7 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A C7 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C4 04 45 4D 49 +54 00 30 40 86 C7 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C C7 04 45 43 48 4F 00 B2 40 82 48 +52 C7 82 43 DE 21 30 4D 32 C6 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C7 92 43 DE 21 30 4D 20 C6 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C7 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C7 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C5 +02 43 52 00 30 40 08 C8 87 12 1E C8 02 0D 0A 00 +D6 C7 2A C4 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C5 82 53 22 00 82 43 B4 21 87 12 14 C8 +1E C8 B0 CA 14 C8 22 00 80 C8 4C C8 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA C7 82 2E 22 00 87 12 38 C8 14 C8 D6 C7 +B0 CA 2A C4 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,300 +86,279 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D A2 C5 07 3E +00 00 35 40 0E C4 34 40 00 C4 30 4D 82 C4 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 21 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 21 0C 43 -2D 15 3D 40 10 CB 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 CB 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C5 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 C6 21 -8A 4E 00 00 3E 4F 30 4D C6 CB 87 4C 49 54 45 52 -41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 C6 21 -BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 B2 4F -C2 21 3E 4F 82 43 C4 21 30 4D 87 12 2A CC B0 C5 -B6 C9 44 CC 3D 40 4C CC E2 22 5D 3E 4E CC 0A 4E -3E 4F 3D 40 64 CC 39 27 3D 40 3E CC 1A E2 BE 21 -B3 27 AD 23 66 CC 3E 4F 3D 40 3E CC BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CF -CD 3F B6 CB 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 3A CC -A2 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 -30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 21 0C 43 2D 15 3D 40 F4 C9 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C9 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C6 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 21 30 4D B6 C4 01 2C +1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D +EC C6 05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D +A6 C7 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE CA 87 4C 49 54 45 52 41 4C 82 93 BE 21 0C 24 +1A 42 C6 21 A2 52 C6 21 BA 40 14 C8 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C8 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 +30 4D 85 12 20 00 87 12 32 CB 42 CB 80 C8 50 CB +3D 40 58 CB CC 22 82 3E 5A CB 0A 4E 3E 4F 3D 40 +70 CB 23 27 3D 40 4A CB 1A E2 BE 21 A1 27 B5 23 +72 CB 3E 4F 3D 40 4A CB B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CE CB 3F D2 CA +08 45 56 41 4C 55 41 54 45 00 39 40 C0 21 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C4 46 CB AE CB B2 41 +C4 21 B2 41 C2 21 B2 41 C0 21 3D 41 30 4D 85 12 +BE 21 08 C5 04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 2A C4 -42 C9 92 C8 DC C8 3A CC DE C4 70 C5 52 C9 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CD 34 C4 -30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CD 24 C7 D0 CC C0 C7 05 41 42 4F -52 54 3F 40 80 20 D1 3F 0C CD 86 41 42 4F 52 54 -22 00 87 12 6C C9 34 C4 2E CD C8 CB 2A C4 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D4 B0 12 -FC C7 92 C3 1C 05 38 40 50 55 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 87 12 -6A D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B 5B 37 -6D 00 14 C9 54 C4 28 C7 8A CD 42 C9 52 C9 05 6C -69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 04 1B -5B 30 6D 00 14 C9 12 CD 00 00 83 5B 27 5D 87 12 -B0 CD 34 C4 34 C4 C8 CB C8 CB 2A C4 08 CA 01 27 -87 12 B0 C5 B6 C9 0E CA 28 C7 BE CD 2A C4 6E CC -CE C5 81 5C 92 42 C0 21 C4 21 30 4D 9A CD 81 5B -82 43 BE 21 30 4D C2 CD 01 5D B2 43 BE 21 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 87 12 -C8 C5 F2 C4 28 C7 02 CE 9E CD 34 C4 E0 CD C8 CB -2A C4 B0 CD E0 CD 2A C4 EA CD 09 49 4D 4D 45 44 +04 C8 8C C7 42 CB 82 C7 46 CB A4 C4 0C C5 1E C8 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CC +14 C8 30 FF A0 CA 26 C5 1E C8 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CC 3C C6 E0 CB C2 CA 05 41 +42 4F 52 54 3F 40 80 20 D0 3F 1E CC 86 41 42 4F +52 54 22 00 87 12 38 C8 14 C8 40 CC B0 CA 2A C4 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 D1 +B0 12 B6 C6 92 C3 1C 05 38 40 50 55 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 1C 05 F3 23 87 12 +42 D1 14 C8 DE 21 EA C4 AC C7 1E C8 04 1B 5B 37 +6D 00 D6 C7 58 C4 40 C6 9A CC 04 C8 1E C8 05 6C +69 6E 65 3A D6 C7 D0 C4 24 C6 D6 C7 1E C8 04 1B +5B 30 6D 00 D6 C7 24 CC 00 00 83 5B 27 5D 87 12 +C0 CC 14 C8 14 C8 B0 CA B0 CA 2A C4 E8 C8 01 27 +87 12 42 CB 80 C8 EE C8 40 C6 CE CC 2A C4 7A CB +32 C5 81 5C 92 42 C0 21 C4 21 30 4D AA CC 81 5B +82 43 BE 21 30 4D D2 CC 01 5D B2 43 BE 21 30 4D +BE 4F 02 00 3E 4F 30 4D 9A CA 82 49 53 00 87 12 +BE CB EA C4 40 C6 12 CD AE CC 14 C8 F0 CC B0 CA +2A C4 C0 CC F0 CC 2A C4 FA CC 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 30 4D -68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 99 42 -BA 21 00 00 A2 53 C6 21 30 4D B4 CC 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA 54 C4 -28 C7 BE CD 70 C5 28 C7 66 CE 34 C4 34 C4 C8 CB -C8 CB 34 C4 C8 CB C8 CB 2A C4 CE CD 81 3B 82 93 -BE 21 A8 27 87 12 34 C4 2A C4 C8 CB 04 CF D0 CD -2A C4 6C CE 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CE BA 40 87 12 FC FF A2 83 C6 21 B2 43 -BE 21 82 4F BC 21 30 4D 84 CE 01 3A 30 12 A4 CE -87 12 92 C9 B0 C5 B6 C9 CA CE 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CE 02 00 -82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 82 4A -C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 -B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C9 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CD B0 C9 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CE BA 40 86 12 FC FF E4 3F 16 CC 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CE BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CF 06 43 52 45 41 54 -45 00 B0 12 C0 CE BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CC 05 44 4F 45 53 3E 1A 42 BA 21 BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CF 05 44 -45 46 45 52 30 12 12 CF 8B 3F 6E CA 05 3E 42 4F -44 59 2E 52 30 4D 6A CF 04 43 4F 44 45 00 B0 12 -C0 CE 2A 82 82 4A C6 21 87 12 B2 CE 94 D2 66 D2 -2A C4 B8 CF 07 43 4F 44 45 4E 4E 4D 87 12 8C CE -D0 CD C2 CF 2A C4 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D2 04 CF 2A C4 1A CD 03 41 53 4D 92 42 -DA 21 EC 21 B2 40 6A D2 DA 21 D9 3F E8 CF 06 45 -4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 -A2 53 C6 21 B2 43 BE 21 30 40 AE D2 00 00 05 4C -4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 -2A C4 02 00 A2 52 C6 21 ED 3F 0A CE 85 48 49 32 -4C 4F 87 12 F2 C6 8C D0 C8 CB D0 CD 94 D2 66 D2 -2A C4 5C D0 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 30 4D -9E CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 -BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C9 84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F -30 4D D4 CF 85 42 45 47 49 4E 30 40 F2 C6 B2 D0 -85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 1A 42 -C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CF -85 41 47 41 49 4E 39 40 24 C7 EF 3F 34 CF 85 57 -48 49 4C 45 87 12 78 D0 78 C4 2A C4 22 CE 86 52 -45 50 45 41 54 00 87 12 F6 D0 B8 D0 2A C4 92 D0 -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 -C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 00 20 -8A 43 00 00 30 4D DA CB 84 4C 4F 4F 50 00 39 40 -5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E -FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B 4C 4F -4F 50 39 40 4C C7 E5 3F 48 D1 85 4C 45 41 56 45 -1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 02 00 -B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 00 20 -89 4A 00 00 30 4D 8A D1 04 4D 4F 56 45 00 0A 4E +C4 CB 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 CB +80 C8 EE C8 58 C4 40 C6 CE CC 0C C5 40 C6 5C CD +14 C8 14 C8 B0 CA B0 CA 14 C8 B0 CA B0 CA 2A C4 +DE CC 81 3B 82 93 BE 21 B5 27 87 12 14 C8 2A C4 +B0 CA FA CD E0 CC 2A C4 62 CD 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CD 2F 83 8F 4E 00 00 1E 42 C6 21 +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 21 B2 43 BE 21 30 4D +7A CD 01 3A 30 12 A0 CD 92 B3 C6 21 A2 63 C6 21 +87 12 42 CB 80 C8 C8 CD 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 21 82 49 B8 21 82 4A BA 21 82 4F +BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 +18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C8 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CC 90 CB 05 44 45 46 45 52 +B0 12 B8 CD BA 40 30 40 FC FF BA 40 AE CD FE FF +E3 3F 1E CB 06 43 52 45 41 54 45 00 B0 12 B8 CD +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CE 05 44 +4F 45 53 3E 1A 42 BA 21 BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C9 05 3E 42 4F 44 59 2E 52 +30 4D 44 CE 04 43 4F 44 45 00 B0 12 B8 CD A2 82 +C6 21 87 12 D2 D0 AC D0 2A C4 84 CE 07 43 4F 44 +45 4E 4E 4D B0 12 86 CD F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 D0 FA CD 2A C4 2C CC 03 41 +53 4D B2 40 B0 D0 DA 21 E0 3F AC CE 06 45 4E 44 +41 53 4D 00 87 12 B4 CE F4 D0 2A C4 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 00 00 A2 53 +C6 21 B2 43 BE 21 30 40 E0 D0 00 00 05 4C 4F 32 +48 49 1A 42 C6 21 BA 40 B0 12 00 00 BA 40 2A C4 +02 00 A2 52 C6 21 ED 3F 1A CD 85 48 49 32 4C 4F +87 12 A0 CA 4A CF B0 CA E0 CC D2 D0 AC D0 2A C4 +1A CF 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 21 +A2 52 C6 21 BE 40 40 C6 00 00 2E 53 30 4D 5E CE +84 45 4C 53 45 00 A2 52 C6 21 1A 42 C6 21 BA 40 +3C C6 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C7 +84 54 48 45 4E 00 9E 42 C6 21 00 00 3E 4F 30 4D +9C CE 85 42 45 47 49 4E 30 40 A0 CA 70 CF 85 55 +4E 54 49 4C 39 40 40 C6 A2 52 C6 21 1A 42 C6 21 +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CE 85 41 +47 41 49 4E 39 40 3C C6 EF 3F 7A C8 85 57 48 49 +4C 45 87 12 36 CF 76 C4 2A C4 34 C8 86 52 45 50 +45 41 54 00 87 12 B4 CF 76 CF 2A C4 50 CF 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 +BE 40 54 C6 FE FF A2 53 00 20 1A 42 00 20 8A 43 +00 00 30 4D E2 CA 84 4C 4F 4F 50 00 39 40 76 C6 +A2 52 C6 21 1A 42 C6 21 8A 49 FC FF 8A 4E FE FF +1E 42 00 20 A2 83 00 20 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C6 85 2B 4C 4F 4F 50 +39 40 64 C6 E5 3F 06 D0 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE D0 -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CF -34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 C8 CB -5E C7 0A D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 C8 CB -FA C4 8A CF 34 C4 CA 21 FA C4 2A C4 AE CD 05 46 -4F 52 54 48 84 12 24 D2 8E D2 C4 D5 CC D2 2E D2 -74 D0 7C D1 F8 D3 BE D2 8E D4 A8 D4 D0 D0 34 D5 -00 00 CC D3 D8 CD AC CF 00 00 F0 D0 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D2 9E DB 06 DC 52 DB -70 DC 18 DB 94 DC 44 D8 00 00 0E DB BE DB 70 DB -AE DB 54 D9 00 00 00 00 A2 DC 58 D2 5C D2 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 CC 21 -9D 3F 3C CE 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 04 4F -4E 4C 59 00 82 43 CC 21 30 4D 20 D1 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 30 4D -C4 D0 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CE 86 5B 54 48 45 4E 5D 00 30 4D 14 D3 -86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 36 C5 -B0 C5 B6 C9 1C CC 44 C4 28 C7 8E D3 8A C4 8A C4 -52 C9 06 5B 54 48 45 4E 5D 00 EA D2 32 C7 5C D3 -36 C9 40 C5 54 C4 32 C7 30 D3 2A C4 8A C4 8A C4 -52 C9 06 5B 45 4C 53 45 5D 00 EA D2 32 C7 7C D3 -36 C9 40 C5 54 C4 32 C7 2E D3 2A C4 52 C9 04 5B -49 46 5D 00 EA D2 32 C7 30 D3 24 C7 2E D3 36 C9 -52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 2A CC 24 C7 -30 D3 20 D3 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C5 B6 C9 0E CA 6C C4 2A C4 B4 D3 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 0E CA -6C C4 64 C5 2A C4 E8 D3 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 D1 06 4D 41 52 4B 45 52 00 -B0 12 C0 CE BA 40 84 12 FC FF BA 40 E6 D3 FE FF -9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 -30 40 0A CF 34 D2 C4 D2 D8 D2 2C D4 3A 4E 82 4A -C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D2 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D4 8A D2 -B4 DC 0E D1 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D4 92 42 0C 18 70 D4 EF 3F 60 D4 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 21 6E D4 92 42 -C6 21 70 D4 30 4D 74 D4 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 EC 3F -F0 D1 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C8 24 C8 B2 40 3E D5 3C D5 -B2 40 8A D2 0E 18 B2 40 B4 DC 0C 18 30 12 7E D4 -B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 A0 C7 -9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 BC C4 -35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 89 43 -E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 B4 21 -30 41 C2 D4 04 57 41 52 4D 00 30 40 3E D5 3D 40 -74 D5 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 -10 00 00 02 02 20 3E E3 1E 53 F2 D0 30 00 0A 02 -3E 90 0A 00 B1 27 3E 90 16 00 AE 2F 2E 93 7D 27 -86 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -8A CD E2 D2 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 43 06 02 -B2 40 03 00 04 02 B2 40 FC FF 02 02 D2 D3 02 02 -F2 43 22 02 F2 D3 26 02 B2 40 00 A5 60 01 B2 40 -FF 1E 80 01 B2 40 B6 00 82 01 B2 40 F4 00 84 01 -39 40 80 00 82 43 88 01 92 D2 5E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 29 83 -89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 D6 D5 -DA FF FB 23 B2 40 2C C8 E4 FF B2 40 81 00 00 05 -92 42 02 18 06 05 92 42 04 18 08 05 92 C3 00 05 -92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 3A D5 -48 3F 38 40 C0 21 39 48 2A 48 09 5A 1A 52 C4 21 -09 9A 03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A -C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 0E CA 32 C7 -AA D6 CA CA 28 C7 BE CD CC D6 AC D6 29 4E 39 90 -86 12 02 20 2E 53 0A 3C 39 90 85 12 03 20 1E 4E -02 00 04 3C 39 90 84 12 01 20 2E 52 1B 17 30 41 -3E 40 28 00 B0 12 94 D6 19 42 C6 21 A2 53 C6 21 -89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 21 92 53 -C4 21 B0 12 2A C4 B6 C9 CA CA 28 C7 0A D7 00 D7 -21 53 3E 90 10 00 83 2D E1 2B 0C D7 B2 41 C4 21 -DD 3F 87 12 B0 C5 72 D6 1A D7 0C 43 1B 42 C6 21 -A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 2D 20 92 53 -C4 21 B0 12 94 D6 0E 93 03 20 3C 40 00 03 21 3C -1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 -20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 -03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 -08 3C 3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E -00 00 3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 -10 02 92 53 C4 21 B0 12 94 D6 ED 3F 7A 90 40 00 -16 20 3C 40 20 00 92 53 C4 21 B0 12 E8 D6 0C 20 -3C 50 10 00 3E 40 2B 00 B0 12 E8 D6 92 92 C0 21 -C4 21 02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 -E8 D6 FA 23 3C 50 10 00 B0 12 D0 D6 EF 3F 0C 43 -1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 72 D6 F0 D7 -FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 -C8 3F B0 12 E8 D6 E1 23 3C 50 80 00 B0 12 D0 D6 -DC 3F 1C C8 04 52 45 54 49 00 87 12 34 C4 00 13 -C8 CB 2A C4 34 C4 2C 00 12 D7 E8 D7 2E D8 2E 4E -0E DC 09 4B A4 3F 3E D0 03 4D 4F 56 84 12 24 D8 -00 40 38 D8 05 4D 4F 56 2E 42 84 12 24 D8 40 40 -00 00 03 41 44 44 84 12 24 D8 00 50 52 D8 05 41 -44 44 2E 42 84 12 24 D8 40 50 5E D8 04 41 44 44 -43 00 84 12 24 D8 00 60 6C D8 06 41 44 44 43 2E -42 00 84 12 24 D8 40 60 14 D8 04 53 55 42 43 00 -84 12 24 D8 00 70 8A D8 06 53 55 42 43 2E 42 00 -84 12 24 D8 40 70 98 D8 03 53 55 42 84 12 24 D8 -00 80 A8 D8 05 53 55 42 2E 42 84 12 24 D8 40 80 -20 D0 03 43 4D 50 84 12 24 D8 00 90 C2 D8 05 43 -4D 50 2E 42 84 12 24 D8 40 90 0E D0 04 44 41 44 -44 00 84 12 24 D8 00 A0 DC D8 06 44 41 44 44 2E -42 00 84 12 24 D8 40 A0 CE D8 03 42 49 54 84 12 -24 D8 00 B0 FA D8 05 42 49 54 2E 42 84 12 24 D8 -40 B0 06 D9 03 42 49 43 84 12 24 D8 00 C0 14 D9 -05 42 49 43 2E 42 84 12 24 D8 40 C0 20 D9 03 42 -49 53 84 12 24 D8 00 D0 2E D9 05 42 49 53 2E 42 -84 12 24 D8 40 D0 00 00 03 58 4F 52 84 12 24 D8 -00 E0 48 D9 05 58 4F 52 2E 42 84 12 24 D8 40 E0 -7A D8 03 41 4E 44 84 12 24 D8 00 F0 62 D9 05 41 -4E 44 2E 42 84 12 24 D8 40 F0 B0 C5 12 D7 80 D9 -0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F -B4 D8 03 52 52 43 84 12 7A D9 00 10 92 D9 05 52 -52 43 2E 42 84 12 7A D9 40 10 9E D9 04 53 57 50 -42 00 84 12 7A D9 80 10 AC D9 03 52 52 41 84 12 -7A D9 00 11 BA D9 05 52 52 41 2E 42 84 12 7A D9 -40 11 C6 D9 03 53 58 54 84 12 7A D9 80 11 00 00 -04 50 55 53 48 00 84 12 7A D9 00 12 E0 D9 06 50 -55 53 48 2E 42 00 84 12 7A D9 40 12 3A D9 04 43 -41 4C 4C 00 84 12 7A D9 80 12 1A 53 0E 4A 87 12 -E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 62 6F 75 6E -64 73 3A CD B0 C5 72 D6 2A DA 92 53 C4 21 3E 40 -2C 00 B0 12 2A C4 B6 C9 CA CA 28 C7 BE CD DE D7 -42 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 -08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F -5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F D4 D9 -04 52 52 43 4D 00 84 12 24 DA 50 00 70 DA 04 52 -52 41 4D 00 84 12 24 DA 50 01 7E DA 04 52 4C 41 -4D 00 84 12 24 DA 50 02 8C DA 04 52 52 55 4D 00 -84 12 24 DA 50 03 EE D9 05 50 55 53 48 4D 84 12 -24 DA 00 15 A8 DA 04 50 4F 50 4D 00 84 12 24 DA -00 17 85 12 00 3C 9A DA 03 53 3E 3D 85 12 00 38 -C8 DA 02 53 3C 00 85 12 00 34 B6 DA 03 30 3E 3D -85 12 00 30 DC DA 02 30 3C 00 85 12 00 30 00 00 -02 55 3C 00 85 12 00 2C F0 DA 03 55 3E 3D 85 12 -00 28 E6 DA 03 30 3C 3E 85 12 00 24 04 DB 02 30 -3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 21 -8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D FA DA 04 54 -48 45 4E 00 1A 42 C6 21 08 4E 3E 4F 09 48 29 53 -0A 89 0A 11 3A 90 00 02 61 2F 88 DA 00 00 30 4D -EA D8 04 45 4C 53 45 00 1A 42 C6 21 BA 40 00 3C -00 00 A2 53 C6 21 2F 83 8F 4A 00 00 E3 3F 2E DB -05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 21 -2A 83 0A 89 0A 11 3A 90 00 FE 40 3B 3A F0 FF 03 -08 DA 89 48 00 00 A2 53 C6 21 30 4D 6E D9 05 41 -47 41 49 4E 87 12 C2 DA 76 DB 2A C4 00 00 05 57 -48 49 4C 45 87 12 1C DB 78 C4 2A C4 D2 DA 06 52 -45 50 45 41 54 00 87 12 C2 DA 76 DB 34 DB 2A C4 -D2 DB 3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 -00 00 CA 23 98 42 C6 21 00 00 30 4D FE D9 03 42 -57 31 84 12 D0 DB E0 21 EE DB 03 42 57 32 84 12 -D0 DB E2 21 FA DB 03 42 57 33 84 12 D0 DB E4 21 -12 DC 3D 41 1A 42 C6 21 2E 4E 28 4E 08 93 8E 43 -00 00 8B 23 BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 -3E 4F 30 4D 00 00 03 46 57 31 84 12 10 DC E6 21 -36 DC 03 46 57 32 84 12 10 DC E8 21 42 DC 03 46 -57 33 84 12 10 DC EA 21 3E 90 00 30 07 24 3E E0 -00 04 3E B0 00 10 02 24 3E E0 00 08 30 4D 4E DC -04 47 4F 54 4F 00 87 12 C2 DA B0 CD BE CB 2A C4 -00 00 05 3F 47 4F 54 4F 87 12 58 DC B0 CD BE CB -2A C4 00 00 03 4A 4D 50 87 12 B0 CD A4 DB 2A C4 -82 DC 04 3F 4A 4D 50 00 87 12 58 DC B0 CD 78 C4 -76 DB 2A C4 +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C8 +CA 21 F2 C4 2A C4 84 12 7E D0 AE CF 36 D3 DE CF +BE CC 32 CF 3A D0 4A D4 64 C8 66 D1 80 D1 8E CF +00 D2 00 00 1C D4 E8 CC 78 CE 00 00 84 12 7E D0 +68 D9 CA D9 1C D9 3E DA E2 D8 00 00 12 D6 00 00 +D8 D8 88 D9 3A D9 78 D9 22 D7 00 00 00 00 1A DA +AA D0 3A 40 0C 00 39 40 CA 21 38 40 CC 21 C6 3F +3A 40 0E 00 39 40 CC 21 38 40 CA 21 B9 3F 82 43 +CC 21 30 4D 92 42 CA 21 DA 21 30 4D 86 D0 EE D0 +F4 D0 04 D1 3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CD 09 50 57 52 5F 53 54 41 +54 45 84 12 FC D0 D0 D0 50 DA CC CF 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 D1 92 42 0C 18 +48 D1 EF 3F 38 D1 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 21 46 D1 92 42 C6 21 48 D1 30 4D 4C D1 +08 52 53 54 5F 48 45 52 45 00 92 42 C8 21 0E 18 +92 42 C6 21 0C 18 EC 3F BC CF 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C6 +DE C6 B2 40 0A D2 08 D2 B2 40 D0 D0 0E 18 B2 40 +50 DA 0C 18 30 12 56 D1 B2 40 86 C7 84 C7 B2 40 +08 C8 06 C8 B2 40 98 C6 96 C6 B2 40 18 00 0A 18 +37 40 1A C4 36 40 92 C4 35 40 0E C4 34 40 00 C4 +B2 40 0A 00 DC 21 B2 40 20 00 B4 21 30 41 9A D1 +04 57 41 52 4D 00 30 40 0A D2 3D 40 40 D2 92 C3 +30 01 1E 42 08 18 0E 93 12 24 F2 B0 10 00 00 02 +02 20 3E E3 1E 53 F2 D0 30 00 0A 02 3E 90 0A 00 +B7 27 3E 90 16 00 B4 2F 2E 93 83 27 8C 2F 30 4D +1E C8 06 0D 1B 5B 37 6D 23 00 D6 C7 34 C6 1E C8 +19 46 61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D +2E 54 68 6F 6F 72 65 6E 73 20 D6 C7 14 C8 30 FF +A0 CA B8 C4 24 C6 1E C8 0A 62 79 74 65 73 20 66 +72 65 65 00 3C C6 9A CC 82 CF 04 43 4F 4C 44 00 +92 B3 0A 05 FD 23 B2 40 04 A5 20 01 40 D2 B2 40 +88 5A CC 01 B2 43 06 02 B2 40 FC FF 02 02 D2 D3 +02 02 F2 D3 26 02 F2 43 22 02 B2 40 00 A5 60 01 +B2 40 FF 1E 80 01 B2 40 B6 00 82 01 B2 40 F4 00 +84 01 39 40 80 00 82 43 88 01 92 D2 5E 01 08 18 +38 40 59 14 18 83 FE 23 19 83 FA 23 39 40 00 10 +29 83 89 43 00 20 FC 23 39 40 26 00 29 83 B9 40 +9E D2 DA FF FB 23 B2 40 26 C7 E4 FF B2 40 81 00 +00 05 92 42 02 18 06 05 92 42 04 18 08 05 92 C3 +00 05 92 D3 1A 05 3F 40 80 20 31 40 E0 20 30 12 +06 D2 53 3F 8A D2 07 43 4F 4D 50 41 52 45 0C 4E +38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 +1C 83 07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 +30 4D 1E 43 30 4D B2 CD 86 5B 54 48 45 4E 5D 00 +30 4D 68 D3 86 5B 45 4C 53 45 5D 00 87 12 14 C8 +00 00 C6 C4 42 CB 80 C8 24 CB 34 C4 40 C6 DE D3 +44 C4 1E C8 06 5B 54 48 45 4E 5D 00 3E D3 4A C6 +AE D3 F8 C7 D0 C4 58 C4 4A C6 84 D3 2A C4 44 C4 +1E C8 06 5B 45 4C 53 45 5D 00 3E D3 4A C6 CC D3 +F8 C7 D0 C4 58 C4 4A C6 82 D3 2A C4 1E C8 04 5B +49 46 5D 00 3E D3 4A C6 84 D3 3C C6 82 D3 F8 C7 +1E C8 05 0D 0A 6B 6F 20 D6 C7 8C C7 32 CB 3C C6 +84 D3 74 D3 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 +30 4D F4 D3 89 5B 44 45 46 49 4E 45 44 5D 87 12 +42 CB 80 C8 EE C8 6A C4 2A C4 04 D4 8B 5B 55 4E +44 45 46 49 4E 45 44 5D 87 12 42 CB 80 C8 EE C8 +6A C4 00 C5 2A C4 38 D4 3D 41 B2 4E 0E 18 A2 4E +0C 18 3E 4F 30 40 56 D1 48 D0 06 4D 41 52 4B 45 +52 00 B0 12 B8 CD BA 40 84 12 FC FF BA 40 36 D4 +FE FF 9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 +C6 21 30 40 00 CE 1C 15 B0 12 2A C4 80 C8 EE C8 +4A C6 8C D4 AA C9 40 C6 CE CC A6 D4 8E D4 39 4E +39 80 86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 +19 53 01 24 2E 82 1B 17 30 41 3E 40 28 00 B0 12 +76 D4 19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 40 +29 00 1C 15 12 12 C4 21 92 53 C4 21 B0 12 2A C4 +80 C8 AA C9 40 C6 E4 D4 DA D4 21 53 3E 90 10 00 +7D 2D E1 2B E6 D4 B2 41 C4 21 DD 3F 87 12 42 CB +74 C8 F4 D4 0C 43 1B 42 C6 21 A2 53 C6 21 6A 4E +3E 4F 7A 90 23 00 27 20 92 53 C4 21 B0 12 76 D4 +3C 40 00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 +3C 40 20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 +3C 40 30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 +3C 40 30 00 19 42 C6 21 A2 53 C6 21 89 4E 00 00 +3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 +92 53 C4 21 B0 12 76 D4 ED 3F 7A 90 40 00 16 20 +3C 40 20 00 92 53 C4 21 B0 12 C2 D4 0C 20 3C 50 +10 00 3E 40 2B 00 B0 12 C2 D4 92 92 C0 21 C4 21 +02 24 92 53 C4 21 8E 10 0C 5E DA 3F B0 12 C2 D4 +FA 23 3C 50 10 00 B0 12 AA D4 EF 3F 0C 43 1B 42 +C6 21 A2 53 C6 21 87 12 42 CB 74 C8 BE D5 FE 90 +26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F +B0 12 C2 D4 E1 23 3C 50 80 00 B0 12 AA D4 DC 3F +D6 C6 04 52 45 54 49 00 87 12 14 C8 00 13 B0 CA +2A C4 14 C8 2C 00 EC D4 B6 D5 FC D5 09 4B 2E 4E +0E DC A4 3F FC CE 03 4D 4F 56 84 12 F2 D5 00 40 +06 D6 05 4D 4F 56 2E 42 84 12 F2 D5 40 40 00 00 +03 41 44 44 84 12 F2 D5 00 50 20 D6 05 41 44 44 +2E 42 84 12 F2 D5 40 50 2C D6 04 41 44 44 43 00 +84 12 F2 D5 00 60 3A D6 06 41 44 44 43 2E 42 00 +84 12 F2 D5 40 60 E2 D5 04 53 55 42 43 00 84 12 +F2 D5 00 70 58 D6 06 53 55 42 43 2E 42 00 84 12 +F2 D5 40 70 66 D6 03 53 55 42 84 12 F2 D5 00 80 +76 D6 05 53 55 42 2E 42 84 12 F2 D5 40 80 DE CE +03 43 4D 50 84 12 F2 D5 00 90 90 D6 05 43 4D 50 +2E 42 84 12 F2 D5 40 90 CC CE 04 44 41 44 44 00 +84 12 F2 D5 00 A0 AA D6 06 44 41 44 44 2E 42 00 +84 12 F2 D5 40 A0 9C D6 03 42 49 54 84 12 F2 D5 +00 B0 C8 D6 05 42 49 54 2E 42 84 12 F2 D5 40 B0 +D4 D6 03 42 49 43 84 12 F2 D5 00 C0 E2 D6 05 42 +49 43 2E 42 84 12 F2 D5 40 C0 EE D6 03 42 49 53 +84 12 F2 D5 00 D0 FC D6 05 42 49 53 2E 42 84 12 +F2 D5 40 D0 00 00 03 58 4F 52 84 12 F2 D5 00 E0 +16 D7 05 58 4F 52 2E 42 84 12 F2 D5 40 E0 48 D6 +03 41 4E 44 84 12 F2 D5 00 F0 30 D7 05 41 4E 44 +2E 42 84 12 F2 D5 40 F0 42 CB EC D4 4E D7 0A 4C +3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F 82 D6 +03 52 52 43 84 12 48 D7 00 10 60 D7 05 52 52 43 +2E 42 84 12 48 D7 40 10 6C D7 04 53 57 50 42 00 +84 12 48 D7 80 10 7A D7 03 52 52 41 84 12 48 D7 +00 11 88 D7 05 52 52 41 2E 42 84 12 48 D7 40 11 +94 D7 03 53 58 54 84 12 48 D7 80 11 00 00 04 50 +55 53 48 00 84 12 48 D7 00 12 AE D7 06 50 55 53 +48 2E 42 00 84 12 48 D7 40 12 08 D7 04 43 41 4C +4C 00 84 12 48 D7 80 12 1A 53 0E 4A 87 12 34 C6 +1E C8 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 +4C CC 42 CB 74 C8 F8 D7 92 53 C4 21 3E 40 2C 00 +B0 12 2A C4 80 C8 AA C9 40 C6 CE CC AC D5 10 D8 +0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C +59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E +94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F A2 D7 04 52 +52 43 4D 00 84 12 F2 D7 50 00 3E D8 04 52 52 41 +4D 00 84 12 F2 D7 50 01 4C D8 04 52 4C 41 4D 00 +84 12 F2 D7 50 02 5A D8 04 52 52 55 4D 00 84 12 +F2 D7 50 03 BC D7 05 50 55 53 48 4D 84 12 F2 D7 +00 15 76 D8 04 50 4F 50 4D 00 84 12 F2 D7 00 17 +68 D8 03 53 3E 3D 85 12 00 38 92 D8 02 53 3C 00 +85 12 00 34 84 D8 03 30 3E 3D 85 12 00 30 A6 D8 +02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 +00 2C BA D8 03 55 3E 3D 85 12 00 28 B0 D8 03 30 +3C 3E 85 12 00 24 CE D8 02 30 3D 00 85 12 00 20 +00 00 02 49 46 00 1A 42 C6 21 8A 4E 00 00 A2 53 +C6 21 0E 4A 30 4D C4 D8 04 54 48 45 4E 00 1A 42 +C6 21 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 +00 02 63 2F 88 DA 00 00 30 4D B8 D6 04 45 4C 53 +45 00 1A 42 C6 21 BA 40 00 3C 00 00 A2 53 C6 21 +2F 83 8F 4A 00 00 E3 3F F8 D8 05 55 4E 54 49 4C +3A 4F 08 4E 3E 4F 19 42 C6 21 2A 83 0A 89 0A 11 +3A 90 00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 +A2 53 C6 21 30 4D 3C D7 05 41 47 41 49 4E 0A 4E +38 40 00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 +E6 D8 76 C4 2A C4 9C D8 06 52 45 50 45 41 54 00 +87 12 6E D9 FE D8 2A C4 9A D9 3D 41 08 4E 3E 4F +2A 48 B2 92 C4 21 CD 2F 98 42 C6 21 00 00 30 4D +CC D7 03 42 57 31 84 12 98 D9 00 00 B2 D9 03 42 +57 32 84 12 98 D9 00 00 BE D9 03 42 57 33 84 12 +98 D9 00 00 D6 D9 3D 41 1A 42 C6 21 28 4E B2 92 +C4 21 90 2B BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 +3E 4F 30 4D 00 00 03 46 57 31 84 12 D4 D9 00 00 +F6 D9 03 46 57 32 84 12 D4 D9 00 00 02 DA 03 46 +57 33 84 12 D4 D9 00 00 00 00 05 3F 47 4F 54 4F +3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 +3E E0 00 08 87 12 C0 CC DA CA 2A C4 0E DA 04 47 +4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -D6 D5 +9E D2 q diff --git a/binaries/MSP_EXP430FR4133_16MHz.txt b/binaries/MSP_EXP430FR4133_16MHz.txt index c2670e4..5efdeb4 100644 --- a/binaries/MSP_EXP430FR4133_16MHz.txt +++ b/binaries/MSP_EXP430FR4133_16MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 A1 F7 80 3E 05 00 18 00 18 DD CC D2 -2C 01 7B B0 FC C7 0E C8 +10 00 08 00 A1 F7 80 3E 05 00 18 00 AC DA 0C D1 +2D 01 6B B0 B6 C6 C8 C6 @C400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 F2 C2 03 02 30 41 B2 40 -13 00 0E 05 F2 D2 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 0A CC 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 0A CC 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C4 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C4 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C4 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C4 02 3E 52 00 0E 12 3E 4F 30 4D 70 C4 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C4 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C4 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C4 +01 21 BE 4F 00 00 3E 4F 30 4D CC C4 02 30 3D 00 +1E 83 0E 7E 30 4D FC C4 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C5 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C4 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 C5 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 C5 02 23 53 00 87 12 88 C5 C0 C5 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C5 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C4 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C5 34 C4 86 C4 D4 C4 BA C5 +92 C4 F8 C5 D4 C5 D6 C7 7E CB 82 C7 2A C4 22 C5 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C5 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C6 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 C6 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 C6 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 F2 C2 03 02 30 41 B2 40 13 00 0E 05 F2 D2 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C6 +B0 12 B6 C6 12 D2 0A 18 F9 3F F0 C4 06 41 43 43 +45 50 54 00 3C 40 64 C7 3B 40 2E C7 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C7 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A C7 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C4 04 45 4D 49 +54 00 30 40 86 C7 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C C7 04 45 43 48 4F 00 B2 40 82 48 +52 C7 82 43 DE 21 30 4D 32 C6 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C7 92 43 DE 21 30 4D 20 C6 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C7 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C7 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C5 +02 43 52 00 30 40 08 C8 87 12 1E C8 02 0D 0A 00 +D6 C7 2A C4 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C5 82 53 22 00 82 43 B4 21 87 12 14 C8 +1E C8 EC CA 14 C8 22 00 80 C8 4C C8 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA C7 82 2E 22 00 87 12 38 C8 14 C8 D6 C7 +EC CA 2A C4 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,306 +86,285 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D 0E C9 03 55 +00 00 35 40 0E C4 34 40 00 C4 30 4D D0 C7 03 55 4D 2A 2C 4F 0B 43 09 43 08 43 1A 43 0E BA 02 24 09 5C 08 6B 0C 5C 0B 6B 0A 5A F8 2B 8F 49 00 00 -0E 48 30 4D A2 C5 07 3E 4E 55 4D 42 45 52 2C 4F +0E 48 30 4D 82 C4 07 3E 4E 55 4D 42 45 52 2C 4F 0B 4E 1A 42 DC 21 68 4C 78 80 30 00 78 90 0A 00 05 28 78 80 07 00 78 90 0A 00 1F 28 08 9A 22 C3 -1C 2C 5D 15 1C 4F 02 00 0E 4A 3D 40 D0 CA D2 3F -D2 CA 81 49 02 00 1C 4F 04 00 1E 41 04 00 3D 40 -E4 CA C8 3F E6 CA 39 51 3E 61 8F 49 04 00 8F 4E +1C 2C 5D 15 1C 4F 02 00 0E 4A 3D 40 B0 C9 D2 3F +B2 C9 81 49 02 00 1C 4F 04 00 1E 41 04 00 3D 40 +C4 C9 C8 3F C6 C9 39 51 3E 61 8F 49 04 00 8F 4E 02 00 3A 17 1C 53 1B 83 D6 23 8F 4C 00 00 0E 4B -30 4D 1B 42 DC 21 0C 43 2D 15 3D 40 4E CB 0A 4B -3F 82 8F 4E 06 00 8F 43 04 00 8F 43 02 00 0C 4E -7B 4C 68 4C 78 90 2D 00 04 28 BE 23 B1 43 02 00 -E1 3F 2A 43 78 80 25 00 07 24 3A 52 68 53 04 24 -3A 40 10 00 58 83 AF 23 1C 53 1B 83 EA 3F 50 CB -31 24 2D 83 78 90 28 00 CD 27 32 B0 00 02 2A 20 -32 D0 00 02 78 90 F7 00 C5 27 78 90 F5 00 22 20 -09 43 8F 49 02 00 5B 83 09 4B 09 5C 69 49 79 80 -30 00 79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 -0A 28 09 9A 08 2C 8F 49 00 00 0E 4A 2C 15 B0 12 -E8 C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 -0E 4B 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 -00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 -04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 -BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 -01 20 2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 -0A 4E 3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 -C6 21 8A 4E 00 00 3E 4F 30 4D 08 CC 87 4C 49 54 -45 52 41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 -C6 21 BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 -00 02 32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 -0E 49 EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 -1E 53 8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 -B2 4F C2 21 3E 4F 82 43 C4 21 30 4D 87 12 6C CC -B0 C5 B6 C9 86 CC 3D 40 8E CC C1 22 3C 3E 90 CC -0A 4E 3E 4F 3D 40 A6 CC 34 27 3D 40 80 CC 1A E2 -BE 21 B3 27 AD 23 A8 CC 3E 4F 3D 40 80 CC BA 23 -DE 53 00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 -72 CF CD 3F F8 CB 08 45 56 41 4C 55 41 54 45 00 -39 40 C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 -7C CC E4 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 -3D 41 30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 -31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 -2A C4 42 C9 92 C8 DC C8 7C CC DE C4 70 C5 52 C9 -0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 70 CD -34 C4 30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 -66 75 6C 6C 21 00 70 CD 24 C7 12 CD C0 C7 05 41 -42 4F 52 54 3F 40 80 20 D1 3F 4E CD 86 41 42 4F -52 54 22 00 87 12 6C C9 34 C4 70 CD 0A CC 2A C4 -8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 32 D5 -B0 12 FC C7 92 C3 1C 05 38 40 A0 AA 39 42 09 59 -03 43 19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 -87 12 AC D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B -5B 37 6D 00 14 C9 54 C4 28 C7 CC CD 42 C9 52 C9 -05 6C 69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 -04 1B 5B 30 6D 00 14 C9 54 CD 00 00 83 5B 27 5D -87 12 F2 CD 34 C4 34 C4 0A CC 0A CC 2A C4 08 CA -01 27 87 12 B0 C5 B6 C9 0E CA 28 C7 00 CE 2A C4 -B0 CC CE C5 81 5C 92 42 C0 21 C4 21 30 4D DC CD -81 5B 82 43 BE 21 30 4D 04 CE 01 5D B2 43 BE 21 -30 4D BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 -87 12 C8 C5 F2 C4 28 C7 44 CE E0 CD 34 C4 22 CE -0A CC 2A C4 F2 CD 22 CE 2A C4 2C CE 09 49 4D 4D -45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 -30 4D 68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 -99 42 BA 21 00 00 A2 53 C6 21 30 4D F6 CC 88 50 -4F 53 54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA -54 C4 28 C7 00 CE 70 C5 28 C7 A8 CE 34 C4 34 C4 -0A CC 0A CC 34 C4 0A CC 0A CC 2A C4 10 CE 81 3B -82 93 BE 21 A8 27 87 12 34 C4 2A C4 0A CC 46 CF -12 CE 2A C4 AE CE 07 3A 4E 4F 4E 41 4D 45 2F 83 -8F 4E 00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 -02 02 B0 12 32 CF BA 40 87 12 FC FF A2 83 C6 21 -B2 43 BE 21 82 4F BC 21 30 4D C6 CE 01 3A 30 12 -E6 CE 87 12 92 C9 B0 C5 B6 C9 0C CF 3D 41 08 4E -7A 4E 5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 -1E 00 09 5E 3E 4F BA 40 30 40 00 00 BA 40 F8 CE -02 00 82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 +30 4D 32 C0 00 02 1B 42 DC 21 0C 43 2D 15 3D 40 +32 CA 0A 4B 3F 82 8F 4E 06 00 8F 43 04 00 8F 43 +02 00 0C 4E 7B 4C 68 4C 78 90 2D 00 04 28 BC 23 +B1 43 02 00 DF 3F 2A 43 78 80 25 00 07 24 3A 52 +68 53 04 24 3A 40 10 00 58 83 AD 23 1C 53 1B 83 +EA 3F 34 CA 2E 24 2D 83 78 90 28 00 CB 27 32 D0 +00 02 78 90 F7 00 C6 27 78 90 F5 00 22 20 09 43 +8F 49 02 00 5B 83 09 4B 09 5C 69 49 79 80 30 00 +79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 +09 9A 08 2C 8F 49 00 00 0E 4A 2C 15 B0 12 3E C5 +2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4B +4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 +3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 +BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 +00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 +2F 53 30 4D 7E C6 04 48 45 52 45 00 2F 83 8F 4E +00 00 1E 42 C6 21 30 4D B6 C4 01 2C 1A 42 C6 21 +8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D EC C6 05 41 +4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D A6 C7 07 45 +58 45 43 55 54 45 0A 4E 3E 4F 00 4A EA CA 87 4C +49 54 45 52 41 4C 82 93 BE 21 0C 24 1A 42 C6 21 +A2 52 C6 21 BA 40 14 C8 00 00 8A 4E 02 00 3E 4F +32 B0 00 02 32 C0 00 02 06 24 19 4A 02 00 8A 4E +02 00 0E 49 EB 3F 30 4D 00 C8 05 43 4F 55 4E 54 +2F 83 1E 53 8F 4E 00 00 5E 4E FF FF 30 4D 82 4E +C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 30 4D 85 12 +20 00 87 12 6E CB 7E CB 80 C8 8C CB 3D 40 94 CB +AE 22 64 3E 96 CB 0A 4E 3E 4F 3D 40 AC CB 21 27 +3D 40 86 CB 1A E2 BE 21 A1 27 B5 23 AE CB 3E 4F +3D 40 86 CB B8 23 DE 53 00 00 68 4E 08 5E F8 40 +3F 00 00 00 3D 40 62 CE CB 3F 0E CB 08 45 56 41 +4C 55 41 54 45 00 39 40 C0 21 3C 49 3B 49 3A 49 +3D 15 B0 12 2A C4 82 CB EA CB B2 41 C4 21 B2 41 +C2 21 B2 41 C0 21 3D 41 30 4D 85 12 BE 21 08 C5 +04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 +00 20 00 20 82 43 BE 21 B0 12 2A C4 04 C8 8C C7 +7E CB 82 C7 82 CB A4 C4 0C C5 1E C8 0C 73 74 61 +63 6B 20 65 6D 70 74 79 21 00 7C CC 14 C8 30 FF +DC CA 26 C5 1E C8 0A 46 52 41 4D 20 66 75 6C 6C +21 00 7C CC 3C C6 1C CC FE CA 05 41 42 4F 52 54 +3F 40 80 20 D0 3F 5A CC 86 41 42 4F 52 54 22 00 +87 12 38 C8 14 C8 7C CC EC CA 2A C4 8F 93 02 00 +03 20 2F 52 3E 4F 30 4D B0 12 04 D2 B0 12 B6 C6 +92 C3 1C 05 38 40 A0 AA 39 42 03 43 19 83 FD 23 +18 83 FA 23 92 B3 1C 05 F3 23 87 12 7E D1 14 C8 +DE 21 EA C4 AC C7 1E C8 04 1B 5B 37 6D 00 D6 C7 +58 C4 40 C6 D6 CC 04 C8 1E C8 05 6C 69 6E 65 3A +D6 C7 D0 C4 24 C6 D6 C7 1E C8 04 1B 5B 30 6D 00 +D6 C7 60 CC 00 00 83 5B 27 5D 87 12 FC CC 14 C8 +14 C8 EC CA EC CA 2A C4 E8 C8 01 27 87 12 7E CB +80 C8 EE C8 40 C6 0A CD 2A C4 B6 CB 32 C5 81 5C +92 42 C0 21 C4 21 30 4D E6 CC 81 5B 82 43 BE 21 +30 4D 0E CD 01 5D B2 43 BE 21 30 4D BE 4F 02 00 +3E 4F 30 4D D6 CA 82 49 53 00 87 12 FA CB EA C4 +40 C6 4E CD EA CC 14 C8 2C CD EC CA 2A C4 FC CC +2C CD 2A C4 36 CD 09 49 4D 4D 45 44 49 41 54 45 +1A 42 B6 21 FA D0 80 00 00 00 30 4D 00 CC 88 50 +4F 53 54 50 4F 4E 45 00 87 12 7E CB 80 C8 EE C8 +58 C4 40 C6 0A CD 0C C5 40 C6 98 CD 14 C8 14 C8 +EC CA EC CA 14 C8 EC CA EC CA 2A C4 1A CD 81 3B +82 93 BE 21 B5 27 87 12 14 C8 2A C4 EC CA 36 CE +1C CD 2A C4 9E CD 07 3A 4E 4F 4E 41 4D 45 30 12 +DC CD 2F 83 8F 4E 00 00 1E 42 C6 21 1E B3 0E 63 +0A 4E 39 40 00 02 38 40 02 02 21 3C BA 40 87 12 +FC FF A2 83 C6 21 B2 43 BE 21 30 4D B6 CD 01 3A +30 12 DC CD 92 B3 C6 21 A2 63 C6 21 87 12 7E CB +80 C8 04 CE 3D 41 08 4E 7A 4E 5A D3 5A 53 0A 58 +19 42 DA 21 6E 4E 3E F0 1E 00 09 5E 3E 4F 82 48 +B6 21 82 49 B8 21 82 4A BA 21 82 4F BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 -52 C9 0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 -68 21 7C CD B0 C9 08 56 41 52 49 41 42 4C 45 00 -B0 12 02 CF BA 40 86 12 FC FF E4 3F 58 CC 08 43 -4F 4E 53 54 41 4E 54 00 B0 12 02 CF BA 40 85 12 -FC FF 8A 4E FE FF 3E 4F D5 3F 8E CF 06 43 52 45 -41 54 45 00 B0 12 02 CF BA 40 85 12 FC FF 8A 4A -FE FF C8 3F C6 CC 05 44 4F 45 53 3E 1A 42 BA 21 -BA 40 84 12 00 00 8A 4D 02 00 3D 41 30 4D C6 CF -05 44 45 46 45 52 30 12 54 CF 8B 3F 96 CA 05 3E -42 4F 44 59 2E 52 30 4D AC CF 04 43 4F 44 45 00 -B0 12 02 CF 2A 82 82 4A C6 21 87 12 F4 CE D6 D2 -A8 D2 2A C4 FA CF 07 43 4F 44 45 4E 4E 4D 87 12 -CE CE 12 CE 04 D0 2A C4 00 00 07 45 4E 44 43 4F -44 45 87 12 F0 D2 46 CF 2A C4 5C CD 03 41 53 4D -92 42 DA 21 EC 21 B2 40 AC D2 DA 21 D9 3F 2A D0 -06 45 4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F -00 00 05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 -00 00 A2 53 C6 21 B2 43 BE 21 30 40 F0 D2 00 00 -05 4C 4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 -BA 40 2A C4 02 00 A2 52 C6 21 ED 3F 4C CE 85 48 -49 32 4C 4F 87 12 F2 C6 CE D0 0A CC 12 CE D6 D2 -A8 D2 2A C4 9E D0 82 49 46 00 2F 83 8F 4E 00 00 -1E 42 C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 -30 4D E0 CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 -C6 21 BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A -30 4D 6E CA 84 54 48 45 4E 00 9E 42 C6 21 00 00 -3E 4F 30 4D 16 D0 85 42 45 47 49 4E 30 40 F2 C6 -F4 D0 85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 -1A 42 C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D -3C D0 85 41 47 41 49 4E 39 40 24 C7 EF 3F 76 CF -85 57 48 49 4C 45 87 12 BA D0 78 C4 2A C4 64 CE -86 52 45 50 45 41 54 00 87 12 38 D1 FA D0 2A C4 -D4 D0 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 -1E 42 C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 -00 20 8A 43 00 00 30 4D 1C CC 84 4C 4F 4F 50 00 -39 40 5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF -8A 4E FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 -03 24 8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B -4C 4F 4F 50 39 40 4C C7 E5 3F 8A D1 85 4C 45 41 -56 45 1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 -02 00 B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 -00 20 89 4A 00 00 30 4D CC D1 04 4D 4F 56 45 00 -0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 -06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A -09 5A 19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D -40 D1 0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 -B4 CF 34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 -0A CC 5E C7 4C D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 -0A CC FA C4 CC CF 34 C4 CA 21 FA C4 2A C4 F0 CD -05 46 4F 52 54 48 84 12 66 D2 D0 D2 04 D6 0E D3 -70 D2 B6 D0 BE D1 3A D4 00 D3 D0 D4 EA D4 12 D1 -76 D5 00 00 0E D4 1A CE EE CF 00 00 32 D1 09 41 -53 53 45 4D 42 4C 45 52 84 12 66 D2 02 DC 6A DC -B6 DB D4 DC 7C DB F8 DC A8 D8 00 00 72 DB 22 DC -D4 DB 12 DC B8 D9 00 00 00 00 06 DD 9A D2 9E D2 -04 41 4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 -CC 21 9D 3F 7E CE 08 50 52 45 56 49 4F 55 53 00 -3A 40 0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 -04 4F 4E 4C 59 00 82 43 CC 21 30 4D 62 D1 0B 44 -45 46 49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 -30 4D 06 D1 07 43 4F 4D 50 41 52 45 0C 4E 38 4F -3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 -07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D -1E 43 30 4D FC CE 86 5B 54 48 45 4E 5D 00 30 4D -56 D3 86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 -36 C5 B0 C5 B6 C9 5E CC 44 C4 28 C7 D0 D3 8A C4 -8A C4 52 C9 06 5B 54 48 45 4E 5D 00 2C D3 32 C7 -9E D3 36 C9 40 C5 54 C4 32 C7 72 D3 2A C4 8A C4 -8A C4 52 C9 06 5B 45 4C 53 45 5D 00 2C D3 32 C7 -BE D3 36 C9 40 C5 54 C4 32 C7 70 D3 2A C4 52 C9 -04 5B 49 46 5D 00 2C D3 32 C7 72 D3 24 C7 70 D3 -36 C9 52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 6C CC -24 C7 72 D3 62 D3 84 5B 49 46 5D 00 0E 93 3E 4F -BC 27 30 4D E6 D3 89 5B 44 45 46 49 4E 45 44 5D -87 12 B0 C5 B6 C9 0E CA 6C C4 2A C4 F6 D3 8B 5B -55 4E 44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 -0E CA 6C C4 64 C5 2A C4 2A D4 3D 41 B2 4E 0E 18 -A2 4E 0C 18 3E 4F 44 3C FA D1 06 4D 41 52 4B 45 -52 00 B0 12 02 CF BA 40 84 12 FC FF BA 40 28 D4 -FE FF 9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 -C6 21 30 40 4C CF 76 D2 06 D3 1A D3 6E D4 3A 4E -82 4A C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A -08 49 29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 -1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D -E6 D2 09 50 57 52 5F 53 54 41 54 45 84 12 66 D4 -CC D2 18 DD 50 D1 09 52 53 54 5F 53 54 41 54 45 -92 42 0E 18 B0 D4 92 42 0C 18 B2 D4 EF 3F A2 D4 -08 50 57 52 5F 48 45 52 45 00 92 42 C8 21 B0 D4 -92 42 C6 21 B2 D4 30 4D B6 D4 08 52 53 54 5F 48 -45 52 45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 -EC 3F 32 D2 04 57 49 50 45 00 39 40 10 00 29 83 -B9 43 80 FF FC 23 B2 40 26 C8 24 C8 B2 40 80 D5 -7E D5 B2 40 CC D2 0E 18 B2 40 18 DD 0C 18 30 12 -C0 D4 B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 -A0 C7 9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 -BC C4 35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 -89 43 E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 -B4 21 30 41 04 D5 04 57 41 52 4D 00 30 40 80 D5 -3D 40 B4 D5 92 C3 30 01 1E 42 08 18 0E 93 11 24 -D2 B3 00 02 02 20 3E E3 1E 53 F2 D0 03 00 0A 02 -3E 90 0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 -87 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -CC CD 24 D3 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 D0 00 08 -04 02 B2 D3 06 02 B2 43 02 02 B2 40 00 01 24 02 -B2 40 FF FE 22 02 B2 D0 FF FE 26 02 B2 43 42 02 -B2 D3 46 02 B2 43 62 02 B2 D3 66 02 F2 40 A5 00 -A1 01 F2 40 10 00 A0 01 D2 43 A1 01 B2 40 00 A5 -60 01 B2 40 FF 1E 80 01 B2 40 BA 00 82 01 B2 40 -E8 01 84 01 39 40 00 01 82 43 88 01 92 D2 5E 01 -08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 39 40 -00 08 29 83 89 43 00 20 FC 23 39 40 1E 00 29 83 -B9 40 16 D6 E2 FF FB 23 B2 40 2C C8 EC FF B2 40 -81 00 00 05 92 42 02 18 06 05 92 42 04 18 08 05 -92 C3 00 05 92 D3 1A 05 3F 40 80 20 31 40 E0 20 -30 12 7C D5 37 3F 38 40 C0 21 39 48 2A 48 09 5A -1A 52 C4 21 09 9A 03 24 7E 9A FC 27 1A 83 0E 4A -2A 88 82 4A C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 -0E CA 32 C7 0E D7 02 CB 28 C7 00 CE 30 D7 10 D7 -29 4E 39 90 86 12 02 20 2E 53 0A 3C 39 90 85 12 -03 20 1E 4E 02 00 04 3C 39 90 84 12 01 20 2E 52 -1B 17 30 41 3E 40 28 00 B0 12 F8 D6 19 42 C6 21 -A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 -C4 21 92 53 C4 21 B0 12 2A C4 B6 C9 02 CB 28 C7 -6E D7 64 D7 21 53 3E 90 10 00 83 2D E1 2B 70 D7 -B2 41 C4 21 DD 3F 87 12 B0 C5 D6 D6 7E D7 0C 43 -1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 -2D 20 92 53 C4 21 B0 12 F8 D6 0E 93 03 20 3C 40 -00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 -03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 -12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 -3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 21 A2 53 -C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 -07 20 3C 40 10 02 92 53 C4 21 B0 12 F8 D6 ED 3F -7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 B0 12 -4C D7 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 4C D7 -92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 0C 5E -DA 3F B0 12 4C D7 FA 23 3C 50 10 00 B0 12 34 D7 -EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 -D6 D6 54 D8 FE 90 26 00 00 00 3E 40 20 00 03 20 -3C 50 82 00 C8 3F B0 12 4C D7 E1 23 3C 50 80 00 -B0 12 34 D7 DC 3F 1C C8 04 52 45 54 49 00 87 12 -34 C4 00 13 0A CC 2A C4 34 C4 2C 00 76 D7 4C D8 -92 D8 2E 4E 0E DC 09 4B A4 3F 80 D0 03 4D 4F 56 -84 12 88 D8 00 40 9C D8 05 4D 4F 56 2E 42 84 12 -88 D8 40 40 00 00 03 41 44 44 84 12 88 D8 00 50 -B6 D8 05 41 44 44 2E 42 84 12 88 D8 40 50 C2 D8 -04 41 44 44 43 00 84 12 88 D8 00 60 D0 D8 06 41 -44 44 43 2E 42 00 84 12 88 D8 40 60 78 D8 04 53 -55 42 43 00 84 12 88 D8 00 70 EE D8 06 53 55 42 -43 2E 42 00 84 12 88 D8 40 70 FC D8 03 53 55 42 -84 12 88 D8 00 80 0C D9 05 53 55 42 2E 42 84 12 -88 D8 40 80 62 D0 03 43 4D 50 84 12 88 D8 00 90 -26 D9 05 43 4D 50 2E 42 84 12 88 D8 40 90 50 D0 -04 44 41 44 44 00 84 12 88 D8 00 A0 40 D9 06 44 -41 44 44 2E 42 00 84 12 88 D8 40 A0 32 D9 03 42 -49 54 84 12 88 D8 00 B0 5E D9 05 42 49 54 2E 42 -84 12 88 D8 40 B0 6A D9 03 42 49 43 84 12 88 D8 -00 C0 78 D9 05 42 49 43 2E 42 84 12 88 D8 40 C0 -84 D9 03 42 49 53 84 12 88 D8 00 D0 92 D9 05 42 -49 53 2E 42 84 12 88 D8 40 D0 00 00 03 58 4F 52 -84 12 88 D8 00 E0 AC D9 05 58 4F 52 2E 42 84 12 -88 D8 40 E0 DE D8 03 41 4E 44 84 12 88 D8 00 F0 -C6 D9 05 41 4E 44 2E 42 84 12 88 D8 40 F0 B0 C5 -76 D7 E4 D9 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 -0C DA 4F 3F 18 D9 03 52 52 43 84 12 DE D9 00 10 -F6 D9 05 52 52 43 2E 42 84 12 DE D9 40 10 02 DA -04 53 57 50 42 00 84 12 DE D9 80 10 10 DA 03 52 -52 41 84 12 DE D9 00 11 1E DA 05 52 52 41 2E 42 -84 12 DE D9 40 11 2A DA 03 53 58 54 84 12 DE D9 -80 11 00 00 04 50 55 53 48 00 84 12 DE D9 00 12 -44 DA 06 50 55 53 48 2E 42 00 84 12 DE D9 40 12 -9E D9 04 43 41 4C 4C 00 84 12 DE D9 80 12 1A 53 -0E 4A 87 12 E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 -62 6F 75 6E 64 73 7C CD B0 C5 D6 D6 8E DA 92 53 -C4 21 3E 40 2C 00 B0 12 2A C4 B6 C9 02 CB 28 C7 -00 CE 42 D8 A6 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E -59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 -10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 -8F 3F 38 DA 04 52 52 43 4D 00 84 12 88 DA 50 00 -D4 DA 04 52 52 41 4D 00 84 12 88 DA 50 01 E2 DA -04 52 4C 41 4D 00 84 12 88 DA 50 02 F0 DA 04 52 -52 55 4D 00 84 12 88 DA 50 03 52 DA 05 50 55 53 -48 4D 84 12 88 DA 00 15 0C DB 04 50 4F 50 4D 00 -84 12 88 DA 00 17 85 12 00 3C FE DA 03 53 3E 3D -85 12 00 38 2C DB 02 53 3C 00 85 12 00 34 1A DB -03 30 3E 3D 85 12 00 30 40 DB 02 30 3C 00 85 12 -00 30 00 00 02 55 3C 00 85 12 00 2C 54 DB 03 55 -3E 3D 85 12 00 28 4A DB 03 30 3C 3E 85 12 00 24 -68 DB 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 -1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D -5E DB 04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F -09 48 29 53 0A 89 0A 11 3A 90 00 02 61 2F 88 DA -00 00 30 4D 4E D9 04 45 4C 53 45 00 1A 42 C6 21 -BA 40 00 3C 00 00 A2 53 C6 21 2F 83 8F 4A 00 00 -E3 3F 92 DB 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F -19 42 C6 21 2A 83 0A 89 0A 11 3A 90 00 FE 40 3B -3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 21 30 4D -D2 D9 05 41 47 41 49 4E 87 12 26 DB DA DB 2A C4 -00 00 05 57 48 49 4C 45 87 12 80 DB 78 C4 2A C4 -36 DB 06 52 45 50 45 41 54 00 87 12 26 DB DA DB -98 DB 2A C4 36 DC 3D 41 2E 4E 08 4E 3E 4F 2A 48 -0A 93 88 43 00 00 CA 23 98 42 C6 21 00 00 30 4D -62 DA 03 42 57 31 84 12 34 DC E0 21 52 DC 03 42 -57 32 84 12 34 DC E2 21 5E DC 03 42 57 33 84 12 -34 DC E4 21 76 DC 3D 41 1A 42 C6 21 2E 4E 28 4E -08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 C6 21 -8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 -74 DC E6 21 9A DC 03 46 57 32 84 12 74 DC E8 21 -A6 DC 03 46 57 33 84 12 74 DC EA 21 3E 90 00 30 +1E C8 0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 +68 21 88 CC CC CB 05 44 45 46 45 52 B0 12 F4 CD +BA 40 30 40 FC FF BA 40 EA CD FE FF E3 3F 5A CB +06 43 52 45 41 54 45 00 B0 12 F4 CD BA 40 85 12 +FC FF 8A 4A FE FF D6 3F 66 CE 05 44 4F 45 53 3E +1A 42 BA 21 BA 40 84 12 00 00 8A 4D 02 00 3D 41 +30 4D 76 C9 05 3E 42 4F 44 59 2E 52 30 4D 80 CE +04 43 4F 44 45 00 B0 12 F4 CD A2 82 C6 21 87 12 +0E D1 E8 D0 2A C4 C0 CE 07 43 4F 44 45 4E 4E 4D +B0 12 C2 CD F2 3F 00 00 07 45 4E 44 43 4F 44 45 +87 12 1C D1 36 CE 2A C4 68 CC 03 41 53 4D B2 40 +EC D0 DA 21 E0 3F E8 CE 06 45 4E 44 41 53 4D 00 +87 12 F0 CE 30 D1 2A C4 00 00 05 43 4F 4C 4F 4E +1A 42 C6 21 BA 40 87 12 00 00 A2 53 C6 21 B2 43 +BE 21 30 40 1C D1 00 00 05 4C 4F 32 48 49 1A 42 +C6 21 BA 40 B0 12 00 00 BA 40 2A C4 02 00 A2 52 +C6 21 ED 3F 56 CD 85 48 49 32 4C 4F 87 12 DC CA +86 CF EC CA 1C CD 0E D1 E8 D0 2A C4 56 CF 82 49 +46 00 2F 83 8F 4E 00 00 1E 42 C6 21 A2 52 C6 21 +BE 40 40 C6 00 00 2E 53 30 4D 9A CE 84 45 4C 53 +45 00 A2 52 C6 21 1A 42 C6 21 BA 40 3C C6 FC FF +8E 4A 00 00 2A 83 0E 4A 30 4D 4E C9 84 54 48 45 +4E 00 9E 42 C6 21 00 00 3E 4F 30 4D D8 CE 85 42 +45 47 49 4E 30 40 DC CA AC CF 85 55 4E 54 49 4C +39 40 40 C6 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF +8A 4E FE FF 3E 4F 30 4D FA CE 85 41 47 41 49 4E +39 40 3C C6 EF 3F 7A C8 85 57 48 49 4C 45 87 12 +72 CF 76 C4 2A C4 34 C8 86 52 45 50 45 41 54 00 +87 12 F0 CF B2 CF 2A C4 8C CF 82 44 4F 00 2F 83 +8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 BE 40 54 C6 +FE FF A2 53 00 20 1A 42 00 20 8A 43 00 00 30 4D +1E CB 84 4C 4F 4F 50 00 39 40 76 C6 A2 52 C6 21 +1A 42 C6 21 8A 49 FC FF 8A 4E FE FF 1E 42 00 20 +A2 83 00 20 2E 4E 0E 93 03 24 8E 4A 00 00 F6 3F +3E 4F 30 4D 90 C6 85 2B 4C 4F 4F 50 39 40 64 C6 +E5 3F 42 D0 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F +3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 +18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 +E8 49 00 00 1A 83 FA 23 30 4D 14 C8 CA 21 F2 C4 +2A C4 84 12 BA D0 EA CF 92 D3 1A D0 FA CC 6E CF +76 D0 A6 D4 64 C8 A2 D1 BC D1 CA CF 3C D2 00 00 +78 D4 24 CD B4 CE 00 00 84 12 BA D0 C4 D9 26 DA +78 D9 9A DA 3E D9 00 00 6E D6 00 00 34 D9 E4 D9 +96 D9 D4 D9 7E D7 00 00 00 00 76 DA E6 D0 3A 40 +0C 00 39 40 CA 21 38 40 CC 21 C6 3F 3A 40 0E 00 +39 40 CC 21 38 40 CA 21 B9 3F 82 43 CC 21 30 4D +92 42 CA 21 DA 21 30 4D C2 D0 2A D1 30 D1 40 D1 +3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 3D 40 10 00 +09 4A 08 49 29 83 18 48 FE FF 0E 98 FC 2B 89 48 +00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 +30 4D 6E CD 09 50 57 52 5F 53 54 41 54 45 84 12 +38 D1 0C D1 AC DA 08 D0 09 52 53 54 5F 53 54 41 +54 45 92 42 0E 18 82 D1 92 42 0C 18 84 D1 EF 3F +74 D1 08 50 57 52 5F 48 45 52 45 00 92 42 C8 21 +82 D1 92 42 C6 21 84 D1 30 4D 88 D1 08 52 53 54 +5F 48 45 52 45 00 92 42 C8 21 0E 18 92 42 C6 21 +0C 18 EC 3F F8 CF 04 57 49 50 45 00 39 40 10 00 +29 83 B9 43 80 FF FC 23 B2 40 E0 C6 DE C6 B2 40 +46 D2 44 D2 B2 40 0C D1 0E 18 B2 40 AC DA 0C 18 +30 12 92 D1 B2 40 86 C7 84 C7 B2 40 08 C8 06 C8 +B2 40 98 C6 96 C6 B2 40 18 00 0A 18 37 40 1A C4 +36 40 92 C4 35 40 0E C4 34 40 00 C4 B2 40 0A 00 +DC 21 B2 40 20 00 B4 21 30 41 D6 D1 04 57 41 52 +4D 00 30 40 46 D2 3D 40 7A D2 92 C3 30 01 1E 42 +08 18 0E 93 11 24 D2 B3 00 02 02 20 3E E3 1E 53 +F2 D0 03 00 0A 02 3E 90 0A 00 B8 27 3E 90 16 00 +B5 2F 2E 93 84 27 8D 2F 30 4D 1E C8 06 0D 1B 5B +37 6D 23 00 D6 C7 34 C6 1E C8 19 46 61 73 74 46 +6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 68 6F 6F 72 +65 6E 73 20 D6 C7 14 C8 30 FF DC CA B8 C4 24 C6 +1E C8 0A 62 79 74 65 73 20 66 72 65 65 00 3C C6 +D6 CC BE CF 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 +B2 40 04 A5 20 01 7A D2 B2 40 88 5A CC 01 B2 D0 +00 08 04 02 B2 D3 06 02 B2 43 02 02 B2 D0 FF FE +26 02 B2 43 22 02 B2 43 42 02 B2 D3 46 02 B2 43 +62 02 B2 D3 66 02 F2 40 A5 00 A1 01 F2 40 10 00 +A0 01 D2 43 A1 01 B2 40 00 A5 60 01 B2 40 FF 1E +80 01 B2 40 BA 00 82 01 B2 40 E8 01 84 01 39 40 +00 01 82 43 88 01 92 D2 5E 01 08 18 38 40 59 14 +18 83 FE 23 19 83 FA 23 39 40 00 08 29 83 89 43 +00 20 FC 23 39 40 1E 00 29 83 B9 40 D8 D2 E2 FF +FB 23 B2 40 26 C7 EC FF B2 40 81 00 00 05 92 42 +02 18 06 05 92 42 04 18 08 05 92 C3 00 05 92 D3 +1A 05 3F 40 80 20 31 40 E0 20 30 12 42 D2 43 3F +C4 D2 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F +39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 +19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 +30 4D EE CD 86 5B 54 48 45 4E 5D 00 30 4D C4 D3 +86 5B 45 4C 53 45 5D 00 87 12 14 C8 00 00 C6 C4 +7E CB 80 C8 60 CB 34 C4 40 C6 3A D4 44 C4 1E C8 +06 5B 54 48 45 4E 5D 00 9A D3 4A C6 0A D4 F8 C7 +D0 C4 58 C4 4A C6 E0 D3 2A C4 44 C4 1E C8 06 5B +45 4C 53 45 5D 00 9A D3 4A C6 28 D4 F8 C7 D0 C4 +58 C4 4A C6 DE D3 2A C4 1E C8 04 5B 49 46 5D 00 +9A D3 4A C6 E0 D3 3C C6 DE D3 F8 C7 1E C8 05 0D +0A 6B 6F 20 D6 C7 8C C7 6E CB 3C C6 E0 D3 D0 D3 +84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D 50 D4 +89 5B 44 45 46 49 4E 45 44 5D 87 12 7E CB 80 C8 +EE C8 6A C4 2A C4 60 D4 8B 5B 55 4E 44 45 46 49 +4E 45 44 5D 87 12 7E CB 80 C8 EE C8 6A C4 00 C5 +2A C4 94 D4 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F +30 40 92 D1 84 D0 06 4D 41 52 4B 45 52 00 B0 12 +F4 CD BA 40 84 12 FC FF BA 40 92 D4 FE FF 9A 42 +C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 30 40 +3C CE 1C 15 B0 12 2A C4 80 C8 EE C8 4A C6 E8 D4 +E2 C9 40 C6 0A CD 02 D5 EA D4 39 4E 39 80 86 12 +08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 01 24 +2E 82 1B 17 30 41 3E 40 28 00 B0 12 D2 D4 19 42 +C6 21 A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 +12 12 C4 21 92 53 C4 21 B0 12 2A C4 80 C8 E2 C9 +40 C6 40 D5 36 D5 21 53 3E 90 10 00 7D 2D E1 2B +42 D5 B2 41 C4 21 DD 3F 87 12 7E CB 74 C8 50 D5 +0C 43 1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 +23 00 27 20 92 53 C4 21 B0 12 D2 D4 3C 40 00 03 +0E 93 1C 24 3C 40 10 03 1E 93 18 24 3C 40 20 03 +2E 93 14 24 3C 40 20 02 2E 92 10 24 3C 40 30 02 +3E 92 0C 24 3C 40 30 03 3E 93 08 24 3C 40 30 00 +19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 4F 3D 41 +30 4D 7A 90 26 00 07 20 3C 40 10 02 92 53 C4 21 +B0 12 D2 D4 ED 3F 7A 90 40 00 16 20 3C 40 20 00 +92 53 C4 21 B0 12 1E D5 0C 20 3C 50 10 00 3E 40 +2B 00 B0 12 1E D5 92 92 C0 21 C4 21 02 24 92 53 +C4 21 8E 10 0C 5E DA 3F B0 12 1E D5 FA 23 3C 50 +10 00 B0 12 06 D5 EF 3F 0C 43 1B 42 C6 21 A2 53 +C6 21 87 12 7E CB 74 C8 1A D6 FE 90 26 00 00 00 +3E 40 20 00 03 20 3C 50 82 00 C8 3F B0 12 1E D5 +E1 23 3C 50 80 00 B0 12 06 D5 DC 3F D6 C6 04 52 +45 54 49 00 87 12 14 C8 00 13 EC CA 2A C4 14 C8 +2C 00 48 D5 12 D6 58 D6 09 4B 2E 4E 0E DC A4 3F +38 CF 03 4D 4F 56 84 12 4E D6 00 40 62 D6 05 4D +4F 56 2E 42 84 12 4E D6 40 40 00 00 03 41 44 44 +84 12 4E D6 00 50 7C D6 05 41 44 44 2E 42 84 12 +4E D6 40 50 88 D6 04 41 44 44 43 00 84 12 4E D6 +00 60 96 D6 06 41 44 44 43 2E 42 00 84 12 4E D6 +40 60 3E D6 04 53 55 42 43 00 84 12 4E D6 00 70 +B4 D6 06 53 55 42 43 2E 42 00 84 12 4E D6 40 70 +C2 D6 03 53 55 42 84 12 4E D6 00 80 D2 D6 05 53 +55 42 2E 42 84 12 4E D6 40 80 1A CF 03 43 4D 50 +84 12 4E D6 00 90 EC D6 05 43 4D 50 2E 42 84 12 +4E D6 40 90 08 CF 04 44 41 44 44 00 84 12 4E D6 +00 A0 06 D7 06 44 41 44 44 2E 42 00 84 12 4E D6 +40 A0 F8 D6 03 42 49 54 84 12 4E D6 00 B0 24 D7 +05 42 49 54 2E 42 84 12 4E D6 40 B0 30 D7 03 42 +49 43 84 12 4E D6 00 C0 3E D7 05 42 49 43 2E 42 +84 12 4E D6 40 C0 4A D7 03 42 49 53 84 12 4E D6 +00 D0 58 D7 05 42 49 53 2E 42 84 12 4E D6 40 D0 +00 00 03 58 4F 52 84 12 4E D6 00 E0 72 D7 05 58 +4F 52 2E 42 84 12 4E D6 40 E0 A4 D6 03 41 4E 44 +84 12 4E D6 00 F0 8C D7 05 41 4E 44 2E 42 84 12 +4E D6 40 F0 7E CB 48 D5 AA D7 0A 4C 3C F0 70 00 +8A 10 3A F0 0F 00 0C DA 4F 3F DE D6 03 52 52 43 +84 12 A4 D7 00 10 BC D7 05 52 52 43 2E 42 84 12 +A4 D7 40 10 C8 D7 04 53 57 50 42 00 84 12 A4 D7 +80 10 D6 D7 03 52 52 41 84 12 A4 D7 00 11 E4 D7 +05 52 52 41 2E 42 84 12 A4 D7 40 11 F0 D7 03 53 +58 54 84 12 A4 D7 80 11 00 00 04 50 55 53 48 00 +84 12 A4 D7 00 12 0A D8 06 50 55 53 48 2E 42 00 +84 12 A4 D7 40 12 64 D7 04 43 41 4C 4C 00 84 12 +A4 D7 80 12 1A 53 0E 4A 87 12 34 C6 1E C8 0D 6F +75 74 20 6F 66 20 62 6F 75 6E 64 73 88 CC 7E CB +74 C8 54 D8 92 53 C4 21 3E 40 2C 00 B0 12 2A C4 +80 C8 E2 C9 40 C6 0A CD 08 D6 6C D8 0A 4E 3E 4F +1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 +0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 +D1 2F 8A 10 5A 06 8F 3F FE D7 04 52 52 43 4D 00 +84 12 4E D8 50 00 9A D8 04 52 52 41 4D 00 84 12 +4E D8 50 01 A8 D8 04 52 4C 41 4D 00 84 12 4E D8 +50 02 B6 D8 04 52 52 55 4D 00 84 12 4E D8 50 03 +18 D8 05 50 55 53 48 4D 84 12 4E D8 00 15 D2 D8 +04 50 4F 50 4D 00 84 12 4E D8 00 17 C4 D8 03 53 +3E 3D 85 12 00 38 EE D8 02 53 3C 00 85 12 00 34 +E0 D8 03 30 3E 3D 85 12 00 30 02 D9 02 30 3C 00 +85 12 00 30 00 00 02 55 3C 00 85 12 00 2C 16 D9 +03 55 3E 3D 85 12 00 28 0C D9 03 30 3C 3E 85 12 +00 24 2A D9 02 30 3D 00 85 12 00 20 00 00 02 49 +46 00 1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A +30 4D 20 D9 04 54 48 45 4E 00 1A 42 C6 21 08 4E +3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 63 2F +88 DA 00 00 30 4D 14 D7 04 45 4C 53 45 00 1A 42 +C6 21 BA 40 00 3C 00 00 A2 53 C6 21 2F 83 8F 4A +00 00 E3 3F 54 D9 05 55 4E 54 49 4C 3A 4F 08 4E +3E 4F 19 42 C6 21 2A 83 0A 89 0A 11 3A 90 00 FE +42 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 21 +30 4D 98 D7 05 41 47 41 49 4E 0A 4E 38 40 00 3C +E7 3F 00 00 05 57 48 49 4C 45 87 12 42 D9 76 C4 +2A C4 F8 D8 06 52 45 50 45 41 54 00 87 12 CA D9 +5A D9 2A C4 F6 D9 3D 41 08 4E 3E 4F 2A 48 B2 92 +C4 21 CD 2F 98 42 C6 21 00 00 30 4D 28 D8 03 42 +57 31 84 12 F4 D9 00 00 0E DA 03 42 57 32 84 12 +F4 D9 00 00 1A DA 03 42 57 33 84 12 F4 D9 00 00 +32 DA 3D 41 1A 42 C6 21 28 4E B2 92 C4 21 90 2B +BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F 30 4D +00 00 03 46 57 31 84 12 30 DA 00 00 52 DA 03 46 +57 32 84 12 30 DA 00 00 5E DA 03 46 57 33 84 12 +30 DA 00 00 00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 -30 4D B2 DC 04 47 4F 54 4F 00 87 12 26 DB F2 CD -00 CC 2A C4 00 00 05 3F 47 4F 54 4F 87 12 BC DC -F2 CD 00 CC 2A C4 00 00 03 4A 4D 50 87 12 F2 CD -08 DC 2A C4 E6 DC 04 3F 4A 4D 50 00 87 12 BC DC -F2 CD 78 C4 DA DB 2A C4 +87 12 FC CC 16 CB 2A C4 6A DA 04 47 4F 54 4F 00 +2F 83 8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -16 D6 +D8 D2 q diff --git a/binaries/MSP_EXP430FR4133_1MHz.txt b/binaries/MSP_EXP430FR4133_1MHz.txt index 9bb5309..d31be6a 100644 --- a/binaries/MSP_EXP430FR4133_1MHz.txt +++ b/binaries/MSP_EXP430FR4133_1MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 00 D6 E8 03 05 00 18 00 08 DD CC D2 -2C 01 7B B0 FC C7 0E C8 +10 00 08 00 00 D6 E8 03 05 00 18 00 9C DA 0C D1 +2D 01 6B B0 B6 C6 C8 C6 @C400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 F2 C2 03 02 30 41 B2 40 -13 00 0E 05 F2 D2 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 0A CC 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 0A CC 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C4 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C4 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C4 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C4 02 3E 52 00 0E 12 3E 4F 30 4D 70 C4 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C4 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C4 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C4 +01 21 BE 4F 00 00 3E 4F 30 4D CC C4 02 30 3D 00 +1E 83 0E 7E 30 4D FC C4 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C5 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C4 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 C5 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 C5 02 23 53 00 87 12 88 C5 C0 C5 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C5 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C4 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C5 34 C4 86 C4 D4 C4 BA C5 +92 C4 F8 C5 D4 C5 D6 C7 7E CB 82 C7 2A C4 22 C5 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C5 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C6 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 C6 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 C6 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 F2 C2 03 02 30 41 B2 40 13 00 0E 05 F2 D2 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C6 +B0 12 B6 C6 12 D2 0A 18 F9 3F F0 C4 06 41 43 43 +45 50 54 00 3C 40 64 C7 3B 40 2E C7 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C7 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A C7 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C4 04 45 4D 49 +54 00 30 40 86 C7 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C C7 04 45 43 48 4F 00 B2 40 82 48 +52 C7 82 43 DE 21 30 4D 32 C6 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C7 92 43 DE 21 30 4D 20 C6 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C7 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C7 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C5 +02 43 52 00 30 40 08 C8 87 12 1E C8 02 0D 0A 00 +D6 C7 2A C4 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C5 82 53 22 00 82 43 B4 21 87 12 14 C8 +1E C8 EC CA 14 C8 22 00 80 C8 4C C8 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA C7 82 2E 22 00 87 12 38 C8 14 C8 D6 C7 +EC CA 2A C4 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,305 +86,284 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D 0E C9 03 55 +00 00 35 40 0E C4 34 40 00 C4 30 4D D0 C7 03 55 4D 2A 2C 4F 0B 43 09 43 08 43 1A 43 0E BA 02 24 09 5C 08 6B 0C 5C 0B 6B 0A 5A F8 2B 8F 49 00 00 -0E 48 30 4D A2 C5 07 3E 4E 55 4D 42 45 52 2C 4F +0E 48 30 4D 82 C4 07 3E 4E 55 4D 42 45 52 2C 4F 0B 4E 1A 42 DC 21 68 4C 78 80 30 00 78 90 0A 00 05 28 78 80 07 00 78 90 0A 00 1F 28 08 9A 22 C3 -1C 2C 5D 15 1C 4F 02 00 0E 4A 3D 40 D0 CA D2 3F -D2 CA 81 49 02 00 1C 4F 04 00 1E 41 04 00 3D 40 -E4 CA C8 3F E6 CA 39 51 3E 61 8F 49 04 00 8F 4E +1C 2C 5D 15 1C 4F 02 00 0E 4A 3D 40 B0 C9 D2 3F +B2 C9 81 49 02 00 1C 4F 04 00 1E 41 04 00 3D 40 +C4 C9 C8 3F C6 C9 39 51 3E 61 8F 49 04 00 8F 4E 02 00 3A 17 1C 53 1B 83 D6 23 8F 4C 00 00 0E 4B -30 4D 1B 42 DC 21 0C 43 2D 15 3D 40 4E CB 0A 4B -3F 82 8F 4E 06 00 8F 43 04 00 8F 43 02 00 0C 4E -7B 4C 68 4C 78 90 2D 00 04 28 BE 23 B1 43 02 00 -E1 3F 2A 43 78 80 25 00 07 24 3A 52 68 53 04 24 -3A 40 10 00 58 83 AF 23 1C 53 1B 83 EA 3F 50 CB -31 24 2D 83 78 90 28 00 CD 27 32 B0 00 02 2A 20 -32 D0 00 02 78 90 F7 00 C5 27 78 90 F5 00 22 20 -09 43 8F 49 02 00 5B 83 09 4B 09 5C 69 49 79 80 -30 00 79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 -0A 28 09 9A 08 2C 8F 49 00 00 0E 4A 2C 15 B0 12 -E8 C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 -0E 4B 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 -00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 -04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 -BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 -01 20 2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 -0A 4E 3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 -C6 21 8A 4E 00 00 3E 4F 30 4D 08 CC 87 4C 49 54 -45 52 41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 -C6 21 BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 -00 02 32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 -0E 49 EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 -1E 53 8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 -B2 4F C2 21 3E 4F 82 43 C4 21 30 4D 87 12 6C CC -B0 C5 B6 C9 86 CC 3D 40 8E CC C1 22 3C 3E 90 CC -0A 4E 3E 4F 3D 40 A6 CC 34 27 3D 40 80 CC 1A E2 -BE 21 B3 27 AD 23 A8 CC 3E 4F 3D 40 80 CC BA 23 -DE 53 00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 -72 CF CD 3F F8 CB 08 45 56 41 4C 55 41 54 45 00 -39 40 C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 -7C CC E4 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 -3D 41 30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 -31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 -2A C4 42 C9 92 C8 DC C8 7C CC DE C4 70 C5 52 C9 -0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 70 CD -34 C4 30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 -66 75 6C 6C 21 00 70 CD 24 C7 12 CD C0 C7 05 41 -42 4F 52 54 3F 40 80 20 D1 3F 4E CD 86 41 42 4F -52 54 22 00 87 12 6C C9 34 C4 70 CD 0A CC 2A C4 -8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 32 D5 -B0 12 FC C7 92 C3 1C 05 38 40 AA 0A 39 42 09 59 -03 43 19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 -87 12 AC D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B -5B 37 6D 00 14 C9 54 C4 28 C7 CC CD 42 C9 52 C9 -05 6C 69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 -04 1B 5B 30 6D 00 14 C9 54 CD 00 00 83 5B 27 5D -87 12 F2 CD 34 C4 34 C4 0A CC 0A CC 2A C4 08 CA -01 27 87 12 B0 C5 B6 C9 0E CA 28 C7 00 CE 2A C4 -B0 CC CE C5 81 5C 92 42 C0 21 C4 21 30 4D DC CD -81 5B 82 43 BE 21 30 4D 04 CE 01 5D B2 43 BE 21 -30 4D BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 -87 12 C8 C5 F2 C4 28 C7 44 CE E0 CD 34 C4 22 CE -0A CC 2A C4 F2 CD 22 CE 2A C4 2C CE 09 49 4D 4D -45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 -30 4D 68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 -99 42 BA 21 00 00 A2 53 C6 21 30 4D F6 CC 88 50 -4F 53 54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA -54 C4 28 C7 00 CE 70 C5 28 C7 A8 CE 34 C4 34 C4 -0A CC 0A CC 34 C4 0A CC 0A CC 2A C4 10 CE 81 3B -82 93 BE 21 A8 27 87 12 34 C4 2A C4 0A CC 46 CF -12 CE 2A C4 AE CE 07 3A 4E 4F 4E 41 4D 45 2F 83 -8F 4E 00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 -02 02 B0 12 32 CF BA 40 87 12 FC FF A2 83 C6 21 -B2 43 BE 21 82 4F BC 21 30 4D C6 CE 01 3A 30 12 -E6 CE 87 12 92 C9 B0 C5 B6 C9 0C CF 3D 41 08 4E -7A 4E 5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 -1E 00 09 5E 3E 4F BA 40 30 40 00 00 BA 40 F8 CE -02 00 82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 +30 4D 32 C0 00 02 1B 42 DC 21 0C 43 2D 15 3D 40 +32 CA 0A 4B 3F 82 8F 4E 06 00 8F 43 04 00 8F 43 +02 00 0C 4E 7B 4C 68 4C 78 90 2D 00 04 28 BC 23 +B1 43 02 00 DF 3F 2A 43 78 80 25 00 07 24 3A 52 +68 53 04 24 3A 40 10 00 58 83 AD 23 1C 53 1B 83 +EA 3F 34 CA 2E 24 2D 83 78 90 28 00 CB 27 32 D0 +00 02 78 90 F7 00 C6 27 78 90 F5 00 22 20 09 43 +8F 49 02 00 5B 83 09 4B 09 5C 69 49 79 80 30 00 +79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 +09 9A 08 2C 8F 49 00 00 0E 4A 2C 15 B0 12 3E C5 +2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4B +4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 +3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 +BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 +00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 +2F 53 30 4D 7E C6 04 48 45 52 45 00 2F 83 8F 4E +00 00 1E 42 C6 21 30 4D B6 C4 01 2C 1A 42 C6 21 +8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D EC C6 05 41 +4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D A6 C7 07 45 +58 45 43 55 54 45 0A 4E 3E 4F 00 4A EA CA 87 4C +49 54 45 52 41 4C 82 93 BE 21 0C 24 1A 42 C6 21 +A2 52 C6 21 BA 40 14 C8 00 00 8A 4E 02 00 3E 4F +32 B0 00 02 32 C0 00 02 06 24 19 4A 02 00 8A 4E +02 00 0E 49 EB 3F 30 4D 00 C8 05 43 4F 55 4E 54 +2F 83 1E 53 8F 4E 00 00 5E 4E FF FF 30 4D 82 4E +C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 30 4D 85 12 +20 00 87 12 6E CB 7E CB 80 C8 8C CB 3D 40 94 CB +AE 22 64 3E 96 CB 0A 4E 3E 4F 3D 40 AC CB 21 27 +3D 40 86 CB 1A E2 BE 21 A1 27 B5 23 AE CB 3E 4F +3D 40 86 CB B8 23 DE 53 00 00 68 4E 08 5E F8 40 +3F 00 00 00 3D 40 62 CE CB 3F 0E CB 08 45 56 41 +4C 55 41 54 45 00 39 40 C0 21 3C 49 3B 49 3A 49 +3D 15 B0 12 2A C4 82 CB EA CB B2 41 C4 21 B2 41 +C2 21 B2 41 C0 21 3D 41 30 4D 85 12 BE 21 08 C5 +04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 +00 20 00 20 82 43 BE 21 B0 12 2A C4 04 C8 8C C7 +7E CB 82 C7 82 CB A4 C4 0C C5 1E C8 0C 73 74 61 +63 6B 20 65 6D 70 74 79 21 00 7C CC 14 C8 30 FF +DC CA 26 C5 1E C8 0A 46 52 41 4D 20 66 75 6C 6C +21 00 7C CC 3C C6 1C CC FE CA 05 41 42 4F 52 54 +3F 40 80 20 D0 3F 5A CC 86 41 42 4F 52 54 22 00 +87 12 38 C8 14 C8 7C CC EC CA 2A C4 8F 93 02 00 +03 20 2F 52 3E 4F 30 4D B0 12 04 D2 B0 12 B6 C6 +92 C3 1C 05 38 40 AA 0A 39 42 03 43 19 83 FD 23 +18 83 FA 23 92 B3 1C 05 F3 23 87 12 7E D1 14 C8 +DE 21 EA C4 AC C7 1E C8 04 1B 5B 37 6D 00 D6 C7 +58 C4 40 C6 D6 CC 04 C8 1E C8 05 6C 69 6E 65 3A +D6 C7 D0 C4 24 C6 D6 C7 1E C8 04 1B 5B 30 6D 00 +D6 C7 60 CC 00 00 83 5B 27 5D 87 12 FC CC 14 C8 +14 C8 EC CA EC CA 2A C4 E8 C8 01 27 87 12 7E CB +80 C8 EE C8 40 C6 0A CD 2A C4 B6 CB 32 C5 81 5C +92 42 C0 21 C4 21 30 4D E6 CC 81 5B 82 43 BE 21 +30 4D 0E CD 01 5D B2 43 BE 21 30 4D BE 4F 02 00 +3E 4F 30 4D D6 CA 82 49 53 00 87 12 FA CB EA C4 +40 C6 4E CD EA CC 14 C8 2C CD EC CA 2A C4 FC CC +2C CD 2A C4 36 CD 09 49 4D 4D 45 44 49 41 54 45 +1A 42 B6 21 FA D0 80 00 00 00 30 4D 00 CC 88 50 +4F 53 54 50 4F 4E 45 00 87 12 7E CB 80 C8 EE C8 +58 C4 40 C6 0A CD 0C C5 40 C6 98 CD 14 C8 14 C8 +EC CA EC CA 14 C8 EC CA EC CA 2A C4 1A CD 81 3B +82 93 BE 21 B5 27 87 12 14 C8 2A C4 EC CA 36 CE +1C CD 2A C4 9E CD 07 3A 4E 4F 4E 41 4D 45 30 12 +DC CD 2F 83 8F 4E 00 00 1E 42 C6 21 1E B3 0E 63 +0A 4E 39 40 00 02 38 40 02 02 21 3C BA 40 87 12 +FC FF A2 83 C6 21 B2 43 BE 21 30 4D B6 CD 01 3A +30 12 DC CD 92 B3 C6 21 A2 63 C6 21 87 12 7E CB +80 C8 04 CE 3D 41 08 4E 7A 4E 5A D3 5A 53 0A 58 +19 42 DA 21 6E 4E 3E F0 1E 00 09 5E 3E 4F 82 48 +B6 21 82 49 B8 21 82 4A BA 21 82 4F BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 -52 C9 0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 -68 21 7C CD B0 C9 08 56 41 52 49 41 42 4C 45 00 -B0 12 02 CF BA 40 86 12 FC FF E4 3F 58 CC 08 43 -4F 4E 53 54 41 4E 54 00 B0 12 02 CF BA 40 85 12 -FC FF 8A 4E FE FF 3E 4F D5 3F 8E CF 06 43 52 45 -41 54 45 00 B0 12 02 CF BA 40 85 12 FC FF 8A 4A -FE FF C8 3F C6 CC 05 44 4F 45 53 3E 1A 42 BA 21 -BA 40 84 12 00 00 8A 4D 02 00 3D 41 30 4D C6 CF -05 44 45 46 45 52 30 12 54 CF 8B 3F 96 CA 05 3E -42 4F 44 59 2E 52 30 4D AC CF 04 43 4F 44 45 00 -B0 12 02 CF 2A 82 82 4A C6 21 87 12 F4 CE D6 D2 -A8 D2 2A C4 FA CF 07 43 4F 44 45 4E 4E 4D 87 12 -CE CE 12 CE 04 D0 2A C4 00 00 07 45 4E 44 43 4F -44 45 87 12 F0 D2 46 CF 2A C4 5C CD 03 41 53 4D -92 42 DA 21 EC 21 B2 40 AC D2 DA 21 D9 3F 2A D0 -06 45 4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F -00 00 05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 -00 00 A2 53 C6 21 B2 43 BE 21 30 40 F0 D2 00 00 -05 4C 4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 -BA 40 2A C4 02 00 A2 52 C6 21 ED 3F 4C CE 85 48 -49 32 4C 4F 87 12 F2 C6 CE D0 0A CC 12 CE D6 D2 -A8 D2 2A C4 9E D0 82 49 46 00 2F 83 8F 4E 00 00 -1E 42 C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 -30 4D E0 CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 -C6 21 BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A -30 4D 6E CA 84 54 48 45 4E 00 9E 42 C6 21 00 00 -3E 4F 30 4D 16 D0 85 42 45 47 49 4E 30 40 F2 C6 -F4 D0 85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 -1A 42 C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D -3C D0 85 41 47 41 49 4E 39 40 24 C7 EF 3F 76 CF -85 57 48 49 4C 45 87 12 BA D0 78 C4 2A C4 64 CE -86 52 45 50 45 41 54 00 87 12 38 D1 FA D0 2A C4 -D4 D0 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 -1E 42 C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 -00 20 8A 43 00 00 30 4D 1C CC 84 4C 4F 4F 50 00 -39 40 5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF -8A 4E FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 -03 24 8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B -4C 4F 4F 50 39 40 4C C7 E5 3F 8A D1 85 4C 45 41 -56 45 1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 -02 00 B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 -00 20 89 4A 00 00 30 4D CC D1 04 4D 4F 56 45 00 -0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 -06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A -09 5A 19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D -40 D1 0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 -B4 CF 34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 -0A CC 5E C7 4C D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 -0A CC FA C4 CC CF 34 C4 CA 21 FA C4 2A C4 F0 CD -05 46 4F 52 54 48 84 12 66 D2 D0 D2 04 D6 0E D3 -70 D2 B6 D0 BE D1 3A D4 00 D3 D0 D4 EA D4 12 D1 -76 D5 00 00 0E D4 1A CE EE CF 00 00 32 D1 09 41 -53 53 45 4D 42 4C 45 52 84 12 66 D2 F2 DB 5A DC -A6 DB C4 DC 6C DB E8 DC 98 D8 00 00 62 DB 12 DC -C4 DB 02 DC A8 D9 00 00 00 00 F6 DC 9A D2 9E D2 -04 41 4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 -CC 21 9D 3F 7E CE 08 50 52 45 56 49 4F 55 53 00 -3A 40 0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 -04 4F 4E 4C 59 00 82 43 CC 21 30 4D 62 D1 0B 44 -45 46 49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 -30 4D 06 D1 07 43 4F 4D 50 41 52 45 0C 4E 38 4F -3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 -07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D -1E 43 30 4D FC CE 86 5B 54 48 45 4E 5D 00 30 4D -56 D3 86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 -36 C5 B0 C5 B6 C9 5E CC 44 C4 28 C7 D0 D3 8A C4 -8A C4 52 C9 06 5B 54 48 45 4E 5D 00 2C D3 32 C7 -9E D3 36 C9 40 C5 54 C4 32 C7 72 D3 2A C4 8A C4 -8A C4 52 C9 06 5B 45 4C 53 45 5D 00 2C D3 32 C7 -BE D3 36 C9 40 C5 54 C4 32 C7 70 D3 2A C4 52 C9 -04 5B 49 46 5D 00 2C D3 32 C7 72 D3 24 C7 70 D3 -36 C9 52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 6C CC -24 C7 72 D3 62 D3 84 5B 49 46 5D 00 0E 93 3E 4F -BC 27 30 4D E6 D3 89 5B 44 45 46 49 4E 45 44 5D -87 12 B0 C5 B6 C9 0E CA 6C C4 2A C4 F6 D3 8B 5B -55 4E 44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 -0E CA 6C C4 64 C5 2A C4 2A D4 3D 41 B2 4E 0E 18 -A2 4E 0C 18 3E 4F 44 3C FA D1 06 4D 41 52 4B 45 -52 00 B0 12 02 CF BA 40 84 12 FC FF BA 40 28 D4 -FE FF 9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 -C6 21 30 40 4C CF 76 D2 06 D3 1A D3 6E D4 3A 4E -82 4A C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A -08 49 29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 -1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D -E6 D2 09 50 57 52 5F 53 54 41 54 45 84 12 66 D4 -CC D2 08 DD 50 D1 09 52 53 54 5F 53 54 41 54 45 -92 42 0E 18 B0 D4 92 42 0C 18 B2 D4 EF 3F A2 D4 -08 50 57 52 5F 48 45 52 45 00 92 42 C8 21 B0 D4 -92 42 C6 21 B2 D4 30 4D B6 D4 08 52 53 54 5F 48 -45 52 45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 -EC 3F 32 D2 04 57 49 50 45 00 39 40 10 00 29 83 -B9 43 80 FF FC 23 B2 40 26 C8 24 C8 B2 40 80 D5 -7E D5 B2 40 CC D2 0E 18 B2 40 08 DD 0C 18 30 12 -C0 D4 B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 -A0 C7 9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 -BC C4 35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 -89 43 E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 -B4 21 30 41 04 D5 04 57 41 52 4D 00 30 40 80 D5 -3D 40 B4 D5 92 C3 30 01 1E 42 08 18 0E 93 11 24 -D2 B3 00 02 02 20 3E E3 1E 53 F2 D0 03 00 0A 02 -3E 90 0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 -87 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -CC CD 24 D3 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 D0 00 08 -04 02 B2 D3 06 02 B2 43 02 02 B2 40 00 01 24 02 -B2 40 FF FE 22 02 B2 D0 FF FE 26 02 B2 43 42 02 -B2 D3 46 02 B2 43 62 02 B2 D3 66 02 B2 40 00 A5 -60 01 B2 40 FF 1E 80 01 B2 40 B0 00 82 01 B2 40 -1E 00 84 01 39 40 10 00 82 43 88 01 92 D2 5E 01 -08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 39 40 -00 08 29 83 89 43 00 20 FC 23 39 40 1E 00 29 83 -B9 40 16 D6 E2 FF FB 23 B2 40 2C C8 EC FF B2 40 -81 00 00 05 92 42 02 18 06 05 92 42 04 18 08 05 -92 C3 00 05 92 D3 1A 05 3F 40 80 20 31 40 E0 20 -30 12 7C D5 3F 3F 38 40 C0 21 39 48 2A 48 09 5A -1A 52 C4 21 09 9A 03 24 7E 9A FC 27 1A 83 0E 4A -2A 88 82 4A C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 -0E CA 32 C7 FE D6 02 CB 28 C7 00 CE 20 D7 00 D7 -29 4E 39 90 86 12 02 20 2E 53 0A 3C 39 90 85 12 -03 20 1E 4E 02 00 04 3C 39 90 84 12 01 20 2E 52 -1B 17 30 41 3E 40 28 00 B0 12 E8 D6 19 42 C6 21 -A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 -C4 21 92 53 C4 21 B0 12 2A C4 B6 C9 02 CB 28 C7 -5E D7 54 D7 21 53 3E 90 10 00 83 2D E1 2B 60 D7 -B2 41 C4 21 DD 3F 87 12 B0 C5 C6 D6 6E D7 0C 43 -1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 -2D 20 92 53 C4 21 B0 12 E8 D6 0E 93 03 20 3C 40 -00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 -03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 -12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 -3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 21 A2 53 -C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 -07 20 3C 40 10 02 92 53 C4 21 B0 12 E8 D6 ED 3F -7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 B0 12 -3C D7 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 3C D7 -92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 0C 5E -DA 3F B0 12 3C D7 FA 23 3C 50 10 00 B0 12 24 D7 -EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 -C6 D6 44 D8 FE 90 26 00 00 00 3E 40 20 00 03 20 -3C 50 82 00 C8 3F B0 12 3C D7 E1 23 3C 50 80 00 -B0 12 24 D7 DC 3F 1C C8 04 52 45 54 49 00 87 12 -34 C4 00 13 0A CC 2A C4 34 C4 2C 00 66 D7 3C D8 -82 D8 2E 4E 0E DC 09 4B A4 3F 80 D0 03 4D 4F 56 -84 12 78 D8 00 40 8C D8 05 4D 4F 56 2E 42 84 12 -78 D8 40 40 00 00 03 41 44 44 84 12 78 D8 00 50 -A6 D8 05 41 44 44 2E 42 84 12 78 D8 40 50 B2 D8 -04 41 44 44 43 00 84 12 78 D8 00 60 C0 D8 06 41 -44 44 43 2E 42 00 84 12 78 D8 40 60 68 D8 04 53 -55 42 43 00 84 12 78 D8 00 70 DE D8 06 53 55 42 -43 2E 42 00 84 12 78 D8 40 70 EC D8 03 53 55 42 -84 12 78 D8 00 80 FC D8 05 53 55 42 2E 42 84 12 -78 D8 40 80 62 D0 03 43 4D 50 84 12 78 D8 00 90 -16 D9 05 43 4D 50 2E 42 84 12 78 D8 40 90 50 D0 -04 44 41 44 44 00 84 12 78 D8 00 A0 30 D9 06 44 -41 44 44 2E 42 00 84 12 78 D8 40 A0 22 D9 03 42 -49 54 84 12 78 D8 00 B0 4E D9 05 42 49 54 2E 42 -84 12 78 D8 40 B0 5A D9 03 42 49 43 84 12 78 D8 -00 C0 68 D9 05 42 49 43 2E 42 84 12 78 D8 40 C0 -74 D9 03 42 49 53 84 12 78 D8 00 D0 82 D9 05 42 -49 53 2E 42 84 12 78 D8 40 D0 00 00 03 58 4F 52 -84 12 78 D8 00 E0 9C D9 05 58 4F 52 2E 42 84 12 -78 D8 40 E0 CE D8 03 41 4E 44 84 12 78 D8 00 F0 -B6 D9 05 41 4E 44 2E 42 84 12 78 D8 40 F0 B0 C5 -66 D7 D4 D9 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 -0C DA 4F 3F 08 D9 03 52 52 43 84 12 CE D9 00 10 -E6 D9 05 52 52 43 2E 42 84 12 CE D9 40 10 F2 D9 -04 53 57 50 42 00 84 12 CE D9 80 10 00 DA 03 52 -52 41 84 12 CE D9 00 11 0E DA 05 52 52 41 2E 42 -84 12 CE D9 40 11 1A DA 03 53 58 54 84 12 CE D9 -80 11 00 00 04 50 55 53 48 00 84 12 CE D9 00 12 -34 DA 06 50 55 53 48 2E 42 00 84 12 CE D9 40 12 -8E D9 04 43 41 4C 4C 00 84 12 CE D9 80 12 1A 53 -0E 4A 87 12 E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 -62 6F 75 6E 64 73 7C CD B0 C5 C6 D6 7E DA 92 53 -C4 21 3E 40 2C 00 B0 12 2A C4 B6 C9 02 CB 28 C7 -00 CE 32 D8 96 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E -59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 -10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 -8F 3F 28 DA 04 52 52 43 4D 00 84 12 78 DA 50 00 -C4 DA 04 52 52 41 4D 00 84 12 78 DA 50 01 D2 DA -04 52 4C 41 4D 00 84 12 78 DA 50 02 E0 DA 04 52 -52 55 4D 00 84 12 78 DA 50 03 42 DA 05 50 55 53 -48 4D 84 12 78 DA 00 15 FC DA 04 50 4F 50 4D 00 -84 12 78 DA 00 17 85 12 00 3C EE DA 03 53 3E 3D -85 12 00 38 1C DB 02 53 3C 00 85 12 00 34 0A DB -03 30 3E 3D 85 12 00 30 30 DB 02 30 3C 00 85 12 -00 30 00 00 02 55 3C 00 85 12 00 2C 44 DB 03 55 -3E 3D 85 12 00 28 3A DB 03 30 3C 3E 85 12 00 24 -58 DB 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 -1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D -4E DB 04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F -09 48 29 53 0A 89 0A 11 3A 90 00 02 61 2F 88 DA -00 00 30 4D 3E D9 04 45 4C 53 45 00 1A 42 C6 21 -BA 40 00 3C 00 00 A2 53 C6 21 2F 83 8F 4A 00 00 -E3 3F 82 DB 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F -19 42 C6 21 2A 83 0A 89 0A 11 3A 90 00 FE 40 3B -3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 21 30 4D -C2 D9 05 41 47 41 49 4E 87 12 16 DB CA DB 2A C4 -00 00 05 57 48 49 4C 45 87 12 70 DB 78 C4 2A C4 -26 DB 06 52 45 50 45 41 54 00 87 12 16 DB CA DB -88 DB 2A C4 26 DC 3D 41 2E 4E 08 4E 3E 4F 2A 48 -0A 93 88 43 00 00 CA 23 98 42 C6 21 00 00 30 4D -52 DA 03 42 57 31 84 12 24 DC E0 21 42 DC 03 42 -57 32 84 12 24 DC E2 21 4E DC 03 42 57 33 84 12 -24 DC E4 21 66 DC 3D 41 1A 42 C6 21 2E 4E 28 4E -08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 C6 21 -8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 -64 DC E6 21 8A DC 03 46 57 32 84 12 64 DC E8 21 -96 DC 03 46 57 33 84 12 64 DC EA 21 3E 90 00 30 +1E C8 0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 +68 21 88 CC CC CB 05 44 45 46 45 52 B0 12 F4 CD +BA 40 30 40 FC FF BA 40 EA CD FE FF E3 3F 5A CB +06 43 52 45 41 54 45 00 B0 12 F4 CD BA 40 85 12 +FC FF 8A 4A FE FF D6 3F 66 CE 05 44 4F 45 53 3E +1A 42 BA 21 BA 40 84 12 00 00 8A 4D 02 00 3D 41 +30 4D 76 C9 05 3E 42 4F 44 59 2E 52 30 4D 80 CE +04 43 4F 44 45 00 B0 12 F4 CD A2 82 C6 21 87 12 +0E D1 E8 D0 2A C4 C0 CE 07 43 4F 44 45 4E 4E 4D +B0 12 C2 CD F2 3F 00 00 07 45 4E 44 43 4F 44 45 +87 12 1C D1 36 CE 2A C4 68 CC 03 41 53 4D B2 40 +EC D0 DA 21 E0 3F E8 CE 06 45 4E 44 41 53 4D 00 +87 12 F0 CE 30 D1 2A C4 00 00 05 43 4F 4C 4F 4E +1A 42 C6 21 BA 40 87 12 00 00 A2 53 C6 21 B2 43 +BE 21 30 40 1C D1 00 00 05 4C 4F 32 48 49 1A 42 +C6 21 BA 40 B0 12 00 00 BA 40 2A C4 02 00 A2 52 +C6 21 ED 3F 56 CD 85 48 49 32 4C 4F 87 12 DC CA +86 CF EC CA 1C CD 0E D1 E8 D0 2A C4 56 CF 82 49 +46 00 2F 83 8F 4E 00 00 1E 42 C6 21 A2 52 C6 21 +BE 40 40 C6 00 00 2E 53 30 4D 9A CE 84 45 4C 53 +45 00 A2 52 C6 21 1A 42 C6 21 BA 40 3C C6 FC FF +8E 4A 00 00 2A 83 0E 4A 30 4D 4E C9 84 54 48 45 +4E 00 9E 42 C6 21 00 00 3E 4F 30 4D D8 CE 85 42 +45 47 49 4E 30 40 DC CA AC CF 85 55 4E 54 49 4C +39 40 40 C6 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF +8A 4E FE FF 3E 4F 30 4D FA CE 85 41 47 41 49 4E +39 40 3C C6 EF 3F 7A C8 85 57 48 49 4C 45 87 12 +72 CF 76 C4 2A C4 34 C8 86 52 45 50 45 41 54 00 +87 12 F0 CF B2 CF 2A C4 8C CF 82 44 4F 00 2F 83 +8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 BE 40 54 C6 +FE FF A2 53 00 20 1A 42 00 20 8A 43 00 00 30 4D +1E CB 84 4C 4F 4F 50 00 39 40 76 C6 A2 52 C6 21 +1A 42 C6 21 8A 49 FC FF 8A 4E FE FF 1E 42 00 20 +A2 83 00 20 2E 4E 0E 93 03 24 8E 4A 00 00 F6 3F +3E 4F 30 4D 90 C6 85 2B 4C 4F 4F 50 39 40 64 C6 +E5 3F 42 D0 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F +3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 +18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 +E8 49 00 00 1A 83 FA 23 30 4D 14 C8 CA 21 F2 C4 +2A C4 84 12 BA D0 EA CF 82 D3 1A D0 FA CC 6E CF +76 D0 96 D4 64 C8 A2 D1 BC D1 CA CF 3C D2 00 00 +68 D4 24 CD B4 CE 00 00 84 12 BA D0 B4 D9 16 DA +68 D9 8A DA 2E D9 00 00 5E D6 00 00 24 D9 D4 D9 +86 D9 C4 D9 6E D7 00 00 00 00 66 DA E6 D0 3A 40 +0C 00 39 40 CA 21 38 40 CC 21 C6 3F 3A 40 0E 00 +39 40 CC 21 38 40 CA 21 B9 3F 82 43 CC 21 30 4D +92 42 CA 21 DA 21 30 4D C2 D0 2A D1 30 D1 40 D1 +3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 3D 40 10 00 +09 4A 08 49 29 83 18 48 FE FF 0E 98 FC 2B 89 48 +00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 +30 4D 6E CD 09 50 57 52 5F 53 54 41 54 45 84 12 +38 D1 0C D1 9C DA 08 D0 09 52 53 54 5F 53 54 41 +54 45 92 42 0E 18 82 D1 92 42 0C 18 84 D1 EF 3F +74 D1 08 50 57 52 5F 48 45 52 45 00 92 42 C8 21 +82 D1 92 42 C6 21 84 D1 30 4D 88 D1 08 52 53 54 +5F 48 45 52 45 00 92 42 C8 21 0E 18 92 42 C6 21 +0C 18 EC 3F F8 CF 04 57 49 50 45 00 39 40 10 00 +29 83 B9 43 80 FF FC 23 B2 40 E0 C6 DE C6 B2 40 +46 D2 44 D2 B2 40 0C D1 0E 18 B2 40 9C DA 0C 18 +30 12 92 D1 B2 40 86 C7 84 C7 B2 40 08 C8 06 C8 +B2 40 98 C6 96 C6 B2 40 18 00 0A 18 37 40 1A C4 +36 40 92 C4 35 40 0E C4 34 40 00 C4 B2 40 0A 00 +DC 21 B2 40 20 00 B4 21 30 41 D6 D1 04 57 41 52 +4D 00 30 40 46 D2 3D 40 7A D2 92 C3 30 01 1E 42 +08 18 0E 93 11 24 D2 B3 00 02 02 20 3E E3 1E 53 +F2 D0 03 00 0A 02 3E 90 0A 00 B8 27 3E 90 16 00 +B5 2F 2E 93 84 27 8D 2F 30 4D 1E C8 06 0D 1B 5B +37 6D 23 00 D6 C7 34 C6 1E C8 19 46 61 73 74 46 +6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 68 6F 6F 72 +65 6E 73 20 D6 C7 14 C8 30 FF DC CA B8 C4 24 C6 +1E C8 0A 62 79 74 65 73 20 66 72 65 65 00 3C C6 +D6 CC BE CF 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 +B2 40 04 A5 20 01 7A D2 B2 40 88 5A CC 01 B2 D0 +00 08 04 02 B2 D3 06 02 B2 43 02 02 B2 D0 FF FE +26 02 B2 43 22 02 B2 43 42 02 B2 D3 46 02 B2 43 +62 02 B2 D3 66 02 B2 40 00 A5 60 01 B2 40 FF 1E +80 01 B2 40 B0 00 82 01 B2 40 1E 00 84 01 39 40 +10 00 82 43 88 01 92 D2 5E 01 08 18 38 40 59 14 +18 83 FE 23 19 83 FA 23 39 40 00 08 29 83 89 43 +00 20 FC 23 39 40 1E 00 29 83 B9 40 D8 D2 E2 FF +FB 23 B2 40 26 C7 EC FF B2 40 81 00 00 05 92 42 +02 18 06 05 92 42 04 18 08 05 92 C3 00 05 92 D3 +1A 05 3F 40 80 20 31 40 E0 20 30 12 42 D2 4B 3F +C4 D2 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F +39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 +19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 +30 4D EE CD 86 5B 54 48 45 4E 5D 00 30 4D B4 D3 +86 5B 45 4C 53 45 5D 00 87 12 14 C8 00 00 C6 C4 +7E CB 80 C8 60 CB 34 C4 40 C6 2A D4 44 C4 1E C8 +06 5B 54 48 45 4E 5D 00 8A D3 4A C6 FA D3 F8 C7 +D0 C4 58 C4 4A C6 D0 D3 2A C4 44 C4 1E C8 06 5B +45 4C 53 45 5D 00 8A D3 4A C6 18 D4 F8 C7 D0 C4 +58 C4 4A C6 CE D3 2A C4 1E C8 04 5B 49 46 5D 00 +8A D3 4A C6 D0 D3 3C C6 CE D3 F8 C7 1E C8 05 0D +0A 6B 6F 20 D6 C7 8C C7 6E CB 3C C6 D0 D3 C0 D3 +84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D 40 D4 +89 5B 44 45 46 49 4E 45 44 5D 87 12 7E CB 80 C8 +EE C8 6A C4 2A C4 50 D4 8B 5B 55 4E 44 45 46 49 +4E 45 44 5D 87 12 7E CB 80 C8 EE C8 6A C4 00 C5 +2A C4 84 D4 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F +30 40 92 D1 84 D0 06 4D 41 52 4B 45 52 00 B0 12 +F4 CD BA 40 84 12 FC FF BA 40 82 D4 FE FF 9A 42 +C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 30 40 +3C CE 1C 15 B0 12 2A C4 80 C8 EE C8 4A C6 D8 D4 +E2 C9 40 C6 0A CD F2 D4 DA D4 39 4E 39 80 86 12 +08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 01 24 +2E 82 1B 17 30 41 3E 40 28 00 B0 12 C2 D4 19 42 +C6 21 A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 +12 12 C4 21 92 53 C4 21 B0 12 2A C4 80 C8 E2 C9 +40 C6 30 D5 26 D5 21 53 3E 90 10 00 7D 2D E1 2B +32 D5 B2 41 C4 21 DD 3F 87 12 7E CB 74 C8 40 D5 +0C 43 1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 +23 00 27 20 92 53 C4 21 B0 12 C2 D4 3C 40 00 03 +0E 93 1C 24 3C 40 10 03 1E 93 18 24 3C 40 20 03 +2E 93 14 24 3C 40 20 02 2E 92 10 24 3C 40 30 02 +3E 92 0C 24 3C 40 30 03 3E 93 08 24 3C 40 30 00 +19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 4F 3D 41 +30 4D 7A 90 26 00 07 20 3C 40 10 02 92 53 C4 21 +B0 12 C2 D4 ED 3F 7A 90 40 00 16 20 3C 40 20 00 +92 53 C4 21 B0 12 0E D5 0C 20 3C 50 10 00 3E 40 +2B 00 B0 12 0E D5 92 92 C0 21 C4 21 02 24 92 53 +C4 21 8E 10 0C 5E DA 3F B0 12 0E D5 FA 23 3C 50 +10 00 B0 12 F6 D4 EF 3F 0C 43 1B 42 C6 21 A2 53 +C6 21 87 12 7E CB 74 C8 0A D6 FE 90 26 00 00 00 +3E 40 20 00 03 20 3C 50 82 00 C8 3F B0 12 0E D5 +E1 23 3C 50 80 00 B0 12 F6 D4 DC 3F D6 C6 04 52 +45 54 49 00 87 12 14 C8 00 13 EC CA 2A C4 14 C8 +2C 00 38 D5 02 D6 48 D6 09 4B 2E 4E 0E DC A4 3F +38 CF 03 4D 4F 56 84 12 3E D6 00 40 52 D6 05 4D +4F 56 2E 42 84 12 3E D6 40 40 00 00 03 41 44 44 +84 12 3E D6 00 50 6C D6 05 41 44 44 2E 42 84 12 +3E D6 40 50 78 D6 04 41 44 44 43 00 84 12 3E D6 +00 60 86 D6 06 41 44 44 43 2E 42 00 84 12 3E D6 +40 60 2E D6 04 53 55 42 43 00 84 12 3E D6 00 70 +A4 D6 06 53 55 42 43 2E 42 00 84 12 3E D6 40 70 +B2 D6 03 53 55 42 84 12 3E D6 00 80 C2 D6 05 53 +55 42 2E 42 84 12 3E D6 40 80 1A CF 03 43 4D 50 +84 12 3E D6 00 90 DC D6 05 43 4D 50 2E 42 84 12 +3E D6 40 90 08 CF 04 44 41 44 44 00 84 12 3E D6 +00 A0 F6 D6 06 44 41 44 44 2E 42 00 84 12 3E D6 +40 A0 E8 D6 03 42 49 54 84 12 3E D6 00 B0 14 D7 +05 42 49 54 2E 42 84 12 3E D6 40 B0 20 D7 03 42 +49 43 84 12 3E D6 00 C0 2E D7 05 42 49 43 2E 42 +84 12 3E D6 40 C0 3A D7 03 42 49 53 84 12 3E D6 +00 D0 48 D7 05 42 49 53 2E 42 84 12 3E D6 40 D0 +00 00 03 58 4F 52 84 12 3E D6 00 E0 62 D7 05 58 +4F 52 2E 42 84 12 3E D6 40 E0 94 D6 03 41 4E 44 +84 12 3E D6 00 F0 7C D7 05 41 4E 44 2E 42 84 12 +3E D6 40 F0 7E CB 38 D5 9A D7 0A 4C 3C F0 70 00 +8A 10 3A F0 0F 00 0C DA 4F 3F CE D6 03 52 52 43 +84 12 94 D7 00 10 AC D7 05 52 52 43 2E 42 84 12 +94 D7 40 10 B8 D7 04 53 57 50 42 00 84 12 94 D7 +80 10 C6 D7 03 52 52 41 84 12 94 D7 00 11 D4 D7 +05 52 52 41 2E 42 84 12 94 D7 40 11 E0 D7 03 53 +58 54 84 12 94 D7 80 11 00 00 04 50 55 53 48 00 +84 12 94 D7 00 12 FA D7 06 50 55 53 48 2E 42 00 +84 12 94 D7 40 12 54 D7 04 43 41 4C 4C 00 84 12 +94 D7 80 12 1A 53 0E 4A 87 12 34 C6 1E C8 0D 6F +75 74 20 6F 66 20 62 6F 75 6E 64 73 88 CC 7E CB +74 C8 44 D8 92 53 C4 21 3E 40 2C 00 B0 12 2A C4 +80 C8 E2 C9 40 C6 0A CD F8 D5 5C D8 0A 4E 3E 4F +1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 +0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 +D1 2F 8A 10 5A 06 8F 3F EE D7 04 52 52 43 4D 00 +84 12 3E D8 50 00 8A D8 04 52 52 41 4D 00 84 12 +3E D8 50 01 98 D8 04 52 4C 41 4D 00 84 12 3E D8 +50 02 A6 D8 04 52 52 55 4D 00 84 12 3E D8 50 03 +08 D8 05 50 55 53 48 4D 84 12 3E D8 00 15 C2 D8 +04 50 4F 50 4D 00 84 12 3E D8 00 17 B4 D8 03 53 +3E 3D 85 12 00 38 DE D8 02 53 3C 00 85 12 00 34 +D0 D8 03 30 3E 3D 85 12 00 30 F2 D8 02 30 3C 00 +85 12 00 30 00 00 02 55 3C 00 85 12 00 2C 06 D9 +03 55 3E 3D 85 12 00 28 FC D8 03 30 3C 3E 85 12 +00 24 1A D9 02 30 3D 00 85 12 00 20 00 00 02 49 +46 00 1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A +30 4D 10 D9 04 54 48 45 4E 00 1A 42 C6 21 08 4E +3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 63 2F +88 DA 00 00 30 4D 04 D7 04 45 4C 53 45 00 1A 42 +C6 21 BA 40 00 3C 00 00 A2 53 C6 21 2F 83 8F 4A +00 00 E3 3F 44 D9 05 55 4E 54 49 4C 3A 4F 08 4E +3E 4F 19 42 C6 21 2A 83 0A 89 0A 11 3A 90 00 FE +42 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 21 +30 4D 88 D7 05 41 47 41 49 4E 0A 4E 38 40 00 3C +E7 3F 00 00 05 57 48 49 4C 45 87 12 32 D9 76 C4 +2A C4 E8 D8 06 52 45 50 45 41 54 00 87 12 BA D9 +4A D9 2A C4 E6 D9 3D 41 08 4E 3E 4F 2A 48 B2 92 +C4 21 CD 2F 98 42 C6 21 00 00 30 4D 18 D8 03 42 +57 31 84 12 E4 D9 00 00 FE D9 03 42 57 32 84 12 +E4 D9 00 00 0A DA 03 42 57 33 84 12 E4 D9 00 00 +22 DA 3D 41 1A 42 C6 21 28 4E B2 92 C4 21 90 2B +BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F 30 4D +00 00 03 46 57 31 84 12 20 DA 00 00 42 DA 03 46 +57 32 84 12 20 DA 00 00 4E DA 03 46 57 33 84 12 +20 DA 00 00 00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 -30 4D A2 DC 04 47 4F 54 4F 00 87 12 16 DB F2 CD -00 CC 2A C4 00 00 05 3F 47 4F 54 4F 87 12 AC DC -F2 CD 00 CC 2A C4 00 00 03 4A 4D 50 87 12 F2 CD -F8 DB 2A C4 D6 DC 04 3F 4A 4D 50 00 87 12 AC DC -F2 CD 78 C4 CA DB 2A C4 +87 12 FC CC 16 CB 2A C4 5A DA 04 47 4F 54 4F 00 +2F 83 8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -16 D6 +D8 D2 q diff --git a/binaries/MSP_EXP430FR4133_4MHz.txt b/binaries/MSP_EXP430FR4133_4MHz.txt deleted file mode 100644 index e1fea1f..0000000 --- a/binaries/MSP_EXP430FR4133_4MHz.txt +++ /dev/null @@ -1,408 +0,0 @@ -@1800 -10 00 02 00 21 BB A0 0F 05 00 18 00 08 DD CC D2 -2C 01 7B B0 FC C7 0E C8 -@C400 -2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 -8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 F2 C2 03 02 30 41 B2 40 -13 00 0E 05 F2 D2 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 0A CC 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 0A CC 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 -60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 -18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 -F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E -CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 -0C 4E 65 4C 74 40 80 00 3B 40 CA 21 3E 4B 0E 93 -1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E -FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 -0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 -09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D 0E C9 03 55 -4D 2A 2C 4F 0B 43 09 43 08 43 1A 43 0E BA 02 24 -09 5C 08 6B 0C 5C 0B 6B 0A 5A F8 2B 8F 49 00 00 -0E 48 30 4D A2 C5 07 3E 4E 55 4D 42 45 52 2C 4F -0B 4E 1A 42 DC 21 68 4C 78 80 30 00 78 90 0A 00 -05 28 78 80 07 00 78 90 0A 00 1F 28 08 9A 22 C3 -1C 2C 5D 15 1C 4F 02 00 0E 4A 3D 40 D0 CA D2 3F -D2 CA 81 49 02 00 1C 4F 04 00 1E 41 04 00 3D 40 -E4 CA C8 3F E6 CA 39 51 3E 61 8F 49 04 00 8F 4E -02 00 3A 17 1C 53 1B 83 D6 23 8F 4C 00 00 0E 4B -30 4D 1B 42 DC 21 0C 43 2D 15 3D 40 4E CB 0A 4B -3F 82 8F 4E 06 00 8F 43 04 00 8F 43 02 00 0C 4E -7B 4C 68 4C 78 90 2D 00 04 28 BE 23 B1 43 02 00 -E1 3F 2A 43 78 80 25 00 07 24 3A 52 68 53 04 24 -3A 40 10 00 58 83 AF 23 1C 53 1B 83 EA 3F 50 CB -31 24 2D 83 78 90 28 00 CD 27 32 B0 00 02 2A 20 -32 D0 00 02 78 90 F7 00 C5 27 78 90 F5 00 22 20 -09 43 8F 49 02 00 5B 83 09 4B 09 5C 69 49 79 80 -30 00 79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 -0A 28 09 9A 08 2C 8F 49 00 00 0E 4A 2C 15 B0 12 -E8 C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 -0E 4B 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 -00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 -04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 -BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 -01 20 2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 -0A 4E 3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 -C6 21 8A 4E 00 00 3E 4F 30 4D 08 CC 87 4C 49 54 -45 52 41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 -C6 21 BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 -00 02 32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 -0E 49 EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 -1E 53 8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 -B2 4F C2 21 3E 4F 82 43 C4 21 30 4D 87 12 6C CC -B0 C5 B6 C9 86 CC 3D 40 8E CC C1 22 3C 3E 90 CC -0A 4E 3E 4F 3D 40 A6 CC 34 27 3D 40 80 CC 1A E2 -BE 21 B3 27 AD 23 A8 CC 3E 4F 3D 40 80 CC BA 23 -DE 53 00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 -72 CF CD 3F F8 CB 08 45 56 41 4C 55 41 54 45 00 -39 40 C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 -7C CC E4 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 -3D 41 30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 -31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 -2A C4 42 C9 92 C8 DC C8 7C CC DE C4 70 C5 52 C9 -0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 70 CD -34 C4 30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 -66 75 6C 6C 21 00 70 CD 24 C7 12 CD C0 C7 05 41 -42 4F 52 54 3F 40 80 20 D1 3F 4E CD 86 41 42 4F -52 54 22 00 87 12 6C C9 34 C4 70 CD 0A CC 2A C4 -8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 32 D5 -B0 12 FC C7 92 C3 1C 05 38 40 A8 2A 39 42 09 59 -03 43 19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 -87 12 AC D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B -5B 37 6D 00 14 C9 54 C4 28 C7 CC CD 42 C9 52 C9 -05 6C 69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 -04 1B 5B 30 6D 00 14 C9 54 CD 00 00 83 5B 27 5D -87 12 F2 CD 34 C4 34 C4 0A CC 0A CC 2A C4 08 CA -01 27 87 12 B0 C5 B6 C9 0E CA 28 C7 00 CE 2A C4 -B0 CC CE C5 81 5C 92 42 C0 21 C4 21 30 4D DC CD -81 5B 82 43 BE 21 30 4D 04 CE 01 5D B2 43 BE 21 -30 4D BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 -87 12 C8 C5 F2 C4 28 C7 44 CE E0 CD 34 C4 22 CE -0A CC 2A C4 F2 CD 22 CE 2A C4 2C CE 09 49 4D 4D -45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 -30 4D 68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 -99 42 BA 21 00 00 A2 53 C6 21 30 4D F6 CC 88 50 -4F 53 54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA -54 C4 28 C7 00 CE 70 C5 28 C7 A8 CE 34 C4 34 C4 -0A CC 0A CC 34 C4 0A CC 0A CC 2A C4 10 CE 81 3B -82 93 BE 21 A8 27 87 12 34 C4 2A C4 0A CC 46 CF -12 CE 2A C4 AE CE 07 3A 4E 4F 4E 41 4D 45 2F 83 -8F 4E 00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 -02 02 B0 12 32 CF BA 40 87 12 FC FF A2 83 C6 21 -B2 43 BE 21 82 4F BC 21 30 4D C6 CE 01 3A 30 12 -E6 CE 87 12 92 C9 B0 C5 B6 C9 0C CF 3D 41 08 4E -7A 4E 5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 -1E 00 09 5E 3E 4F BA 40 30 40 00 00 BA 40 F8 CE -02 00 82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 -82 4A C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 -19 42 B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 -52 C9 0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 -68 21 7C CD B0 C9 08 56 41 52 49 41 42 4C 45 00 -B0 12 02 CF BA 40 86 12 FC FF E4 3F 58 CC 08 43 -4F 4E 53 54 41 4E 54 00 B0 12 02 CF BA 40 85 12 -FC FF 8A 4E FE FF 3E 4F D5 3F 8E CF 06 43 52 45 -41 54 45 00 B0 12 02 CF BA 40 85 12 FC FF 8A 4A -FE FF C8 3F C6 CC 05 44 4F 45 53 3E 1A 42 BA 21 -BA 40 84 12 00 00 8A 4D 02 00 3D 41 30 4D C6 CF -05 44 45 46 45 52 30 12 54 CF 8B 3F 96 CA 05 3E -42 4F 44 59 2E 52 30 4D AC CF 04 43 4F 44 45 00 -B0 12 02 CF 2A 82 82 4A C6 21 87 12 F4 CE D6 D2 -A8 D2 2A C4 FA CF 07 43 4F 44 45 4E 4E 4D 87 12 -CE CE 12 CE 04 D0 2A C4 00 00 07 45 4E 44 43 4F -44 45 87 12 F0 D2 46 CF 2A C4 5C CD 03 41 53 4D -92 42 DA 21 EC 21 B2 40 AC D2 DA 21 D9 3F 2A D0 -06 45 4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F -00 00 05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 -00 00 A2 53 C6 21 B2 43 BE 21 30 40 F0 D2 00 00 -05 4C 4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 -BA 40 2A C4 02 00 A2 52 C6 21 ED 3F 4C CE 85 48 -49 32 4C 4F 87 12 F2 C6 CE D0 0A CC 12 CE D6 D2 -A8 D2 2A C4 9E D0 82 49 46 00 2F 83 8F 4E 00 00 -1E 42 C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 -30 4D E0 CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 -C6 21 BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A -30 4D 6E CA 84 54 48 45 4E 00 9E 42 C6 21 00 00 -3E 4F 30 4D 16 D0 85 42 45 47 49 4E 30 40 F2 C6 -F4 D0 85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 -1A 42 C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D -3C D0 85 41 47 41 49 4E 39 40 24 C7 EF 3F 76 CF -85 57 48 49 4C 45 87 12 BA D0 78 C4 2A C4 64 CE -86 52 45 50 45 41 54 00 87 12 38 D1 FA D0 2A C4 -D4 D0 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 -1E 42 C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 -00 20 8A 43 00 00 30 4D 1C CC 84 4C 4F 4F 50 00 -39 40 5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF -8A 4E FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 -03 24 8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B -4C 4F 4F 50 39 40 4C C7 E5 3F 8A D1 85 4C 45 41 -56 45 1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 -02 00 B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 -00 20 89 4A 00 00 30 4D CC D1 04 4D 4F 56 45 00 -0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 -06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A -09 5A 19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D -40 D1 0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 -B4 CF 34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 -0A CC 5E C7 4C D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 -0A CC FA C4 CC CF 34 C4 CA 21 FA C4 2A C4 F0 CD -05 46 4F 52 54 48 84 12 66 D2 D0 D2 04 D6 0E D3 -70 D2 B6 D0 BE D1 3A D4 00 D3 D0 D4 EA D4 12 D1 -76 D5 00 00 0E D4 1A CE EE CF 00 00 32 D1 09 41 -53 53 45 4D 42 4C 45 52 84 12 66 D2 F2 DB 5A DC -A6 DB C4 DC 6C DB E8 DC 98 D8 00 00 62 DB 12 DC -C4 DB 02 DC A8 D9 00 00 00 00 F6 DC 9A D2 9E D2 -04 41 4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 -CC 21 9D 3F 7E CE 08 50 52 45 56 49 4F 55 53 00 -3A 40 0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 -04 4F 4E 4C 59 00 82 43 CC 21 30 4D 62 D1 0B 44 -45 46 49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 -30 4D 06 D1 07 43 4F 4D 50 41 52 45 0C 4E 38 4F -3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 -07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D -1E 43 30 4D FC CE 86 5B 54 48 45 4E 5D 00 30 4D -56 D3 86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 -36 C5 B0 C5 B6 C9 5E CC 44 C4 28 C7 D0 D3 8A C4 -8A C4 52 C9 06 5B 54 48 45 4E 5D 00 2C D3 32 C7 -9E D3 36 C9 40 C5 54 C4 32 C7 72 D3 2A C4 8A C4 -8A C4 52 C9 06 5B 45 4C 53 45 5D 00 2C D3 32 C7 -BE D3 36 C9 40 C5 54 C4 32 C7 70 D3 2A C4 52 C9 -04 5B 49 46 5D 00 2C D3 32 C7 72 D3 24 C7 70 D3 -36 C9 52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 6C CC -24 C7 72 D3 62 D3 84 5B 49 46 5D 00 0E 93 3E 4F -BC 27 30 4D E6 D3 89 5B 44 45 46 49 4E 45 44 5D -87 12 B0 C5 B6 C9 0E CA 6C C4 2A C4 F6 D3 8B 5B -55 4E 44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 -0E CA 6C C4 64 C5 2A C4 2A D4 3D 41 B2 4E 0E 18 -A2 4E 0C 18 3E 4F 44 3C FA D1 06 4D 41 52 4B 45 -52 00 B0 12 02 CF BA 40 84 12 FC FF BA 40 28 D4 -FE FF 9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 -C6 21 30 40 4C CF 76 D2 06 D3 1A D3 6E D4 3A 4E -82 4A C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A -08 49 29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 -1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D -E6 D2 09 50 57 52 5F 53 54 41 54 45 84 12 66 D4 -CC D2 08 DD 50 D1 09 52 53 54 5F 53 54 41 54 45 -92 42 0E 18 B0 D4 92 42 0C 18 B2 D4 EF 3F A2 D4 -08 50 57 52 5F 48 45 52 45 00 92 42 C8 21 B0 D4 -92 42 C6 21 B2 D4 30 4D B6 D4 08 52 53 54 5F 48 -45 52 45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 -EC 3F 32 D2 04 57 49 50 45 00 39 40 10 00 29 83 -B9 43 80 FF FC 23 B2 40 26 C8 24 C8 B2 40 80 D5 -7E D5 B2 40 CC D2 0E 18 B2 40 08 DD 0C 18 30 12 -C0 D4 B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 -A0 C7 9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 -BC C4 35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 -89 43 E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 -B4 21 30 41 04 D5 04 57 41 52 4D 00 30 40 80 D5 -3D 40 B4 D5 92 C3 30 01 1E 42 08 18 0E 93 11 24 -D2 B3 00 02 02 20 3E E3 1E 53 F2 D0 03 00 0A 02 -3E 90 0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 -87 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -CC CD 24 D3 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 D0 00 08 -04 02 B2 D3 06 02 B2 43 02 02 B2 40 00 01 24 02 -B2 40 FF FE 22 02 B2 D0 FF FE 26 02 B2 43 42 02 -B2 D3 46 02 B2 43 62 02 B2 D3 66 02 B2 40 00 A5 -60 01 B2 40 FF 1E 80 01 B2 40 B4 00 82 01 B2 40 -79 00 84 01 39 40 40 00 82 43 88 01 92 D2 5E 01 -08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 39 40 -00 08 29 83 89 43 00 20 FC 23 39 40 1E 00 29 83 -B9 40 16 D6 E2 FF FB 23 B2 40 2C C8 EC FF B2 40 -81 00 00 05 92 42 02 18 06 05 92 42 04 18 08 05 -92 C3 00 05 92 D3 1A 05 3F 40 80 20 31 40 E0 20 -30 12 7C D5 3F 3F 38 40 C0 21 39 48 2A 48 09 5A -1A 52 C4 21 09 9A 03 24 7E 9A FC 27 1A 83 0E 4A -2A 88 82 4A C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 -0E CA 32 C7 FE D6 02 CB 28 C7 00 CE 20 D7 00 D7 -29 4E 39 90 86 12 02 20 2E 53 0A 3C 39 90 85 12 -03 20 1E 4E 02 00 04 3C 39 90 84 12 01 20 2E 52 -1B 17 30 41 3E 40 28 00 B0 12 E8 D6 19 42 C6 21 -A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 -C4 21 92 53 C4 21 B0 12 2A C4 B6 C9 02 CB 28 C7 -5E D7 54 D7 21 53 3E 90 10 00 83 2D E1 2B 60 D7 -B2 41 C4 21 DD 3F 87 12 B0 C5 C6 D6 6E D7 0C 43 -1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 -2D 20 92 53 C4 21 B0 12 E8 D6 0E 93 03 20 3C 40 -00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 -03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 -12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 -3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 21 A2 53 -C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 -07 20 3C 40 10 02 92 53 C4 21 B0 12 E8 D6 ED 3F -7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 B0 12 -3C D7 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 3C D7 -92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 0C 5E -DA 3F B0 12 3C D7 FA 23 3C 50 10 00 B0 12 24 D7 -EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 -C6 D6 44 D8 FE 90 26 00 00 00 3E 40 20 00 03 20 -3C 50 82 00 C8 3F B0 12 3C D7 E1 23 3C 50 80 00 -B0 12 24 D7 DC 3F 1C C8 04 52 45 54 49 00 87 12 -34 C4 00 13 0A CC 2A C4 34 C4 2C 00 66 D7 3C D8 -82 D8 2E 4E 0E DC 09 4B A4 3F 80 D0 03 4D 4F 56 -84 12 78 D8 00 40 8C D8 05 4D 4F 56 2E 42 84 12 -78 D8 40 40 00 00 03 41 44 44 84 12 78 D8 00 50 -A6 D8 05 41 44 44 2E 42 84 12 78 D8 40 50 B2 D8 -04 41 44 44 43 00 84 12 78 D8 00 60 C0 D8 06 41 -44 44 43 2E 42 00 84 12 78 D8 40 60 68 D8 04 53 -55 42 43 00 84 12 78 D8 00 70 DE D8 06 53 55 42 -43 2E 42 00 84 12 78 D8 40 70 EC D8 03 53 55 42 -84 12 78 D8 00 80 FC D8 05 53 55 42 2E 42 84 12 -78 D8 40 80 62 D0 03 43 4D 50 84 12 78 D8 00 90 -16 D9 05 43 4D 50 2E 42 84 12 78 D8 40 90 50 D0 -04 44 41 44 44 00 84 12 78 D8 00 A0 30 D9 06 44 -41 44 44 2E 42 00 84 12 78 D8 40 A0 22 D9 03 42 -49 54 84 12 78 D8 00 B0 4E D9 05 42 49 54 2E 42 -84 12 78 D8 40 B0 5A D9 03 42 49 43 84 12 78 D8 -00 C0 68 D9 05 42 49 43 2E 42 84 12 78 D8 40 C0 -74 D9 03 42 49 53 84 12 78 D8 00 D0 82 D9 05 42 -49 53 2E 42 84 12 78 D8 40 D0 00 00 03 58 4F 52 -84 12 78 D8 00 E0 9C D9 05 58 4F 52 2E 42 84 12 -78 D8 40 E0 CE D8 03 41 4E 44 84 12 78 D8 00 F0 -B6 D9 05 41 4E 44 2E 42 84 12 78 D8 40 F0 B0 C5 -66 D7 D4 D9 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 -0C DA 4F 3F 08 D9 03 52 52 43 84 12 CE D9 00 10 -E6 D9 05 52 52 43 2E 42 84 12 CE D9 40 10 F2 D9 -04 53 57 50 42 00 84 12 CE D9 80 10 00 DA 03 52 -52 41 84 12 CE D9 00 11 0E DA 05 52 52 41 2E 42 -84 12 CE D9 40 11 1A DA 03 53 58 54 84 12 CE D9 -80 11 00 00 04 50 55 53 48 00 84 12 CE D9 00 12 -34 DA 06 50 55 53 48 2E 42 00 84 12 CE D9 40 12 -8E D9 04 43 41 4C 4C 00 84 12 CE D9 80 12 1A 53 -0E 4A 87 12 E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 -62 6F 75 6E 64 73 7C CD B0 C5 C6 D6 7E DA 92 53 -C4 21 3E 40 2C 00 B0 12 2A C4 B6 C9 02 CB 28 C7 -00 CE 32 D8 96 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E -59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 -10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 -8F 3F 28 DA 04 52 52 43 4D 00 84 12 78 DA 50 00 -C4 DA 04 52 52 41 4D 00 84 12 78 DA 50 01 D2 DA -04 52 4C 41 4D 00 84 12 78 DA 50 02 E0 DA 04 52 -52 55 4D 00 84 12 78 DA 50 03 42 DA 05 50 55 53 -48 4D 84 12 78 DA 00 15 FC DA 04 50 4F 50 4D 00 -84 12 78 DA 00 17 85 12 00 3C EE DA 03 53 3E 3D -85 12 00 38 1C DB 02 53 3C 00 85 12 00 34 0A DB -03 30 3E 3D 85 12 00 30 30 DB 02 30 3C 00 85 12 -00 30 00 00 02 55 3C 00 85 12 00 2C 44 DB 03 55 -3E 3D 85 12 00 28 3A DB 03 30 3C 3E 85 12 00 24 -58 DB 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 -1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D -4E DB 04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F -09 48 29 53 0A 89 0A 11 3A 90 00 02 61 2F 88 DA -00 00 30 4D 3E D9 04 45 4C 53 45 00 1A 42 C6 21 -BA 40 00 3C 00 00 A2 53 C6 21 2F 83 8F 4A 00 00 -E3 3F 82 DB 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F -19 42 C6 21 2A 83 0A 89 0A 11 3A 90 00 FE 40 3B -3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 21 30 4D -C2 D9 05 41 47 41 49 4E 87 12 16 DB CA DB 2A C4 -00 00 05 57 48 49 4C 45 87 12 70 DB 78 C4 2A C4 -26 DB 06 52 45 50 45 41 54 00 87 12 16 DB CA DB -88 DB 2A C4 26 DC 3D 41 2E 4E 08 4E 3E 4F 2A 48 -0A 93 88 43 00 00 CA 23 98 42 C6 21 00 00 30 4D -52 DA 03 42 57 31 84 12 24 DC E0 21 42 DC 03 42 -57 32 84 12 24 DC E2 21 4E DC 03 42 57 33 84 12 -24 DC E4 21 66 DC 3D 41 1A 42 C6 21 2E 4E 28 4E -08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 C6 21 -8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 -64 DC E6 21 8A DC 03 46 57 32 84 12 64 DC E8 21 -96 DC 03 46 57 33 84 12 64 DC EA 21 3E 90 00 30 -07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 -30 4D A2 DC 04 47 4F 54 4F 00 87 12 16 DB F2 CD -00 CC 2A C4 00 00 05 3F 47 4F 54 4F 87 12 AC DC -F2 CD 00 CC 2A C4 00 00 03 4A 4D 50 87 12 F2 CD -F8 DB 2A C4 D6 DC 04 3F 4A 4D 50 00 87 12 AC DC -F2 CD 78 C4 CA DB 2A C4 -@FFFE -16 D6 -q diff --git a/binaries/MSP_EXP430FR4133_8MHz.txt b/binaries/MSP_EXP430FR4133_8MHz.txt index ff617cf..92dadc0 100644 --- a/binaries/MSP_EXP430FR4133_8MHz.txt +++ b/binaries/MSP_EXP430FR4133_8MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 04 00 51 55 40 1F 05 00 18 00 08 DD CC D2 -2C 01 7B B0 FC C7 0E C8 +10 00 04 00 51 55 40 1F 05 00 18 00 9C DA 0C D1 +2D 01 6B B0 B6 C6 C8 C6 @C400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C4 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C4 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C4 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C4 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C4 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C4 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C4 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C4 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 20 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C4 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C5 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C4 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C5 02 31 2D 00 -1E 83 30 4D D8 C4 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C5 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C5 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C5 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C4 01 3E 3E 8F F4 3B EB 37 0E C5 02 42 4C 00 -85 12 20 00 AC C5 04 42 41 53 45 00 85 12 DC 21 -C8 C4 05 53 54 41 54 45 85 12 BE 21 96 C5 02 3C -23 00 B2 40 B2 21 B2 21 30 4D 86 C5 06 55 4D 2F -4D 4F 44 00 30 12 62 C4 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C4 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C5 -01 23 1B 42 DC 21 2C 4F 2F 83 B0 12 F0 C5 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 21 18 42 B2 21 C8 4A 00 00 30 4D 30 C6 -02 23 53 00 87 12 32 C6 6A C6 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C6 02 23 3E 00 9F 42 -B2 21 00 00 3E 40 B2 21 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C5 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C5 -02 44 2E 00 87 12 D2 C5 44 C4 B0 C4 4C C5 64 C6 -BC C4 A2 C6 7E C6 14 C9 DC C8 2A C4 DC C5 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C4 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C6 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 21 30 4D F8 C4 -05 41 4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D 7A C6 -02 43 2C 00 1A 42 C6 21 CA 4E 00 00 92 53 C6 21 -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C6 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C6 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C5 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C7 03 4B 45 59 30 40 A0 C7 -18 42 0C 05 2F 83 8F 4E 00 00 B0 12 FC C7 92 B3 -1C 05 FD 27 1E 42 0C 05 B0 12 0E C8 30 4D 00 C7 -06 41 43 43 45 50 54 00 3C 40 6A C8 3B 40 34 C8 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C8 92 B3 1C 05 05 24 18 42 0C 05 38 90 -0A 00 04 20 21 53 39 40 22 C8 4D 15 A2 B3 1C 05 -FD 27 B2 40 11 00 0E 05 F2 C2 03 02 30 41 B2 40 -13 00 0E 05 F2 D2 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C8 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 0C 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 1C 05 FD 27 82 48 0E 05 30 4D 60 C8 -2D 83 92 B3 1C 05 E4 23 FC 27 82 93 DE 21 02 24 -92 53 DE 21 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C6 04 45 4D 49 54 00 30 40 8C C8 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 21 00 00 AF 4F 02 00 8F 3F 82 C8 04 45 43 48 -4F 00 B2 40 82 48 58 C8 82 43 DE 21 30 4D E0 C6 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C8 92 43 -DE 21 30 4D 9C C6 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C8 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C8 EF 3F 00 C9 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C7 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C9 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C9 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C7 02 43 -52 00 30 40 46 C9 87 12 52 C9 02 0D 0A 00 14 C9 -2A C4 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C8 82 53 22 00 82 43 B4 21 -87 12 34 C4 52 C9 0A CC 34 C4 22 00 B6 C9 80 C9 -3D 41 B2 40 20 00 B4 21 6E 4E 1E 83 82 5E C6 21 -3E 4F 92 B3 C6 21 A2 63 C6 21 30 4D C0 C8 82 2E -22 00 87 12 6C C9 34 C4 14 C9 0A CC 2A C4 00 00 -04 57 4F 52 44 00 3C 40 C0 21 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C4 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C4 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C4 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C4 02 3E 52 00 0E 12 3E 4F 30 4D 70 C4 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C4 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 20 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C4 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C4 +01 21 BE 4F 00 00 3E 4F 30 4D CC C4 02 30 3D 00 +1E 83 0E 7E 30 4D FC C4 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C5 02 3C 23 00 B2 40 B2 21 B2 21 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C4 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 21 2C 4F 2F 83 +B0 12 46 C5 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 21 18 42 B2 21 C8 4A +00 00 30 4D 86 C5 02 23 53 00 87 12 88 C5 C0 C5 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C5 +02 23 3E 00 9F 42 B2 21 00 00 3E 40 B2 21 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C4 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C5 34 C4 86 C4 D4 C4 BA C5 +92 C4 F8 C5 D4 C5 D6 C7 7E CB 82 C7 2A C4 22 C5 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C5 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C6 18 42 0C 05 2F 83 8F 4E +00 00 B0 12 B6 C6 92 B3 1C 05 FD 27 1E 42 0C 05 +B0 12 C8 C6 30 4D A2 B3 1C 05 FD 27 B2 40 11 00 +0E 05 F2 C2 03 02 30 41 B2 40 13 00 0E 05 F2 D2 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C6 +B0 12 B6 C6 12 D2 0A 18 F9 3F F0 C4 06 41 43 43 +45 50 54 00 3C 40 64 C7 3B 40 2E C7 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C7 +92 B3 1C 05 05 24 18 42 0C 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 0C 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 1C 05 +FD 27 82 48 0E 05 30 4D 5A C7 2D 83 92 B3 1C 05 +E4 23 FC 27 82 93 DE 21 02 24 92 53 DE 21 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C4 04 45 4D 49 +54 00 30 40 86 C7 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 21 00 00 AF 4F +02 00 A8 3F 7C C7 04 45 43 48 4F 00 B2 40 82 48 +52 C7 82 43 DE 21 30 4D 32 C6 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C7 92 43 DE 21 30 4D 20 C6 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C7 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C7 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C5 +02 43 52 00 30 40 08 C8 87 12 1E C8 02 0D 0A 00 +D6 C7 2A C4 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C5 82 53 22 00 82 43 B4 21 87 12 14 C8 +1E C8 EC CA 14 C8 22 00 80 C8 4C C8 B2 40 20 00 +B4 21 6E 4E 1E 53 1E B3 82 6E C6 21 3D 41 3E 4F +30 4D BA C7 82 2E 22 00 87 12 38 C8 14 C8 D6 C7 +EC CA 2A C4 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 21 1A 42 C2 21 09 5A 1A 52 C4 21 +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 21 82 4A C4 21 30 4D 18 42 C6 21 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 21 F0 3F 1A 82 C2 21 82 4A C4 21 1E 42 C6 21 08 8E @@ -104,305 +86,284 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C4 34 40 00 C4 30 4D 0E C9 03 55 +00 00 35 40 0E C4 34 40 00 C4 30 4D D0 C7 03 55 4D 2A 2C 4F 0B 43 09 43 08 43 1A 43 0E BA 02 24 09 5C 08 6B 0C 5C 0B 6B 0A 5A F8 2B 8F 49 00 00 -0E 48 30 4D A2 C5 07 3E 4E 55 4D 42 45 52 2C 4F +0E 48 30 4D 82 C4 07 3E 4E 55 4D 42 45 52 2C 4F 0B 4E 1A 42 DC 21 68 4C 78 80 30 00 78 90 0A 00 05 28 78 80 07 00 78 90 0A 00 1F 28 08 9A 22 C3 -1C 2C 5D 15 1C 4F 02 00 0E 4A 3D 40 D0 CA D2 3F -D2 CA 81 49 02 00 1C 4F 04 00 1E 41 04 00 3D 40 -E4 CA C8 3F E6 CA 39 51 3E 61 8F 49 04 00 8F 4E +1C 2C 5D 15 1C 4F 02 00 0E 4A 3D 40 B0 C9 D2 3F +B2 C9 81 49 02 00 1C 4F 04 00 1E 41 04 00 3D 40 +C4 C9 C8 3F C6 C9 39 51 3E 61 8F 49 04 00 8F 4E 02 00 3A 17 1C 53 1B 83 D6 23 8F 4C 00 00 0E 4B -30 4D 1B 42 DC 21 0C 43 2D 15 3D 40 4E CB 0A 4B -3F 82 8F 4E 06 00 8F 43 04 00 8F 43 02 00 0C 4E -7B 4C 68 4C 78 90 2D 00 04 28 BE 23 B1 43 02 00 -E1 3F 2A 43 78 80 25 00 07 24 3A 52 68 53 04 24 -3A 40 10 00 58 83 AF 23 1C 53 1B 83 EA 3F 50 CB -31 24 2D 83 78 90 28 00 CD 27 32 B0 00 02 2A 20 -32 D0 00 02 78 90 F7 00 C5 27 78 90 F5 00 22 20 -09 43 8F 49 02 00 5B 83 09 4B 09 5C 69 49 79 80 -30 00 79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 -0A 28 09 9A 08 2C 8F 49 00 00 0E 4A 2C 15 B0 12 -E8 C5 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 -0E 4B 4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 -00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 -04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 -BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 -01 20 2F 53 30 4D AC C8 07 45 58 45 43 55 54 45 -0A 4E 3E 4F 00 4A 26 C5 01 2C 1A 42 C6 21 A2 53 -C6 21 8A 4E 00 00 3E 4F 30 4D 08 CC 87 4C 49 54 -45 52 41 4C 82 93 BE 21 0C 24 1A 42 C6 21 A2 52 -C6 21 BA 40 34 C4 00 00 8A 4E 02 00 3E 4F 32 B0 -00 02 32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 -0E 49 EB 3F 30 4D 3E C9 05 43 4F 55 4E 54 2F 83 -1E 53 8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 21 -B2 4F C2 21 3E 4F 82 43 C4 21 30 4D 87 12 6C CC -B0 C5 B6 C9 86 CC 3D 40 8E CC C1 22 3C 3E 90 CC -0A 4E 3E 4F 3D 40 A6 CC 34 27 3D 40 80 CC 1A E2 -BE 21 B3 27 AD 23 A8 CC 3E 4F 3D 40 80 CC BA 23 -DE 53 00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 -72 CF CD 3F F8 CB 08 45 56 41 4C 55 41 54 45 00 -39 40 C0 21 3C 49 3B 49 3A 49 3D 15 B0 12 2A C4 -7C CC E4 CC B2 41 C4 21 B2 41 C2 21 B2 41 C0 21 -3D 41 30 4D 6C C5 04 51 55 49 54 00 82 43 08 18 -31 40 E0 20 B2 40 00 20 00 20 82 43 BE 21 B0 12 -2A C4 42 C9 92 C8 DC C8 7C CC DE C4 70 C5 52 C9 -0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 70 CD -34 C4 30 FF F2 C6 8A C5 52 C9 0A 46 52 41 4D 20 -66 75 6C 6C 21 00 70 CD 24 C7 12 CD C0 C7 05 41 -42 4F 52 54 3F 40 80 20 D1 3F 4E CD 86 41 42 4F -52 54 22 00 87 12 6C C9 34 C4 70 CD 0A CC 2A C4 -8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 32 D5 -B0 12 FC C7 92 C3 1C 05 38 40 50 55 39 42 09 59 -03 43 19 83 FD 23 18 83 F9 23 92 B3 1C 05 F2 23 -87 12 AC D4 34 C4 DE 21 F2 C4 B2 C8 52 C9 04 1B -5B 37 6D 00 14 C9 54 C4 28 C7 CC CD 42 C9 52 C9 -05 6C 69 6E 65 3A 14 C9 40 C5 D2 C6 14 C9 52 C9 -04 1B 5B 30 6D 00 14 C9 54 CD 00 00 83 5B 27 5D -87 12 F2 CD 34 C4 34 C4 0A CC 0A CC 2A C4 08 CA -01 27 87 12 B0 C5 B6 C9 0E CA 28 C7 00 CE 2A C4 -B0 CC CE C5 81 5C 92 42 C0 21 C4 21 30 4D DC CD -81 5B 82 43 BE 21 30 4D 04 CE 01 5D B2 43 BE 21 -30 4D BE 4F 02 00 3E 4F 30 4D 72 C7 82 49 53 00 -87 12 C8 C5 F2 C4 28 C7 44 CE E0 CD 34 C4 22 CE -0A CC 2A C4 F2 CD 22 CE 2A C4 2C CE 09 49 4D 4D -45 44 49 41 54 45 1A 42 B6 21 FA D0 80 00 00 00 -30 4D 68 C9 87 52 45 43 55 52 53 45 19 42 C6 21 -99 42 BA 21 00 00 A2 53 C6 21 30 4D F6 CC 88 50 -4F 53 54 50 4F 4E 45 00 87 12 B0 C5 B6 C9 0E CA -54 C4 28 C7 00 CE 70 C5 28 C7 A8 CE 34 C4 34 C4 -0A CC 0A CC 34 C4 0A CC 0A CC 2A C4 10 CE 81 3B -82 93 BE 21 A8 27 87 12 34 C4 2A C4 0A CC 46 CF -12 CE 2A C4 AE CE 07 3A 4E 4F 4E 41 4D 45 2F 83 -8F 4E 00 00 1E 42 C6 21 0A 4E 39 40 00 02 38 40 -02 02 B0 12 32 CF BA 40 87 12 FC FF A2 83 C6 21 -B2 43 BE 21 82 4F BC 21 30 4D C6 CE 01 3A 30 12 -E6 CE 87 12 92 C9 B0 C5 B6 C9 0C CF 3D 41 08 4E -7A 4E 5A D3 5A 53 0A 58 19 42 DA 21 6E 4E 3E F0 -1E 00 09 5E 3E 4F BA 40 30 40 00 00 BA 40 F8 CE -02 00 82 48 B6 21 82 49 B8 21 82 4A BA 21 2A 52 +30 4D 32 C0 00 02 1B 42 DC 21 0C 43 2D 15 3D 40 +32 CA 0A 4B 3F 82 8F 4E 06 00 8F 43 04 00 8F 43 +02 00 0C 4E 7B 4C 68 4C 78 90 2D 00 04 28 BC 23 +B1 43 02 00 DF 3F 2A 43 78 80 25 00 07 24 3A 52 +68 53 04 24 3A 40 10 00 58 83 AD 23 1C 53 1B 83 +EA 3F 34 CA 2E 24 2D 83 78 90 28 00 CB 27 32 D0 +00 02 78 90 F7 00 C6 27 78 90 F5 00 22 20 09 43 +8F 49 02 00 5B 83 09 4B 09 5C 69 49 79 80 30 00 +79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 +09 9A 08 2C 8F 49 00 00 0E 4A 2C 15 B0 12 3E C5 +2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4B +4E 93 2B 17 0E 4C 82 4B DC 21 06 24 32 C0 00 02 +3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 +BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 +00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 +2F 53 30 4D 7E C6 04 48 45 52 45 00 2F 83 8F 4E +00 00 1E 42 C6 21 30 4D B6 C4 01 2C 1A 42 C6 21 +8A 4E 00 00 A2 53 C6 21 3E 4F 30 4D EC C6 05 41 +4C 4C 4F 54 82 5E C6 21 3E 4F 30 4D A6 C7 07 45 +58 45 43 55 54 45 0A 4E 3E 4F 00 4A EA CA 87 4C +49 54 45 52 41 4C 82 93 BE 21 0C 24 1A 42 C6 21 +A2 52 C6 21 BA 40 14 C8 00 00 8A 4E 02 00 3E 4F +32 B0 00 02 32 C0 00 02 06 24 19 4A 02 00 8A 4E +02 00 0E 49 EB 3F 30 4D 00 C8 05 43 4F 55 4E 54 +2F 83 1E 53 8F 4E 00 00 5E 4E FF FF 30 4D 82 4E +C0 21 B2 4F C2 21 3E 4F 82 43 C4 21 30 4D 85 12 +20 00 87 12 6E CB 7E CB 80 C8 8C CB 3D 40 94 CB +AE 22 64 3E 96 CB 0A 4E 3E 4F 3D 40 AC CB 21 27 +3D 40 86 CB 1A E2 BE 21 A1 27 B5 23 AE CB 3E 4F +3D 40 86 CB B8 23 DE 53 00 00 68 4E 08 5E F8 40 +3F 00 00 00 3D 40 62 CE CB 3F 0E CB 08 45 56 41 +4C 55 41 54 45 00 39 40 C0 21 3C 49 3B 49 3A 49 +3D 15 B0 12 2A C4 82 CB EA CB B2 41 C4 21 B2 41 +C2 21 B2 41 C0 21 3D 41 30 4D 85 12 BE 21 08 C5 +04 51 55 49 54 00 82 43 08 18 31 40 E0 20 B2 40 +00 20 00 20 82 43 BE 21 B0 12 2A C4 04 C8 8C C7 +7E CB 82 C7 82 CB A4 C4 0C C5 1E C8 0C 73 74 61 +63 6B 20 65 6D 70 74 79 21 00 7C CC 14 C8 30 FF +DC CA 26 C5 1E C8 0A 46 52 41 4D 20 66 75 6C 6C +21 00 7C CC 3C C6 1C CC FE CA 05 41 42 4F 52 54 +3F 40 80 20 D0 3F 5A CC 86 41 42 4F 52 54 22 00 +87 12 38 C8 14 C8 7C CC EC CA 2A C4 8F 93 02 00 +03 20 2F 52 3E 4F 30 4D B0 12 04 D2 B0 12 B6 C6 +92 C3 1C 05 38 40 50 55 39 42 03 43 19 83 FD 23 +18 83 FA 23 92 B3 1C 05 F3 23 87 12 7E D1 14 C8 +DE 21 EA C4 AC C7 1E C8 04 1B 5B 37 6D 00 D6 C7 +58 C4 40 C6 D6 CC 04 C8 1E C8 05 6C 69 6E 65 3A +D6 C7 D0 C4 24 C6 D6 C7 1E C8 04 1B 5B 30 6D 00 +D6 C7 60 CC 00 00 83 5B 27 5D 87 12 FC CC 14 C8 +14 C8 EC CA EC CA 2A C4 E8 C8 01 27 87 12 7E CB +80 C8 EE C8 40 C6 0A CD 2A C4 B6 CB 32 C5 81 5C +92 42 C0 21 C4 21 30 4D E6 CC 81 5B 82 43 BE 21 +30 4D 0E CD 01 5D B2 43 BE 21 30 4D BE 4F 02 00 +3E 4F 30 4D D6 CA 82 49 53 00 87 12 FA CB EA C4 +40 C6 4E CD EA CC 14 C8 2C CD EC CA 2A C4 FC CC +2C CD 2A C4 36 CD 09 49 4D 4D 45 44 49 41 54 45 +1A 42 B6 21 FA D0 80 00 00 00 30 4D 00 CC 88 50 +4F 53 54 50 4F 4E 45 00 87 12 7E CB 80 C8 EE C8 +58 C4 40 C6 0A CD 0C C5 40 C6 98 CD 14 C8 14 C8 +EC CA EC CA 14 C8 EC CA EC CA 2A C4 1A CD 81 3B +82 93 BE 21 B5 27 87 12 14 C8 2A C4 EC CA 36 CE +1C CD 2A C4 9E CD 07 3A 4E 4F 4E 41 4D 45 30 12 +DC CD 2F 83 8F 4E 00 00 1E 42 C6 21 1E B3 0E 63 +0A 4E 39 40 00 02 38 40 02 02 21 3C BA 40 87 12 +FC FF A2 83 C6 21 B2 43 BE 21 30 4D B6 CD 01 3A +30 12 DC CD 92 B3 C6 21 A2 63 C6 21 87 12 7E CB +80 C8 04 CE 3D 41 08 4E 7A 4E 5A D3 5A 53 0A 58 +19 42 DA 21 6E 4E 3E F0 1E 00 09 5E 3E 4F 82 48 +B6 21 82 49 B8 21 82 4A BA 21 82 4F BC 21 2A 52 82 4A C6 21 30 41 82 9F BC 21 09 20 18 42 B6 21 19 42 B8 21 A8 49 FE FF 89 48 00 00 30 4D 87 12 -52 C9 0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 -68 21 7C CD B0 C9 08 56 41 52 49 41 42 4C 45 00 -B0 12 02 CF BA 40 86 12 FC FF E4 3F 58 CC 08 43 -4F 4E 53 54 41 4E 54 00 B0 12 02 CF BA 40 85 12 -FC FF 8A 4E FE FF 3E 4F D5 3F 8E CF 06 43 52 45 -41 54 45 00 B0 12 02 CF BA 40 85 12 FC FF 8A 4A -FE FF C8 3F C6 CC 05 44 4F 45 53 3E 1A 42 BA 21 -BA 40 84 12 00 00 8A 4D 02 00 3D 41 30 4D C6 CF -05 44 45 46 45 52 30 12 54 CF 8B 3F 96 CA 05 3E -42 4F 44 59 2E 52 30 4D AC CF 04 43 4F 44 45 00 -B0 12 02 CF 2A 82 82 4A C6 21 87 12 F4 CE D6 D2 -A8 D2 2A C4 FA CF 07 43 4F 44 45 4E 4E 4D 87 12 -CE CE 12 CE 04 D0 2A C4 00 00 07 45 4E 44 43 4F -44 45 87 12 F0 D2 46 CF 2A C4 5C CD 03 41 53 4D -92 42 DA 21 EC 21 B2 40 AC D2 DA 21 D9 3F 2A D0 -06 45 4E 44 41 53 4D 00 92 42 EC 21 DA 21 E9 3F -00 00 05 43 4F 4C 4F 4E 1A 42 C6 21 BA 40 87 12 -00 00 A2 53 C6 21 B2 43 BE 21 30 40 F0 D2 00 00 -05 4C 4F 32 48 49 1A 42 C6 21 BA 40 B0 12 00 00 -BA 40 2A C4 02 00 A2 52 C6 21 ED 3F 4C CE 85 48 -49 32 4C 4F 87 12 F2 C6 CE D0 0A CC 12 CE D6 D2 -A8 D2 2A C4 9E D0 82 49 46 00 2F 83 8F 4E 00 00 -1E 42 C6 21 A2 52 C6 21 BE 40 28 C7 00 00 2E 53 -30 4D E0 CF 84 45 4C 53 45 00 A2 52 C6 21 1A 42 -C6 21 BA 40 24 C7 FC FF 8E 4A 00 00 2A 83 0E 4A -30 4D 6E CA 84 54 48 45 4E 00 9E 42 C6 21 00 00 -3E 4F 30 4D 16 D0 85 42 45 47 49 4E 30 40 F2 C6 -F4 D0 85 55 4E 54 49 4C 39 40 28 C7 A2 52 C6 21 -1A 42 C6 21 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D -3C D0 85 41 47 41 49 4E 39 40 24 C7 EF 3F 76 CF -85 57 48 49 4C 45 87 12 BA D0 78 C4 2A C4 64 CE -86 52 45 50 45 41 54 00 87 12 38 D1 FA D0 2A C4 -D4 D0 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 21 -1E 42 C6 21 BE 40 3C C7 FE FF A2 53 00 20 1A 42 -00 20 8A 43 00 00 30 4D 1C CC 84 4C 4F 4F 50 00 -39 40 5E C7 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF -8A 4E FE FF 1E 42 00 20 A2 83 00 20 2E 4E 0E 93 -03 24 8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C7 85 2B -4C 4F 4F 50 39 40 4C C7 E5 3F 8A D1 85 4C 45 41 -56 45 1A 42 C6 21 BA 40 6E C7 00 00 BA 40 24 C7 -02 00 B2 50 06 00 C6 21 A2 53 00 20 2A 52 19 42 -00 20 89 4A 00 00 30 4D CC D1 04 4D 4F 56 45 00 -0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 -06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A -09 5A 19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D -40 D1 0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 -B4 CF 34 C4 10 00 34 C4 00 00 3C C7 34 C4 00 00 -0A CC 5E C7 4C D2 F2 C6 34 C4 C8 21 44 C4 F2 C4 -0A CC FA C4 CC CF 34 C4 CA 21 FA C4 2A C4 F0 CD -05 46 4F 52 54 48 84 12 66 D2 D0 D2 04 D6 0E D3 -70 D2 B6 D0 BE D1 3A D4 00 D3 D0 D4 EA D4 12 D1 -76 D5 00 00 0E D4 1A CE EE CF 00 00 32 D1 09 41 -53 53 45 4D 42 4C 45 52 84 12 66 D2 F2 DB 5A DC -A6 DB C4 DC 6C DB E8 DC 98 D8 00 00 62 DB 12 DC -C4 DB 02 DC A8 D9 00 00 00 00 F6 DC 9A D2 9E D2 -04 41 4C 53 4F 00 3A 40 0C 00 39 40 CA 21 38 40 -CC 21 9D 3F 7E CE 08 50 52 45 56 49 4F 55 53 00 -3A 40 0E 00 39 40 CC 21 38 40 CA 21 8A 3F 9E C9 -04 4F 4E 4C 59 00 82 43 CC 21 30 4D 62 D1 0B 44 -45 46 49 4E 49 54 49 4F 4E 53 92 42 CA 21 DA 21 -30 4D 06 D1 07 43 4F 4D 50 41 52 45 0C 4E 38 4F -3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 -07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D -1E 43 30 4D FC CE 86 5B 54 48 45 4E 5D 00 30 4D -56 D3 86 5B 45 4C 53 45 5D 00 87 12 34 C4 00 00 -36 C5 B0 C5 B6 C9 5E CC 44 C4 28 C7 D0 D3 8A C4 -8A C4 52 C9 06 5B 54 48 45 4E 5D 00 2C D3 32 C7 -9E D3 36 C9 40 C5 54 C4 32 C7 72 D3 2A C4 8A C4 -8A C4 52 C9 06 5B 45 4C 53 45 5D 00 2C D3 32 C7 -BE D3 36 C9 40 C5 54 C4 32 C7 70 D3 2A C4 52 C9 -04 5B 49 46 5D 00 2C D3 32 C7 72 D3 24 C7 70 D3 -36 C9 52 C9 05 0D 0A 6B 6F 20 14 C9 92 C8 6C CC -24 C7 72 D3 62 D3 84 5B 49 46 5D 00 0E 93 3E 4F -BC 27 30 4D E6 D3 89 5B 44 45 46 49 4E 45 44 5D -87 12 B0 C5 B6 C9 0E CA 6C C4 2A C4 F6 D3 8B 5B -55 4E 44 45 46 49 4E 45 44 5D 87 12 B0 C5 B6 C9 -0E CA 6C C4 64 C5 2A C4 2A D4 3D 41 B2 4E 0E 18 -A2 4E 0C 18 3E 4F 44 3C FA D1 06 4D 41 52 4B 45 -52 00 B0 12 02 CF BA 40 84 12 FC FF BA 40 28 D4 -FE FF 9A 42 C8 21 00 00 28 83 8A 48 02 00 A2 52 -C6 21 30 40 4C CF 76 D2 06 D3 1A D3 6E D4 3A 4E -82 4A C8 21 2E 4E 82 4E C6 21 3D 40 10 00 09 4A -08 49 29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 -1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D -E6 D2 09 50 57 52 5F 53 54 41 54 45 84 12 66 D4 -CC D2 08 DD 50 D1 09 52 53 54 5F 53 54 41 54 45 -92 42 0E 18 B0 D4 92 42 0C 18 B2 D4 EF 3F A2 D4 -08 50 57 52 5F 48 45 52 45 00 92 42 C8 21 B0 D4 -92 42 C6 21 B2 D4 30 4D B6 D4 08 52 53 54 5F 48 -45 52 45 00 92 42 C8 21 0E 18 92 42 C6 21 0C 18 -EC 3F 32 D2 04 57 49 50 45 00 39 40 10 00 29 83 -B9 43 80 FF FC 23 B2 40 26 C8 24 C8 B2 40 80 D5 -7E D5 B2 40 CC D2 0E 18 B2 40 08 DD 0C 18 30 12 -C0 D4 B2 40 8C C8 8A C8 B2 40 46 C9 44 C9 B2 40 -A0 C7 9E C7 B2 40 18 00 0A 18 37 40 1A C4 36 40 -BC C4 35 40 0E C4 34 40 00 C4 39 40 10 00 29 83 -89 43 E0 21 FC 23 B2 40 0A 00 DC 21 B2 40 20 00 -B4 21 30 41 04 D5 04 57 41 52 4D 00 30 40 80 D5 -3D 40 B4 D5 92 C3 30 01 1E 42 08 18 0E 93 11 24 -D2 B3 00 02 02 20 3E E3 1E 53 F2 D0 03 00 0A 02 -3E 90 0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 -87 2F 30 4D 52 C9 06 0D 1B 5B 37 6D 23 00 14 C9 -E2 C6 52 C9 1F 46 61 73 74 46 6F 72 74 68 20 56 -33 30 30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 -65 6E 73 20 14 C9 34 C4 80 FF F2 C6 28 C5 D2 C6 -52 C9 0B 62 79 74 65 73 20 66 72 65 65 20 24 C7 -CC CD 24 D3 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 -B2 40 04 A5 20 01 B2 40 88 5A CC 01 B2 D0 00 08 -04 02 B2 D3 06 02 B2 43 02 02 B2 40 00 01 24 02 -B2 40 FF FE 22 02 B2 D0 FF FE 26 02 B2 43 42 02 -B2 D3 46 02 B2 43 62 02 B2 D3 66 02 B2 40 00 A5 -60 01 B2 40 FF 1E 80 01 B2 40 B6 00 82 01 B2 40 -F4 00 84 01 39 40 80 00 82 43 88 01 92 D2 5E 01 -08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 39 40 -00 08 29 83 89 43 00 20 FC 23 39 40 1E 00 29 83 -B9 40 16 D6 E2 FF FB 23 B2 40 2C C8 EC FF B2 40 -81 00 00 05 92 42 02 18 06 05 92 42 04 18 08 05 -92 C3 00 05 92 D3 1A 05 3F 40 80 20 31 40 E0 20 -30 12 7C D5 3F 3F 38 40 C0 21 39 48 2A 48 09 5A -1A 52 C4 21 09 9A 03 24 7E 9A FC 27 1A 83 0E 4A -2A 88 82 4A C4 21 30 4D 1C 15 B0 12 2A C4 B6 C9 -0E CA 32 C7 FE D6 02 CB 28 C7 00 CE 20 D7 00 D7 -29 4E 39 90 86 12 02 20 2E 53 0A 3C 39 90 85 12 -03 20 1E 4E 02 00 04 3C 39 90 84 12 01 20 2E 52 -1B 17 30 41 3E 40 28 00 B0 12 E8 D6 19 42 C6 21 -A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 12 12 -C4 21 92 53 C4 21 B0 12 2A C4 B6 C9 02 CB 28 C7 -5E D7 54 D7 21 53 3E 90 10 00 83 2D E1 2B 60 D7 -B2 41 C4 21 DD 3F 87 12 B0 C5 C6 D6 6E D7 0C 43 -1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 23 00 -2D 20 92 53 C4 21 B0 12 E8 D6 0E 93 03 20 3C 40 -00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 -03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 -12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 -3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 21 A2 53 -C6 21 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 -07 20 3C 40 10 02 92 53 C4 21 B0 12 E8 D6 ED 3F -7A 90 40 00 16 20 3C 40 20 00 92 53 C4 21 B0 12 -3C D7 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 3C D7 -92 92 C0 21 C4 21 02 24 92 53 C4 21 8E 10 0C 5E -DA 3F B0 12 3C D7 FA 23 3C 50 10 00 B0 12 24 D7 -EF 3F 0C 43 1B 42 C6 21 A2 53 C6 21 87 12 B0 C5 -C6 D6 44 D8 FE 90 26 00 00 00 3E 40 20 00 03 20 -3C 50 82 00 C8 3F B0 12 3C D7 E1 23 3C 50 80 00 -B0 12 24 D7 DC 3F 1C C8 04 52 45 54 49 00 87 12 -34 C4 00 13 0A CC 2A C4 34 C4 2C 00 66 D7 3C D8 -82 D8 2E 4E 0E DC 09 4B A4 3F 80 D0 03 4D 4F 56 -84 12 78 D8 00 40 8C D8 05 4D 4F 56 2E 42 84 12 -78 D8 40 40 00 00 03 41 44 44 84 12 78 D8 00 50 -A6 D8 05 41 44 44 2E 42 84 12 78 D8 40 50 B2 D8 -04 41 44 44 43 00 84 12 78 D8 00 60 C0 D8 06 41 -44 44 43 2E 42 00 84 12 78 D8 40 60 68 D8 04 53 -55 42 43 00 84 12 78 D8 00 70 DE D8 06 53 55 42 -43 2E 42 00 84 12 78 D8 40 70 EC D8 03 53 55 42 -84 12 78 D8 00 80 FC D8 05 53 55 42 2E 42 84 12 -78 D8 40 80 62 D0 03 43 4D 50 84 12 78 D8 00 90 -16 D9 05 43 4D 50 2E 42 84 12 78 D8 40 90 50 D0 -04 44 41 44 44 00 84 12 78 D8 00 A0 30 D9 06 44 -41 44 44 2E 42 00 84 12 78 D8 40 A0 22 D9 03 42 -49 54 84 12 78 D8 00 B0 4E D9 05 42 49 54 2E 42 -84 12 78 D8 40 B0 5A D9 03 42 49 43 84 12 78 D8 -00 C0 68 D9 05 42 49 43 2E 42 84 12 78 D8 40 C0 -74 D9 03 42 49 53 84 12 78 D8 00 D0 82 D9 05 42 -49 53 2E 42 84 12 78 D8 40 D0 00 00 03 58 4F 52 -84 12 78 D8 00 E0 9C D9 05 58 4F 52 2E 42 84 12 -78 D8 40 E0 CE D8 03 41 4E 44 84 12 78 D8 00 F0 -B6 D9 05 41 4E 44 2E 42 84 12 78 D8 40 F0 B0 C5 -66 D7 D4 D9 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 -0C DA 4F 3F 08 D9 03 52 52 43 84 12 CE D9 00 10 -E6 D9 05 52 52 43 2E 42 84 12 CE D9 40 10 F2 D9 -04 53 57 50 42 00 84 12 CE D9 80 10 00 DA 03 52 -52 41 84 12 CE D9 00 11 0E DA 05 52 52 41 2E 42 -84 12 CE D9 40 11 1A DA 03 53 58 54 84 12 CE D9 -80 11 00 00 04 50 55 53 48 00 84 12 CE D9 00 12 -34 DA 06 50 55 53 48 2E 42 00 84 12 CE D9 40 12 -8E D9 04 43 41 4C 4C 00 84 12 CE D9 80 12 1A 53 -0E 4A 87 12 E2 C6 52 C9 0D 6F 75 74 20 6F 66 20 -62 6F 75 6E 64 73 7C CD B0 C5 C6 D6 7E DA 92 53 -C4 21 3E 40 2C 00 B0 12 2A C4 B6 C9 02 CB 28 C7 -00 CE 32 D8 96 DA 0A 4E 3E 4F 1A 83 E0 33 29 4E -59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 -10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 -8F 3F 28 DA 04 52 52 43 4D 00 84 12 78 DA 50 00 -C4 DA 04 52 52 41 4D 00 84 12 78 DA 50 01 D2 DA -04 52 4C 41 4D 00 84 12 78 DA 50 02 E0 DA 04 52 -52 55 4D 00 84 12 78 DA 50 03 42 DA 05 50 55 53 -48 4D 84 12 78 DA 00 15 FC DA 04 50 4F 50 4D 00 -84 12 78 DA 00 17 85 12 00 3C EE DA 03 53 3E 3D -85 12 00 38 1C DB 02 53 3C 00 85 12 00 34 0A DB -03 30 3E 3D 85 12 00 30 30 DB 02 30 3C 00 85 12 -00 30 00 00 02 55 3C 00 85 12 00 2C 44 DB 03 55 -3E 3D 85 12 00 28 3A DB 03 30 3C 3E 85 12 00 24 -58 DB 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 -1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A 30 4D -4E DB 04 54 48 45 4E 00 1A 42 C6 21 08 4E 3E 4F -09 48 29 53 0A 89 0A 11 3A 90 00 02 61 2F 88 DA -00 00 30 4D 3E D9 04 45 4C 53 45 00 1A 42 C6 21 -BA 40 00 3C 00 00 A2 53 C6 21 2F 83 8F 4A 00 00 -E3 3F 82 DB 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F -19 42 C6 21 2A 83 0A 89 0A 11 3A 90 00 FE 40 3B -3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 21 30 4D -C2 D9 05 41 47 41 49 4E 87 12 16 DB CA DB 2A C4 -00 00 05 57 48 49 4C 45 87 12 70 DB 78 C4 2A C4 -26 DB 06 52 45 50 45 41 54 00 87 12 16 DB CA DB -88 DB 2A C4 26 DC 3D 41 2E 4E 08 4E 3E 4F 2A 48 -0A 93 88 43 00 00 CA 23 98 42 C6 21 00 00 30 4D -52 DA 03 42 57 31 84 12 24 DC E0 21 42 DC 03 42 -57 32 84 12 24 DC E2 21 4E DC 03 42 57 33 84 12 -24 DC E4 21 66 DC 3D 41 1A 42 C6 21 2E 4E 28 4E -08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 C6 21 -8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 -64 DC E6 21 8A DC 03 46 57 32 84 12 64 DC E8 21 -96 DC 03 46 57 33 84 12 64 DC EA 21 3E 90 00 30 +1E C8 0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 +68 21 88 CC CC CB 05 44 45 46 45 52 B0 12 F4 CD +BA 40 30 40 FC FF BA 40 EA CD FE FF E3 3F 5A CB +06 43 52 45 41 54 45 00 B0 12 F4 CD BA 40 85 12 +FC FF 8A 4A FE FF D6 3F 66 CE 05 44 4F 45 53 3E +1A 42 BA 21 BA 40 84 12 00 00 8A 4D 02 00 3D 41 +30 4D 76 C9 05 3E 42 4F 44 59 2E 52 30 4D 80 CE +04 43 4F 44 45 00 B0 12 F4 CD A2 82 C6 21 87 12 +0E D1 E8 D0 2A C4 C0 CE 07 43 4F 44 45 4E 4E 4D +B0 12 C2 CD F2 3F 00 00 07 45 4E 44 43 4F 44 45 +87 12 1C D1 36 CE 2A C4 68 CC 03 41 53 4D B2 40 +EC D0 DA 21 E0 3F E8 CE 06 45 4E 44 41 53 4D 00 +87 12 F0 CE 30 D1 2A C4 00 00 05 43 4F 4C 4F 4E +1A 42 C6 21 BA 40 87 12 00 00 A2 53 C6 21 B2 43 +BE 21 30 40 1C D1 00 00 05 4C 4F 32 48 49 1A 42 +C6 21 BA 40 B0 12 00 00 BA 40 2A C4 02 00 A2 52 +C6 21 ED 3F 56 CD 85 48 49 32 4C 4F 87 12 DC CA +86 CF EC CA 1C CD 0E D1 E8 D0 2A C4 56 CF 82 49 +46 00 2F 83 8F 4E 00 00 1E 42 C6 21 A2 52 C6 21 +BE 40 40 C6 00 00 2E 53 30 4D 9A CE 84 45 4C 53 +45 00 A2 52 C6 21 1A 42 C6 21 BA 40 3C C6 FC FF +8E 4A 00 00 2A 83 0E 4A 30 4D 4E C9 84 54 48 45 +4E 00 9E 42 C6 21 00 00 3E 4F 30 4D D8 CE 85 42 +45 47 49 4E 30 40 DC CA AC CF 85 55 4E 54 49 4C +39 40 40 C6 A2 52 C6 21 1A 42 C6 21 8A 49 FC FF +8A 4E FE FF 3E 4F 30 4D FA CE 85 41 47 41 49 4E +39 40 3C C6 EF 3F 7A C8 85 57 48 49 4C 45 87 12 +72 CF 76 C4 2A C4 34 C8 86 52 45 50 45 41 54 00 +87 12 F0 CF B2 CF 2A C4 8C CF 82 44 4F 00 2F 83 +8F 4E 00 00 A2 53 C6 21 1E 42 C6 21 BE 40 54 C6 +FE FF A2 53 00 20 1A 42 00 20 8A 43 00 00 30 4D +1E CB 84 4C 4F 4F 50 00 39 40 76 C6 A2 52 C6 21 +1A 42 C6 21 8A 49 FC FF 8A 4E FE FF 1E 42 00 20 +A2 83 00 20 2E 4E 0E 93 03 24 8E 4A 00 00 F6 3F +3E 4F 30 4D 90 C6 85 2B 4C 4F 4F 50 39 40 64 C6 +E5 3F 42 D0 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F +3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 +18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 +E8 49 00 00 1A 83 FA 23 30 4D 14 C8 CA 21 F2 C4 +2A C4 84 12 BA D0 EA CF 82 D3 1A D0 FA CC 6E CF +76 D0 96 D4 64 C8 A2 D1 BC D1 CA CF 3C D2 00 00 +68 D4 24 CD B4 CE 00 00 84 12 BA D0 B4 D9 16 DA +68 D9 8A DA 2E D9 00 00 5E D6 00 00 24 D9 D4 D9 +86 D9 C4 D9 6E D7 00 00 00 00 66 DA E6 D0 3A 40 +0C 00 39 40 CA 21 38 40 CC 21 C6 3F 3A 40 0E 00 +39 40 CC 21 38 40 CA 21 B9 3F 82 43 CC 21 30 4D +92 42 CA 21 DA 21 30 4D C2 D0 2A D1 30 D1 40 D1 +3A 4E 82 4A C8 21 2E 4E 82 4E C6 21 3D 40 10 00 +09 4A 08 49 29 83 18 48 FE FF 0E 98 FC 2B 89 48 +00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 +30 4D 6E CD 09 50 57 52 5F 53 54 41 54 45 84 12 +38 D1 0C D1 9C DA 08 D0 09 52 53 54 5F 53 54 41 +54 45 92 42 0E 18 82 D1 92 42 0C 18 84 D1 EF 3F +74 D1 08 50 57 52 5F 48 45 52 45 00 92 42 C8 21 +82 D1 92 42 C6 21 84 D1 30 4D 88 D1 08 52 53 54 +5F 48 45 52 45 00 92 42 C8 21 0E 18 92 42 C6 21 +0C 18 EC 3F F8 CF 04 57 49 50 45 00 39 40 10 00 +29 83 B9 43 80 FF FC 23 B2 40 E0 C6 DE C6 B2 40 +46 D2 44 D2 B2 40 0C D1 0E 18 B2 40 9C DA 0C 18 +30 12 92 D1 B2 40 86 C7 84 C7 B2 40 08 C8 06 C8 +B2 40 98 C6 96 C6 B2 40 18 00 0A 18 37 40 1A C4 +36 40 92 C4 35 40 0E C4 34 40 00 C4 B2 40 0A 00 +DC 21 B2 40 20 00 B4 21 30 41 D6 D1 04 57 41 52 +4D 00 30 40 46 D2 3D 40 7A D2 92 C3 30 01 1E 42 +08 18 0E 93 11 24 D2 B3 00 02 02 20 3E E3 1E 53 +F2 D0 03 00 0A 02 3E 90 0A 00 B8 27 3E 90 16 00 +B5 2F 2E 93 84 27 8D 2F 30 4D 1E C8 06 0D 1B 5B +37 6D 23 00 D6 C7 34 C6 1E C8 19 46 61 73 74 46 +6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 68 6F 6F 72 +65 6E 73 20 D6 C7 14 C8 30 FF DC CA B8 C4 24 C6 +1E C8 0A 62 79 74 65 73 20 66 72 65 65 00 3C C6 +D6 CC BE CF 04 43 4F 4C 44 00 92 B3 0A 05 FD 23 +B2 40 04 A5 20 01 7A D2 B2 40 88 5A CC 01 B2 D0 +00 08 04 02 B2 D3 06 02 B2 43 02 02 B2 D0 FF FE +26 02 B2 43 22 02 B2 43 42 02 B2 D3 46 02 B2 43 +62 02 B2 D3 66 02 B2 40 00 A5 60 01 B2 40 FF 1E +80 01 B2 40 B6 00 82 01 B2 40 F4 00 84 01 39 40 +80 00 82 43 88 01 92 D2 5E 01 08 18 38 40 59 14 +18 83 FE 23 19 83 FA 23 39 40 00 08 29 83 89 43 +00 20 FC 23 39 40 1E 00 29 83 B9 40 D8 D2 E2 FF +FB 23 B2 40 26 C7 EC FF B2 40 81 00 00 05 92 42 +02 18 06 05 92 42 04 18 08 05 92 C3 00 05 92 D3 +1A 05 3F 40 80 20 31 40 E0 20 30 12 42 D2 4B 3F +C4 D2 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F +39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 +19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 +30 4D EE CD 86 5B 54 48 45 4E 5D 00 30 4D B4 D3 +86 5B 45 4C 53 45 5D 00 87 12 14 C8 00 00 C6 C4 +7E CB 80 C8 60 CB 34 C4 40 C6 2A D4 44 C4 1E C8 +06 5B 54 48 45 4E 5D 00 8A D3 4A C6 FA D3 F8 C7 +D0 C4 58 C4 4A C6 D0 D3 2A C4 44 C4 1E C8 06 5B +45 4C 53 45 5D 00 8A D3 4A C6 18 D4 F8 C7 D0 C4 +58 C4 4A C6 CE D3 2A C4 1E C8 04 5B 49 46 5D 00 +8A D3 4A C6 D0 D3 3C C6 CE D3 F8 C7 1E C8 05 0D +0A 6B 6F 20 D6 C7 8C C7 6E CB 3C C6 D0 D3 C0 D3 +84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D 40 D4 +89 5B 44 45 46 49 4E 45 44 5D 87 12 7E CB 80 C8 +EE C8 6A C4 2A C4 50 D4 8B 5B 55 4E 44 45 46 49 +4E 45 44 5D 87 12 7E CB 80 C8 EE C8 6A C4 00 C5 +2A C4 84 D4 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F +30 40 92 D1 84 D0 06 4D 41 52 4B 45 52 00 B0 12 +F4 CD BA 40 84 12 FC FF BA 40 82 D4 FE FF 9A 42 +C8 21 00 00 28 83 8A 48 02 00 A2 52 C6 21 30 40 +3C CE 1C 15 B0 12 2A C4 80 C8 EE C8 4A C6 D8 D4 +E2 C9 40 C6 0A CD F2 D4 DA D4 39 4E 39 80 86 12 +08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 01 24 +2E 82 1B 17 30 41 3E 40 28 00 B0 12 C2 D4 19 42 +C6 21 A2 53 C6 21 89 4E 00 00 3E 40 29 00 1C 15 +12 12 C4 21 92 53 C4 21 B0 12 2A C4 80 C8 E2 C9 +40 C6 30 D5 26 D5 21 53 3E 90 10 00 7D 2D E1 2B +32 D5 B2 41 C4 21 DD 3F 87 12 7E CB 74 C8 40 D5 +0C 43 1B 42 C6 21 A2 53 C6 21 6A 4E 3E 4F 7A 90 +23 00 27 20 92 53 C4 21 B0 12 C2 D4 3C 40 00 03 +0E 93 1C 24 3C 40 10 03 1E 93 18 24 3C 40 20 03 +2E 93 14 24 3C 40 20 02 2E 92 10 24 3C 40 30 02 +3E 92 0C 24 3C 40 30 03 3E 93 08 24 3C 40 30 00 +19 42 C6 21 A2 53 C6 21 89 4E 00 00 3E 4F 3D 41 +30 4D 7A 90 26 00 07 20 3C 40 10 02 92 53 C4 21 +B0 12 C2 D4 ED 3F 7A 90 40 00 16 20 3C 40 20 00 +92 53 C4 21 B0 12 0E D5 0C 20 3C 50 10 00 3E 40 +2B 00 B0 12 0E D5 92 92 C0 21 C4 21 02 24 92 53 +C4 21 8E 10 0C 5E DA 3F B0 12 0E D5 FA 23 3C 50 +10 00 B0 12 F6 D4 EF 3F 0C 43 1B 42 C6 21 A2 53 +C6 21 87 12 7E CB 74 C8 0A D6 FE 90 26 00 00 00 +3E 40 20 00 03 20 3C 50 82 00 C8 3F B0 12 0E D5 +E1 23 3C 50 80 00 B0 12 F6 D4 DC 3F D6 C6 04 52 +45 54 49 00 87 12 14 C8 00 13 EC CA 2A C4 14 C8 +2C 00 38 D5 02 D6 48 D6 09 4B 2E 4E 0E DC A4 3F +38 CF 03 4D 4F 56 84 12 3E D6 00 40 52 D6 05 4D +4F 56 2E 42 84 12 3E D6 40 40 00 00 03 41 44 44 +84 12 3E D6 00 50 6C D6 05 41 44 44 2E 42 84 12 +3E D6 40 50 78 D6 04 41 44 44 43 00 84 12 3E D6 +00 60 86 D6 06 41 44 44 43 2E 42 00 84 12 3E D6 +40 60 2E D6 04 53 55 42 43 00 84 12 3E D6 00 70 +A4 D6 06 53 55 42 43 2E 42 00 84 12 3E D6 40 70 +B2 D6 03 53 55 42 84 12 3E D6 00 80 C2 D6 05 53 +55 42 2E 42 84 12 3E D6 40 80 1A CF 03 43 4D 50 +84 12 3E D6 00 90 DC D6 05 43 4D 50 2E 42 84 12 +3E D6 40 90 08 CF 04 44 41 44 44 00 84 12 3E D6 +00 A0 F6 D6 06 44 41 44 44 2E 42 00 84 12 3E D6 +40 A0 E8 D6 03 42 49 54 84 12 3E D6 00 B0 14 D7 +05 42 49 54 2E 42 84 12 3E D6 40 B0 20 D7 03 42 +49 43 84 12 3E D6 00 C0 2E D7 05 42 49 43 2E 42 +84 12 3E D6 40 C0 3A D7 03 42 49 53 84 12 3E D6 +00 D0 48 D7 05 42 49 53 2E 42 84 12 3E D6 40 D0 +00 00 03 58 4F 52 84 12 3E D6 00 E0 62 D7 05 58 +4F 52 2E 42 84 12 3E D6 40 E0 94 D6 03 41 4E 44 +84 12 3E D6 00 F0 7C D7 05 41 4E 44 2E 42 84 12 +3E D6 40 F0 7E CB 38 D5 9A D7 0A 4C 3C F0 70 00 +8A 10 3A F0 0F 00 0C DA 4F 3F CE D6 03 52 52 43 +84 12 94 D7 00 10 AC D7 05 52 52 43 2E 42 84 12 +94 D7 40 10 B8 D7 04 53 57 50 42 00 84 12 94 D7 +80 10 C6 D7 03 52 52 41 84 12 94 D7 00 11 D4 D7 +05 52 52 41 2E 42 84 12 94 D7 40 11 E0 D7 03 53 +58 54 84 12 94 D7 80 11 00 00 04 50 55 53 48 00 +84 12 94 D7 00 12 FA D7 06 50 55 53 48 2E 42 00 +84 12 94 D7 40 12 54 D7 04 43 41 4C 4C 00 84 12 +94 D7 80 12 1A 53 0E 4A 87 12 34 C6 1E C8 0D 6F +75 74 20 6F 66 20 62 6F 75 6E 64 73 88 CC 7E CB +74 C8 44 D8 92 53 C4 21 3E 40 2C 00 B0 12 2A C4 +80 C8 E2 C9 40 C6 0A CD F8 D5 5C D8 0A 4E 3E 4F +1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 +0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 +D1 2F 8A 10 5A 06 8F 3F EE D7 04 52 52 43 4D 00 +84 12 3E D8 50 00 8A D8 04 52 52 41 4D 00 84 12 +3E D8 50 01 98 D8 04 52 4C 41 4D 00 84 12 3E D8 +50 02 A6 D8 04 52 52 55 4D 00 84 12 3E D8 50 03 +08 D8 05 50 55 53 48 4D 84 12 3E D8 00 15 C2 D8 +04 50 4F 50 4D 00 84 12 3E D8 00 17 B4 D8 03 53 +3E 3D 85 12 00 38 DE D8 02 53 3C 00 85 12 00 34 +D0 D8 03 30 3E 3D 85 12 00 30 F2 D8 02 30 3C 00 +85 12 00 30 00 00 02 55 3C 00 85 12 00 2C 06 D9 +03 55 3E 3D 85 12 00 28 FC D8 03 30 3C 3E 85 12 +00 24 1A D9 02 30 3D 00 85 12 00 20 00 00 02 49 +46 00 1A 42 C6 21 8A 4E 00 00 A2 53 C6 21 0E 4A +30 4D 10 D9 04 54 48 45 4E 00 1A 42 C6 21 08 4E +3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 63 2F +88 DA 00 00 30 4D 04 D7 04 45 4C 53 45 00 1A 42 +C6 21 BA 40 00 3C 00 00 A2 53 C6 21 2F 83 8F 4A +00 00 E3 3F 44 D9 05 55 4E 54 49 4C 3A 4F 08 4E +3E 4F 19 42 C6 21 2A 83 0A 89 0A 11 3A 90 00 FE +42 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 21 +30 4D 88 D7 05 41 47 41 49 4E 0A 4E 38 40 00 3C +E7 3F 00 00 05 57 48 49 4C 45 87 12 32 D9 76 C4 +2A C4 E8 D8 06 52 45 50 45 41 54 00 87 12 BA D9 +4A D9 2A C4 E6 D9 3D 41 08 4E 3E 4F 2A 48 B2 92 +C4 21 CD 2F 98 42 C6 21 00 00 30 4D 18 D8 03 42 +57 31 84 12 E4 D9 00 00 FE D9 03 42 57 32 84 12 +E4 D9 00 00 0A DA 03 42 57 33 84 12 E4 D9 00 00 +22 DA 3D 41 1A 42 C6 21 28 4E B2 92 C4 21 90 2B +BA 4F 00 00 A2 53 C6 21 8E 4A 00 00 3E 4F 30 4D +00 00 03 46 57 31 84 12 20 DA 00 00 42 DA 03 46 +57 32 84 12 20 DA 00 00 4E DA 03 46 57 33 84 12 +20 DA 00 00 00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 -30 4D A2 DC 04 47 4F 54 4F 00 87 12 16 DB F2 CD -00 CC 2A C4 00 00 05 3F 47 4F 54 4F 87 12 AC DC -F2 CD 00 CC 2A C4 00 00 03 4A 4D 50 87 12 F2 CD -F8 DB 2A C4 D6 DC 04 3F 4A 4D 50 00 87 12 AC DC -F2 CD 78 C4 CA DB 2A C4 +87 12 FC CC 16 CB 2A C4 5A DA 04 47 4F 54 4F 00 +2F 83 8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -16 D6 +D8 D2 q diff --git a/binaries/MSP_EXP430FR5739_16MHz.txt b/binaries/MSP_EXP430FR5739_16MHz.txt index d0c4742..61619b7 100644 --- a/binaries/MSP_EXP430FR5739_16MHz.txt +++ b/binaries/MSP_EXP430FR5739_16MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 A1 F7 80 3E 05 00 18 00 DE DA 8A D0 -2C 01 7B B0 FC C5 0E C6 +10 00 08 00 A1 F7 80 3E 05 00 18 00 70 D8 D0 CE +2D 01 6B B0 B6 C4 C8 C4 @C200 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C2 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C2 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C2 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C2 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C2 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C2 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C2 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C2 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C2 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C3 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C2 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C3 02 31 2D 00 -1E 83 30 4D D8 C2 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C3 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C3 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C3 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C2 01 3E 3E 8F F4 3B EB 37 0E C3 02 42 4C 00 -85 12 20 00 AC C3 04 42 41 53 45 00 85 12 DC 1D -C8 C2 05 53 54 41 54 45 85 12 BE 1D 96 C3 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 C3 06 55 4D 2F -4D 4F 44 00 30 12 62 C2 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C2 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C3 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 C3 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 C4 -02 23 53 00 87 12 32 C4 6A C4 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C4 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C3 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C3 -02 44 2E 00 87 12 D2 C3 44 C2 B0 C2 4C C3 64 C4 -BC C2 A2 C4 7E C4 14 C7 DC C6 2A C2 DC C3 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C2 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C4 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 C2 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A C4 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C4 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C4 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C3 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C5 03 4B 45 59 30 40 A0 C5 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 FC C5 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 0E C6 30 4D 00 C5 -06 41 43 43 45 50 54 00 3C 40 6A C6 3B 40 34 C6 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C6 92 B3 DC 05 05 24 18 42 CC 05 38 90 -0A 00 04 20 21 53 39 40 22 C6 4D 15 A2 B3 DC 05 -FD 27 B2 40 11 00 CE 05 E2 C2 03 02 30 41 B2 40 -13 00 CE 05 E2 D2 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C6 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 CC 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 DC 05 FD 27 82 48 CE 05 30 4D 60 C6 -2D 83 92 B3 DC 05 E4 23 FC 27 82 93 DE 1D 02 24 -92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C4 04 45 4D 49 54 00 30 40 8C C6 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 1D 00 00 AF 4F 02 00 8F 3F 82 C6 04 45 43 48 -4F 00 B2 40 82 48 58 C6 82 43 DE 1D 30 4D E0 C4 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C6 92 43 -DE 1D 30 4D 9C C4 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C6 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C6 EF 3F 00 C7 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C5 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C7 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C7 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C5 02 43 -52 00 30 40 46 C7 87 12 52 C7 02 0D 0A 00 14 C7 -2A C2 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C6 82 53 22 00 82 43 B4 1D -87 12 34 C2 52 C7 C8 C9 34 C2 22 00 B6 C7 80 C7 -3D 41 B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D -3E 4F 92 B3 C6 1D A2 63 C6 1D 30 4D C0 C6 82 2E -22 00 87 12 6C C7 34 C2 14 C7 C8 C9 2A C2 00 00 -04 57 4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C2 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C2 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C2 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C2 02 3E 52 00 0E 12 3E 4F 30 4D 70 C2 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C2 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C2 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C2 +01 21 BE 4F 00 00 3E 4F 30 4D CC C2 02 30 3D 00 +1E 83 0E 7E 30 4D FC C2 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C3 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C2 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 C3 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 C3 02 23 53 00 87 12 88 C3 C0 C3 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C3 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C2 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C3 34 C2 86 C2 D4 C2 BA C3 +92 C2 F8 C3 D4 C3 D6 C5 42 C9 82 C5 2A C2 22 C3 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C3 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C4 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 C4 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 C4 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C2 03 02 30 41 B2 40 13 00 CE 05 E2 D2 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C4 +B0 12 B6 C4 12 D2 0A 18 F9 3F F0 C2 06 41 43 43 +45 50 54 00 3C 40 64 C5 3B 40 2E C5 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C5 +92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 CC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 +FD 27 82 48 CE 05 30 4D 5A C5 2D 83 92 B3 DC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C2 04 45 4D 49 +54 00 30 40 86 C5 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C C5 04 45 43 48 4F 00 B2 40 82 48 +52 C5 82 43 DE 1D 30 4D 32 C4 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C5 92 43 DE 1D 30 4D 20 C4 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C5 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C5 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C3 +02 43 52 00 30 40 08 C6 87 12 1E C6 02 0D 0A 00 +D6 C5 2A C2 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C3 82 53 22 00 82 43 B4 1D 87 12 14 C6 +1E C6 B0 C8 14 C6 22 00 80 C6 4C C6 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA C5 82 2E 22 00 87 12 38 C6 14 C6 D6 C5 +B0 C8 2A C2 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E @@ -104,302 +86,281 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C2 34 40 00 C2 30 4D A2 C3 07 3E +00 00 35 40 0E C2 34 40 00 C2 30 4D 82 C2 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 -2D 15 3D 40 10 C9 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 C9 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C3 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C6 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C3 01 2C 1A 42 C6 1D A2 53 C6 1D -8A 4E 00 00 3E 4F 30 4D C6 C9 87 4C 49 54 45 52 -41 4C 82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D -BA 40 34 C2 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C7 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F -C2 1D 3E 4F 82 43 C4 1D 30 4D 87 12 2A CA B0 C3 -B6 C7 44 CA 3D 40 4C CA E2 22 5D 3E 4E CA 0A 4E -3E 4F 3D 40 64 CA 39 27 3D 40 3E CA 1A E2 BE 1D -B3 27 AD 23 66 CA 3E 4F 3D 40 3E CA BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CD -CD 3F B6 C9 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 1D 3C 49 3B 49 3A 49 3D 15 B0 12 2A C2 3A CA -A2 CA B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 -30 4D 6C C3 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 C7 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C7 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C3 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C4 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 C2 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC C4 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 C5 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE C8 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 C6 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C6 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 C9 42 C9 80 C6 50 C9 +3D 40 58 C9 CC 22 82 3E 5A C9 0A 4E 3E 4F 3D 40 +70 C9 23 27 3D 40 4A C9 1A E2 BE 1D A1 27 B5 23 +72 C9 3E 4F 3D 40 4A C9 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CC CB 3F D2 C8 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C2 46 C9 AE C9 B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 C3 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A C2 -42 C7 92 C6 DC C6 3A CA DE C2 70 C3 52 C7 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CB 34 C2 -30 FF F2 C4 8A C3 52 C7 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CB 24 C5 D0 CA C0 C5 05 41 42 4F -52 54 3F 40 80 1C D1 3F 0C CB 86 41 42 4F 52 54 -22 00 87 12 6C C7 34 C2 2E CB C8 C9 2A C2 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D2 B0 12 -FC C5 92 C3 DC 05 38 40 A0 AA 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 DC 05 F2 23 87 12 -6A D2 34 C2 DE 1D F2 C2 B2 C6 52 C7 04 1B 5B 37 -6D 00 14 C7 54 C2 28 C5 8A CB 42 C7 52 C7 05 6C -69 6E 65 3A 14 C7 40 C3 D2 C4 14 C7 52 C7 04 1B -5B 30 6D 00 14 C7 12 CB 00 00 83 5B 27 5D 87 12 -B0 CB 34 C2 34 C2 C8 C9 C8 C9 2A C2 08 C8 01 27 -87 12 B0 C3 B6 C7 0E C8 28 C5 BE CB 2A C2 6E CA -CE C3 81 5C 92 42 C0 1D C4 1D 30 4D 9A CB 81 5B -82 43 BE 1D 30 4D C2 CB 01 5D B2 43 BE 1D 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C5 82 49 53 00 87 12 -C8 C3 F2 C2 28 C5 02 CC 9E CB 34 C2 E0 CB C8 C9 -2A C2 B0 CB E0 CB 2A C2 EA CB 09 49 4D 4D 45 44 +04 C6 8C C5 42 C9 82 C5 46 C9 A4 C2 0C C3 1E C6 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CA +14 C6 30 FF A0 C8 26 C3 1E C6 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CA 3C C4 E0 C9 C2 C8 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E CA 86 41 42 4F +52 54 22 00 87 12 38 C6 14 C6 40 CA B0 C8 2A C2 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 CF +B0 12 B6 C4 92 C3 DC 05 38 40 A0 AA 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 DC 05 F3 23 87 12 +42 CF 14 C6 DE 1D EA C2 AC C5 1E C6 04 1B 5B 37 +6D 00 D6 C5 58 C2 40 C4 9A CA 04 C6 1E C6 05 6C +69 6E 65 3A D6 C5 D0 C2 24 C4 D6 C5 1E C6 04 1B +5B 30 6D 00 D6 C5 24 CA 00 00 83 5B 27 5D 87 12 +C0 CA 14 C6 14 C6 B0 C8 B0 C8 2A C2 E8 C6 01 27 +87 12 42 C9 80 C6 EE C6 40 C4 CE CA 2A C2 7A C9 +32 C3 81 5C 92 42 C0 1D C4 1D 30 4D AA CA 81 5B +82 43 BE 1D 30 4D D2 CA 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A C8 82 49 53 00 87 12 +BE C9 EA C2 40 C4 12 CB AE CA 14 C6 F0 CA B0 C8 +2A C2 C0 CA F0 CA 2A C2 FA CA 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D -68 C7 87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 -BA 1D 00 00 A2 53 C6 1D 30 4D B4 CA 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C3 B6 C7 0E C8 54 C2 -28 C5 BE CB 70 C3 28 C5 66 CC 34 C2 34 C2 C8 C9 -C8 C9 34 C2 C8 C9 C8 C9 2A C2 CE CB 81 3B 82 93 -BE 1D A8 27 87 12 34 C2 2A C2 C8 C9 04 CD D0 CB -2A C2 6C CC 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CC BA 40 87 12 FC FF A2 83 C6 1D B2 43 -BE 1D 82 4F BC 1D 30 4D 84 CC 01 3A 30 12 A4 CC -87 12 92 C7 B0 C3 B6 C7 CA CC 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CC 02 00 -82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A -C6 1D 30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 -B8 1D A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C7 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CB B0 C7 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CC BA 40 86 12 FC FF E4 3F 16 CA 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CC BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CD 06 43 52 45 41 54 -45 00 B0 12 C0 CC BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CA 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CD 05 44 -45 46 45 52 30 12 12 CD 8B 3F 6E C8 05 3E 42 4F -44 59 2E 52 30 4D 6A CD 04 43 4F 44 45 00 B0 12 -C0 CC 2A 82 82 4A C6 1D 87 12 B2 CC 94 D0 66 D0 -2A C2 B8 CD 07 43 4F 44 45 4E 4E 4D 87 12 8C CC -D0 CB C2 CD 2A C2 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D0 04 CD 2A C2 1A CB 03 41 53 4D 92 42 -DA 1D EC 1D B2 40 6A D0 DA 1D D9 3F E8 CD 06 45 -4E 44 41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 -A2 53 C6 1D B2 43 BE 1D 30 40 AE D0 00 00 05 4C -4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 -2A C2 02 00 A2 52 C6 1D ED 3F 0A CC 85 48 49 32 -4C 4F 87 12 F2 C4 8C CE C8 C9 D0 CB 94 D0 66 D0 -2A C2 5C CE 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 1D A2 52 C6 1D BE 40 28 C5 00 00 2E 53 30 4D -9E CD 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D -BA 40 24 C5 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C7 84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F -30 4D D4 CD 85 42 45 47 49 4E 30 40 F2 C4 B2 CE -85 55 4E 54 49 4C 39 40 28 C5 A2 52 C6 1D 1A 42 -C6 1D 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CD -85 41 47 41 49 4E 39 40 24 C5 EF 3F 34 CD 85 57 -48 49 4C 45 87 12 78 CE 78 C2 2A C2 22 CC 86 52 -45 50 45 41 54 00 87 12 F6 CE B8 CE 2A C2 92 CE -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 -C6 1D BE 40 3C C5 FE FF A2 53 00 1C 1A 42 00 1C -8A 43 00 00 30 4D DA C9 84 4C 4F 4F 50 00 39 40 -5E C5 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E -FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C5 85 2B 4C 4F -4F 50 39 40 4C C5 E5 3F 48 CF 85 4C 45 41 56 45 -1A 42 C6 1D BA 40 6E C5 00 00 BA 40 24 C5 02 00 -B2 50 06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C -89 4A 00 00 30 4D 8A CF 04 4D 4F 56 45 00 0A 4E +C4 C9 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 C9 +80 C6 EE C6 58 C2 40 C4 CE CA 0C C3 40 C4 5C CB +14 C6 14 C6 B0 C8 B0 C8 14 C6 B0 C8 B0 C8 2A C2 +DE CA 81 3B 82 93 BE 1D B5 27 87 12 14 C6 2A C2 +B0 C8 FA CB E0 CA 2A C2 62 CB 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CB 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A CB 01 3A 30 12 A0 CB 92 B3 C6 1D A2 63 C6 1D +87 12 42 C9 80 C6 C8 CB 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C6 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CA 90 C9 05 44 45 46 45 52 +B0 12 B8 CB BA 40 30 40 FC FF BA 40 AE CB FE FF +E3 3F 1E C9 06 43 52 45 41 54 45 00 B0 12 B8 CB +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CC 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C7 05 3E 42 4F 44 59 2E 52 +30 4D 44 CC 04 43 4F 44 45 00 B0 12 B8 CB A2 82 +C6 1D 87 12 D2 CE AC CE 2A C2 84 CC 07 43 4F 44 +45 4E 4E 4D B0 12 86 CB F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 CE FA CB 2A C2 2C CA 03 41 +53 4D B2 40 B0 CE DA 1D E0 3F AC CC 06 45 4E 44 +41 53 4D 00 87 12 B4 CC F4 CE 2A C2 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 +C6 1D B2 43 BE 1D 30 40 E0 CE 00 00 05 4C 4F 32 +48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A C2 +02 00 A2 52 C6 1D ED 3F 1A CB 85 48 49 32 4C 4F +87 12 A0 C8 4A CD B0 C8 E0 CA D2 CE AC CE 2A C2 +1A CD 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D +A2 52 C6 1D BE 40 40 C4 00 00 2E 53 30 4D 5E CC +84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 +3C C4 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C5 +84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D +9C CC 85 42 45 47 49 4E 30 40 A0 C8 70 CD 85 55 +4E 54 49 4C 39 40 40 C4 A2 52 C6 1D 1A 42 C6 1D +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CC 85 41 +47 41 49 4E 39 40 3C C4 EF 3F 7A C6 85 57 48 49 +4C 45 87 12 36 CD 76 C2 2A C2 34 C6 86 52 45 50 +45 41 54 00 87 12 B4 CD 76 CD 2A C2 50 CD 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D +BE 40 54 C4 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 +00 00 30 4D E2 C8 84 4C 4F 4F 50 00 39 40 76 C4 +A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF +1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C4 85 2B 4C 4F 4F 50 +39 40 64 C4 E5 3F 06 CE 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE CE -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CD -34 C2 10 00 34 C2 00 00 3C C5 34 C2 00 00 C8 C9 -5E C5 0A D0 F2 C4 34 C2 C8 1D 44 C2 F2 C2 C8 C9 -FA C2 8A CD 34 C2 CA 1D FA C2 2A C2 AE CB 05 46 -4F 52 54 48 84 12 24 D0 8E D0 C2 D3 CC D0 2E D0 -74 CE 7C CF F8 D1 BE D0 8E D2 A8 D2 D0 CE 34 D3 -00 00 CC D1 D8 CB AC CD 00 00 F0 CE 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D0 C8 D9 30 DA 7C D9 -9A DA 42 D9 BE DA 6E D6 00 00 38 D9 E8 D9 9A D9 -D8 D9 7E D7 00 00 00 00 CC DA 58 D0 5C D0 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D -9D 3F 3C CC 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 1D 38 40 CA 1D 8A 3F 9E C7 04 4F -4E 4C 59 00 82 43 CC 1D 30 4D 20 CF 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D -C4 CE 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CC 86 5B 54 48 45 4E 5D 00 30 4D 14 D1 -86 5B 45 4C 53 45 5D 00 87 12 34 C2 00 00 36 C3 -B0 C3 B6 C7 1C CA 44 C2 28 C5 8E D1 8A C2 8A C2 -52 C7 06 5B 54 48 45 4E 5D 00 EA D0 32 C5 5C D1 -36 C7 40 C3 54 C2 32 C5 30 D1 2A C2 8A C2 8A C2 -52 C7 06 5B 45 4C 53 45 5D 00 EA D0 32 C5 7C D1 -36 C7 40 C3 54 C2 32 C5 2E D1 2A C2 52 C7 04 5B -49 46 5D 00 EA D0 32 C5 30 D1 24 C5 2E D1 36 C7 -52 C7 05 0D 0A 6B 6F 20 14 C7 92 C6 2A CA 24 C5 -30 D1 20 D1 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D1 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C3 B6 C7 0E C8 6C C2 2A C2 B4 D1 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C3 B6 C7 0E C8 -6C C2 64 C3 2A C2 E8 D1 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 CF 06 4D 41 52 4B 45 52 00 -B0 12 C0 CC BA 40 84 12 FC FF BA 40 E6 D1 FE FF -9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D -30 40 0A CD 34 D0 C4 D0 D8 D0 2C D2 3A 4E 82 4A -C8 1D 2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D0 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D2 8A D0 -DE DA 0E CF 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D2 92 42 0C 18 70 D2 EF 3F 60 D2 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 1D 6E D2 92 42 -C6 1D 70 D2 30 4D 74 D2 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F -F0 CF 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C6 24 C6 B2 40 3E D3 3C D3 -B2 40 8A D0 0E 18 B2 40 DE DA 0C 18 30 12 7E D2 -B2 40 8C C6 8A C6 B2 40 46 C7 44 C7 B2 40 A0 C5 -9E C5 B2 40 18 00 0A 18 37 40 1A C2 36 40 BC C2 -35 40 0E C2 34 40 00 C2 39 40 10 00 29 83 89 43 -E0 1D FC 23 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D -30 41 C2 D2 04 57 41 52 4D 00 30 40 3E D3 3D 40 -72 D3 92 C3 30 01 1E 42 08 18 0E 93 11 24 D2 B3 -01 02 02 20 3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 C7 06 0D 1B 5B 37 6D 23 00 14 C7 E2 C4 -52 C7 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 C7 34 C2 80 FF F2 C4 28 C3 D2 C4 52 C7 -0B 62 79 74 65 73 20 66 72 65 65 20 24 C5 8A CB -E2 D0 04 43 4F 4C 44 00 92 B3 CA 05 FD 23 B2 40 -04 A5 20 01 92 D3 30 01 B2 40 88 5A 5C 01 B2 40 -EF 7F 06 02 B2 43 02 02 E2 D2 05 02 B2 40 08 FF -02 02 B2 D0 08 FF 06 02 B2 D0 F0 00 04 02 F2 40 -F0 00 22 03 F2 D0 F0 00 26 03 F2 D0 0F 00 24 03 -F2 40 A5 00 61 01 B2 40 80 00 62 01 82 43 66 01 -39 40 00 01 B2 40 33 00 64 01 D2 43 61 01 92 D2 -9E 01 08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 -B2 D2 B0 01 92 C3 B0 01 F2 D0 10 00 2A 03 F2 C0 -40 00 A1 04 39 40 00 04 29 83 89 43 00 1C FC 23 -39 40 32 00 29 83 B9 40 D4 D3 CE FF FB 23 B2 40 -2C C6 F0 FF B2 40 81 00 C0 05 92 42 02 18 C6 05 -92 42 04 18 C8 05 92 C3 C0 05 92 D3 DA 05 3F 40 -80 1C 31 40 E0 1C 30 12 3A D3 33 3F 38 40 C0 1D -39 48 2A 48 09 5A 1A 52 C4 1D 09 9A 03 24 7E 9A -FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D 30 4D 1C 15 -B0 12 2A C2 B6 C7 0E C8 32 C5 D4 D4 CA C8 28 C5 -BE CB F6 D4 D6 D4 29 4E 39 90 86 12 02 20 2E 53 -0A 3C 39 90 85 12 03 20 1E 4E 02 00 04 3C 39 90 -84 12 01 20 2E 52 1B 17 30 41 3E 40 28 00 B0 12 -BE D4 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C6 +CA 1D F2 C2 2A C2 84 12 7E CE AE CD 56 D1 DE CD +BE CA 32 CD 3A CE 6A D2 64 C6 66 CF 80 CF 8E CD +00 D0 00 00 3C D2 E8 CA 78 CC 00 00 84 12 7E CE +88 D7 EA D7 3C D7 5E D8 02 D7 00 00 32 D4 00 00 +F8 D6 A8 D7 5A D7 98 D7 42 D5 00 00 00 00 3A D8 +AA CE 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D C6 3F +3A 40 0E 00 39 40 CC 1D 38 40 CA 1D B9 3F 82 43 +CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D 86 CE EE CE +F4 CE 04 CF 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CB 09 50 57 52 5F 53 54 41 +54 45 84 12 FC CE D0 CE 70 D8 CC CD 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 CF 92 42 0C 18 +48 CF EF 3F 38 CF 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 1D 46 CF 92 42 C6 1D 48 CF 30 4D 4C CF +08 52 53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 +92 42 C6 1D 0C 18 EC 3F BC CD 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C4 +DE C4 B2 40 0A D0 08 D0 B2 40 D0 CE 0E 18 B2 40 +70 D8 0C 18 30 12 56 CF B2 40 86 C5 84 C5 B2 40 +08 C6 06 C6 B2 40 98 C4 96 C4 B2 40 18 00 0A 18 +37 40 1A C2 36 40 92 C2 35 40 0E C2 34 40 00 C2 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 9A CF +04 57 41 52 4D 00 30 40 0A D0 3D 40 3E D0 92 C3 +30 01 1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E C6 +06 0D 1B 5B 37 6D 23 00 D6 C5 34 C4 1E C6 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 C5 14 C6 30 FF A0 C8 +B8 C2 24 C4 1E C6 0A 62 79 74 65 73 20 66 72 65 +65 00 3C C4 9A CA 82 CD 04 43 4F 4C 44 00 92 B3 +CA 05 FD 23 B2 40 04 A5 20 01 3E D0 92 D3 30 01 +B2 40 88 5A 5C 01 B2 43 06 02 B2 40 EF 7F 02 02 +E2 D2 05 02 B2 43 26 02 B2 D0 08 FF 22 02 F2 D3 +26 03 F2 40 F0 00 22 03 F2 40 A5 00 61 01 B2 40 +80 00 62 01 82 43 66 01 39 40 00 01 B2 40 33 00 +64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 59 14 +18 83 FE 23 19 83 FA 23 B2 D2 B0 01 92 C3 B0 01 +F2 D0 10 00 2A 03 F2 C0 40 00 A1 04 39 40 00 04 +29 83 89 43 00 1C FC 23 39 40 32 00 29 83 B9 40 +9C D0 CE FF FB 23 B2 40 26 C5 F0 FF B2 40 81 00 +C0 05 92 42 02 18 C6 05 92 42 04 18 C8 05 92 C3 +C0 05 92 D3 DA 05 3F 40 80 1C 31 40 E0 1C 30 12 +06 D0 43 3F 88 D0 07 43 4F 4D 50 41 52 45 0C 4E +38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 +1C 83 07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 +30 4D 1E 43 30 4D B2 CB 86 5B 54 48 45 4E 5D 00 +30 4D 88 D1 86 5B 45 4C 53 45 5D 00 87 12 14 C6 +00 00 C6 C2 42 C9 80 C6 24 C9 34 C2 40 C4 FE D1 +44 C2 1E C6 06 5B 54 48 45 4E 5D 00 5E D1 4A C4 +CE D1 F8 C5 D0 C2 58 C2 4A C4 A4 D1 2A C2 44 C2 +1E C6 06 5B 45 4C 53 45 5D 00 5E D1 4A C4 EC D1 +F8 C5 D0 C2 58 C2 4A C4 A2 D1 2A C2 1E C6 04 5B +49 46 5D 00 5E D1 4A C4 A4 D1 3C C4 A2 D1 F8 C5 +1E C6 05 0D 0A 6B 6F 20 D6 C5 8C C5 32 C9 3C C4 +A4 D1 94 D1 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 +30 4D 14 D2 89 5B 44 45 46 49 4E 45 44 5D 87 12 +42 C9 80 C6 EE C6 6A C2 2A C2 24 D2 8B 5B 55 4E +44 45 46 49 4E 45 44 5D 87 12 42 C9 80 C6 EE C6 +6A C2 00 C3 2A C2 58 D2 3D 41 B2 4E 0E 18 A2 4E +0C 18 3E 4F 30 40 56 CF 48 CE 06 4D 41 52 4B 45 +52 00 B0 12 B8 CB BA 40 84 12 FC FF BA 40 56 D2 +FE FF 9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 +C6 1D 30 40 00 CC 1C 15 B0 12 2A C2 80 C6 EE C6 +4A C4 AC D2 AA C7 40 C4 CE CA C6 D2 AE D2 39 4E +39 80 86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 +19 53 01 24 2E 82 1B 17 30 41 3E 40 28 00 B0 12 +96 D2 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D 92 53 C4 1D B0 12 2A C2 -B6 C7 CA C8 28 C5 34 D5 2A D5 21 53 3E 90 10 00 -83 2D E1 2B 36 D5 B2 41 C4 1D DD 3F 87 12 B0 C3 -9C D4 44 D5 0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E -3E 4F 7A 90 23 00 2D 20 92 53 C4 1D B0 12 BE D4 -0E 93 03 20 3C 40 00 03 21 3C 1E 93 03 20 3C 40 -10 03 1C 3C 2E 93 03 20 3C 40 20 03 17 3C 2E 92 -03 20 3C 40 20 02 12 3C 3E 92 03 20 3C 40 30 02 -0D 3C 3E 93 03 20 3C 40 30 03 08 3C 3C 40 30 00 -19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 -30 4D 7A 90 26 00 07 20 3C 40 10 02 92 53 C4 1D -B0 12 BE D4 ED 3F 7A 90 40 00 16 20 3C 40 20 00 -92 53 C4 1D B0 12 12 D5 0C 20 3C 50 10 00 3E 40 -2B 00 B0 12 12 D5 92 92 C0 1D C4 1D 02 24 92 53 -C4 1D 8E 10 0C 5E DA 3F B0 12 12 D5 FA 23 3C 50 -10 00 B0 12 FA D4 EF 3F 0C 43 1B 42 C6 1D A2 53 -C6 1D 87 12 B0 C3 9C D4 1A D6 FE 90 26 00 00 00 -3E 40 20 00 03 20 3C 50 82 00 C8 3F B0 12 12 D5 -E1 23 3C 50 80 00 B0 12 FA D4 DC 3F 1C C6 04 52 -45 54 49 00 87 12 34 C2 00 13 C8 C9 2A C2 34 C2 -2C 00 3C D5 12 D6 58 D6 2E 4E 0E DC 09 4B A4 3F -3E CE 03 4D 4F 56 84 12 4E D6 00 40 62 D6 05 4D -4F 56 2E 42 84 12 4E D6 40 40 00 00 03 41 44 44 -84 12 4E D6 00 50 7C D6 05 41 44 44 2E 42 84 12 -4E D6 40 50 88 D6 04 41 44 44 43 00 84 12 4E D6 -00 60 96 D6 06 41 44 44 43 2E 42 00 84 12 4E D6 -40 60 3E D6 04 53 55 42 43 00 84 12 4E D6 00 70 -B4 D6 06 53 55 42 43 2E 42 00 84 12 4E D6 40 70 -C2 D6 03 53 55 42 84 12 4E D6 00 80 D2 D6 05 53 -55 42 2E 42 84 12 4E D6 40 80 20 CE 03 43 4D 50 -84 12 4E D6 00 90 EC D6 05 43 4D 50 2E 42 84 12 -4E D6 40 90 0E CE 04 44 41 44 44 00 84 12 4E D6 -00 A0 06 D7 06 44 41 44 44 2E 42 00 84 12 4E D6 -40 A0 F8 D6 03 42 49 54 84 12 4E D6 00 B0 24 D7 -05 42 49 54 2E 42 84 12 4E D6 40 B0 30 D7 03 42 -49 43 84 12 4E D6 00 C0 3E D7 05 42 49 43 2E 42 -84 12 4E D6 40 C0 4A D7 03 42 49 53 84 12 4E D6 -00 D0 58 D7 05 42 49 53 2E 42 84 12 4E D6 40 D0 -00 00 03 58 4F 52 84 12 4E D6 00 E0 72 D7 05 58 -4F 52 2E 42 84 12 4E D6 40 E0 A4 D6 03 41 4E 44 -84 12 4E D6 00 F0 8C D7 05 41 4E 44 2E 42 84 12 -4E D6 40 F0 B0 C3 3C D5 AA D7 0A 4C 3C F0 70 00 -8A 10 3A F0 0F 00 0C DA 4F 3F DE D6 03 52 52 43 -84 12 A4 D7 00 10 BC D7 05 52 52 43 2E 42 84 12 -A4 D7 40 10 C8 D7 04 53 57 50 42 00 84 12 A4 D7 -80 10 D6 D7 03 52 52 41 84 12 A4 D7 00 11 E4 D7 -05 52 52 41 2E 42 84 12 A4 D7 40 11 F0 D7 03 53 -58 54 84 12 A4 D7 80 11 00 00 04 50 55 53 48 00 -84 12 A4 D7 00 12 0A D8 06 50 55 53 48 2E 42 00 -84 12 A4 D7 40 12 64 D7 04 43 41 4C 4C 00 84 12 -A4 D7 80 12 1A 53 0E 4A 87 12 E2 C4 52 C7 0D 6F -75 74 20 6F 66 20 62 6F 75 6E 64 73 3A CB B0 C3 -9C D4 54 D8 92 53 C4 1D 3E 40 2C 00 B0 12 2A C2 -B6 C7 CA C8 28 C5 BE CB 08 D6 6C D8 0A 4E 3E 4F -1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 -0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 -D1 2F 8A 10 5A 06 8F 3F FE D7 04 52 52 43 4D 00 -84 12 4E D8 50 00 9A D8 04 52 52 41 4D 00 84 12 -4E D8 50 01 A8 D8 04 52 4C 41 4D 00 84 12 4E D8 -50 02 B6 D8 04 52 52 55 4D 00 84 12 4E D8 50 03 -18 D8 05 50 55 53 48 4D 84 12 4E D8 00 15 D2 D8 -04 50 4F 50 4D 00 84 12 4E D8 00 17 85 12 00 3C -C4 D8 03 53 3E 3D 85 12 00 38 F2 D8 02 53 3C 00 -85 12 00 34 E0 D8 03 30 3E 3D 85 12 00 30 06 D9 +80 C6 AA C7 40 C4 04 D3 FA D2 21 53 3E 90 10 00 +7D 2D E1 2B 06 D3 B2 41 C4 1D DD 3F 87 12 42 C9 +74 C6 14 D3 0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E +3E 4F 7A 90 23 00 27 20 92 53 C4 1D B0 12 96 D2 +3C 40 00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 +3C 40 20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 +3C 40 30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 +3C 40 30 00 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 +3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 +92 53 C4 1D B0 12 96 D2 ED 3F 7A 90 40 00 16 20 +3C 40 20 00 92 53 C4 1D B0 12 E2 D2 0C 20 3C 50 +10 00 3E 40 2B 00 B0 12 E2 D2 92 92 C0 1D C4 1D +02 24 92 53 C4 1D 8E 10 0C 5E DA 3F B0 12 E2 D2 +FA 23 3C 50 10 00 B0 12 CA D2 EF 3F 0C 43 1B 42 +C6 1D A2 53 C6 1D 87 12 42 C9 74 C6 DE D3 FE 90 +26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F +B0 12 E2 D2 E1 23 3C 50 80 00 B0 12 CA D2 DC 3F +D6 C4 04 52 45 54 49 00 87 12 14 C6 00 13 B0 C8 +2A C2 14 C6 2C 00 0C D3 D6 D3 1C D4 09 4B 2E 4E +0E DC A4 3F FC CC 03 4D 4F 56 84 12 12 D4 00 40 +26 D4 05 4D 4F 56 2E 42 84 12 12 D4 40 40 00 00 +03 41 44 44 84 12 12 D4 00 50 40 D4 05 41 44 44 +2E 42 84 12 12 D4 40 50 4C D4 04 41 44 44 43 00 +84 12 12 D4 00 60 5A D4 06 41 44 44 43 2E 42 00 +84 12 12 D4 40 60 02 D4 04 53 55 42 43 00 84 12 +12 D4 00 70 78 D4 06 53 55 42 43 2E 42 00 84 12 +12 D4 40 70 86 D4 03 53 55 42 84 12 12 D4 00 80 +96 D4 05 53 55 42 2E 42 84 12 12 D4 40 80 DE CC +03 43 4D 50 84 12 12 D4 00 90 B0 D4 05 43 4D 50 +2E 42 84 12 12 D4 40 90 CC CC 04 44 41 44 44 00 +84 12 12 D4 00 A0 CA D4 06 44 41 44 44 2E 42 00 +84 12 12 D4 40 A0 BC D4 03 42 49 54 84 12 12 D4 +00 B0 E8 D4 05 42 49 54 2E 42 84 12 12 D4 40 B0 +F4 D4 03 42 49 43 84 12 12 D4 00 C0 02 D5 05 42 +49 43 2E 42 84 12 12 D4 40 C0 0E D5 03 42 49 53 +84 12 12 D4 00 D0 1C D5 05 42 49 53 2E 42 84 12 +12 D4 40 D0 00 00 03 58 4F 52 84 12 12 D4 00 E0 +36 D5 05 58 4F 52 2E 42 84 12 12 D4 40 E0 68 D4 +03 41 4E 44 84 12 12 D4 00 F0 50 D5 05 41 4E 44 +2E 42 84 12 12 D4 40 F0 42 C9 0C D3 6E D5 0A 4C +3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F A2 D4 +03 52 52 43 84 12 68 D5 00 10 80 D5 05 52 52 43 +2E 42 84 12 68 D5 40 10 8C D5 04 53 57 50 42 00 +84 12 68 D5 80 10 9A D5 03 52 52 41 84 12 68 D5 +00 11 A8 D5 05 52 52 41 2E 42 84 12 68 D5 40 11 +B4 D5 03 53 58 54 84 12 68 D5 80 11 00 00 04 50 +55 53 48 00 84 12 68 D5 00 12 CE D5 06 50 55 53 +48 2E 42 00 84 12 68 D5 40 12 28 D5 04 43 41 4C +4C 00 84 12 68 D5 80 12 1A 53 0E 4A 87 12 34 C4 +1E C6 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 +4C CA 42 C9 74 C6 18 D6 92 53 C4 1D 3E 40 2C 00 +B0 12 2A C2 80 C6 AA C7 40 C4 CE CA CC D3 30 D6 +0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C +59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E +94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F C2 D5 04 52 +52 43 4D 00 84 12 12 D6 50 00 5E D6 04 52 52 41 +4D 00 84 12 12 D6 50 01 6C D6 04 52 4C 41 4D 00 +84 12 12 D6 50 02 7A D6 04 52 52 55 4D 00 84 12 +12 D6 50 03 DC D5 05 50 55 53 48 4D 84 12 12 D6 +00 15 96 D6 04 50 4F 50 4D 00 84 12 12 D6 00 17 +88 D6 03 53 3E 3D 85 12 00 38 B2 D6 02 53 3C 00 +85 12 00 34 A4 D6 03 30 3E 3D 85 12 00 30 C6 D6 02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 -00 2C 1A D9 03 55 3E 3D 85 12 00 28 10 D9 03 30 -3C 3E 85 12 00 24 2E D9 02 30 3D 00 85 12 00 20 +00 2C DA D6 03 55 3E 3D 85 12 00 28 D0 D6 03 30 +3C 3E 85 12 00 24 EE D6 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 -C6 1D 0E 4A 30 4D 24 D9 04 54 48 45 4E 00 1A 42 +C6 1D 0E 4A 30 4D E4 D6 04 54 48 45 4E 00 1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 -00 02 61 2F 88 DA 00 00 30 4D 14 D7 04 45 4C 53 +00 02 63 2F 88 DA 00 00 30 4D D8 D4 04 45 4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D -2F 83 8F 4A 00 00 E3 3F 58 D9 05 55 4E 54 49 4C +2F 83 8F 4A 00 00 E3 3F 18 D7 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 -3A 90 00 FE 40 3B 3A F0 FF 03 08 DA 89 48 00 00 -A2 53 C6 1D 30 4D 98 D7 05 41 47 41 49 4E 87 12 -EC D8 A0 D9 2A C2 00 00 05 57 48 49 4C 45 87 12 -46 D9 78 C2 2A C2 FC D8 06 52 45 50 45 41 54 00 -87 12 EC D8 A0 D9 5E D9 2A C2 FC D9 3D 41 2E 4E -08 4E 3E 4F 2A 48 0A 93 88 43 00 00 CA 23 98 42 -C6 1D 00 00 30 4D 28 D8 03 42 57 31 84 12 FA D9 -E0 1D 18 DA 03 42 57 32 84 12 FA D9 E2 1D 24 DA -03 42 57 33 84 12 FA D9 E4 1D 3C DA 3D 41 1A 42 -C6 1D 2E 4E 28 4E 08 93 8E 43 00 00 8B 23 BA 4F -00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 -03 46 57 31 84 12 3A DA E6 1D 60 DA 03 46 57 32 -84 12 3A DA E8 1D 6C DA 03 46 57 33 84 12 3A DA -EA 1D 3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 -02 24 3E E0 00 08 30 4D 78 DA 04 47 4F 54 4F 00 -87 12 EC D8 B0 CB BE C9 2A C2 00 00 05 3F 47 4F -54 4F 87 12 82 DA B0 CB BE C9 2A C2 00 00 03 4A -4D 50 87 12 B0 CB CE D9 2A C2 AC DA 04 3F 4A 4D -50 00 87 12 82 DA B0 CB 78 C2 A0 D9 2A C2 +3A 90 00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 +A2 53 C6 1D 30 4D 5C D5 05 41 47 41 49 4E 0A 4E +38 40 00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 +06 D7 76 C2 2A C2 BC D6 06 52 45 50 45 41 54 00 +87 12 8E D7 1E D7 2A C2 BA D7 3D 41 08 4E 3E 4F +2A 48 B2 92 C4 1D CD 2F 98 42 C6 1D 00 00 30 4D +EC D5 03 42 57 31 84 12 B8 D7 00 00 D2 D7 03 42 +57 32 84 12 B8 D7 00 00 DE D7 03 42 57 33 84 12 +B8 D7 00 00 F6 D7 3D 41 1A 42 C6 1D 28 4E B2 92 +C4 1D 90 2B BA 4F 00 00 A2 53 C6 1D 8E 4A 00 00 +3E 4F 30 4D 00 00 03 46 57 31 84 12 F4 D7 00 00 +16 D8 03 46 57 32 84 12 F4 D7 00 00 22 D8 03 46 +57 33 84 12 F4 D7 00 00 00 00 05 3F 47 4F 54 4F +3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 +3E E0 00 08 87 12 C0 CA DA C8 2A C2 2E D8 04 47 +4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -D4 D3 +9C D0 q diff --git a/binaries/MSP_EXP430FR5739_1MHz.txt b/binaries/MSP_EXP430FR5739_1MHz.txt index 2f3d8a5..ff7c6ca 100644 --- a/binaries/MSP_EXP430FR5739_1MHz.txt +++ b/binaries/MSP_EXP430FR5739_1MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 08 00 00 D6 E8 03 05 00 18 00 DA DA 8A D0 -2C 01 7B B0 FC C5 0E C6 +10 00 08 00 00 D6 E8 03 05 00 18 00 6C D8 D0 CE +2D 01 6B B0 B6 C4 C8 C4 @C200 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C2 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C2 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C2 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C2 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C2 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C2 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C2 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C2 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C2 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C3 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C2 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C3 02 31 2D 00 -1E 83 30 4D D8 C2 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C3 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C3 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C3 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C2 01 3E 3E 8F F4 3B EB 37 0E C3 02 42 4C 00 -85 12 20 00 AC C3 04 42 41 53 45 00 85 12 DC 1D -C8 C2 05 53 54 41 54 45 85 12 BE 1D 96 C3 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 C3 06 55 4D 2F -4D 4F 44 00 30 12 62 C2 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C2 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C3 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 C3 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 C4 -02 23 53 00 87 12 32 C4 6A C4 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C4 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C3 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C3 -02 44 2E 00 87 12 D2 C3 44 C2 B0 C2 4C C3 64 C4 -BC C2 A2 C4 7E C4 14 C7 DC C6 2A C2 DC C3 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C2 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C4 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 C2 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A C4 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C4 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C4 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C3 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C5 03 4B 45 59 30 40 A0 C5 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 FC C5 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 0E C6 30 4D 00 C5 -06 41 43 43 45 50 54 00 3C 40 6A C6 3B 40 34 C6 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C6 92 B3 DC 05 05 24 18 42 CC 05 38 90 -0A 00 04 20 21 53 39 40 22 C6 4D 15 A2 B3 DC 05 -FD 27 B2 40 11 00 CE 05 E2 C2 03 02 30 41 B2 40 -13 00 CE 05 E2 D2 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C6 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 CC 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 DC 05 FD 27 82 48 CE 05 30 4D 60 C6 -2D 83 92 B3 DC 05 E4 23 FC 27 82 93 DE 1D 02 24 -92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C4 04 45 4D 49 54 00 30 40 8C C6 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 1D 00 00 AF 4F 02 00 8F 3F 82 C6 04 45 43 48 -4F 00 B2 40 82 48 58 C6 82 43 DE 1D 30 4D E0 C4 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C6 92 43 -DE 1D 30 4D 9C C4 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C6 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C6 EF 3F 00 C7 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C5 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C7 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C7 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C5 02 43 -52 00 30 40 46 C7 87 12 52 C7 02 0D 0A 00 14 C7 -2A C2 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C6 82 53 22 00 82 43 B4 1D -87 12 34 C2 52 C7 C8 C9 34 C2 22 00 B6 C7 80 C7 -3D 41 B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D -3E 4F 92 B3 C6 1D A2 63 C6 1D 30 4D C0 C6 82 2E -22 00 87 12 6C C7 34 C2 14 C7 C8 C9 2A C2 00 00 -04 57 4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C2 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C2 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C2 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C2 02 3E 52 00 0E 12 3E 4F 30 4D 70 C2 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C2 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C2 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C2 +01 21 BE 4F 00 00 3E 4F 30 4D CC C2 02 30 3D 00 +1E 83 0E 7E 30 4D FC C2 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C3 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C2 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 C3 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 C3 02 23 53 00 87 12 88 C3 C0 C3 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C3 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C2 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C3 34 C2 86 C2 D4 C2 BA C3 +92 C2 F8 C3 D4 C3 D6 C5 42 C9 82 C5 2A C2 22 C3 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C3 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C4 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 C4 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 C4 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C2 03 02 30 41 B2 40 13 00 CE 05 E2 D2 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C4 +B0 12 B6 C4 12 D2 0A 18 F9 3F F0 C2 06 41 43 43 +45 50 54 00 3C 40 64 C5 3B 40 2E C5 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C5 +92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 CC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 +FD 27 82 48 CE 05 30 4D 5A C5 2D 83 92 B3 DC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C2 04 45 4D 49 +54 00 30 40 86 C5 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C C5 04 45 43 48 4F 00 B2 40 82 48 +52 C5 82 43 DE 1D 30 4D 32 C4 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C5 92 43 DE 1D 30 4D 20 C4 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C5 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C5 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C3 +02 43 52 00 30 40 08 C6 87 12 1E C6 02 0D 0A 00 +D6 C5 2A C2 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C3 82 53 22 00 82 43 B4 1D 87 12 14 C6 +1E C6 B0 C8 14 C6 22 00 80 C6 4C C6 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA C5 82 2E 22 00 87 12 38 C6 14 C6 D6 C5 +B0 C8 2A C2 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E @@ -104,302 +86,281 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C2 34 40 00 C2 30 4D A2 C3 07 3E +00 00 35 40 0E C2 34 40 00 C2 30 4D 82 C2 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 -2D 15 3D 40 10 C9 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 C9 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C3 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C6 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C3 01 2C 1A 42 C6 1D A2 53 C6 1D -8A 4E 00 00 3E 4F 30 4D C6 C9 87 4C 49 54 45 52 -41 4C 82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D -BA 40 34 C2 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C7 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F -C2 1D 3E 4F 82 43 C4 1D 30 4D 87 12 2A CA B0 C3 -B6 C7 44 CA 3D 40 4C CA E2 22 5D 3E 4E CA 0A 4E -3E 4F 3D 40 64 CA 39 27 3D 40 3E CA 1A E2 BE 1D -B3 27 AD 23 66 CA 3E 4F 3D 40 3E CA BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CD -CD 3F B6 C9 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 1D 3C 49 3B 49 3A 49 3D 15 B0 12 2A C2 3A CA -A2 CA B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 -30 4D 6C C3 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 C7 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C7 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C3 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C4 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 C2 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC C4 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 C5 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE C8 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 C6 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C6 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 C9 42 C9 80 C6 50 C9 +3D 40 58 C9 CC 22 82 3E 5A C9 0A 4E 3E 4F 3D 40 +70 C9 23 27 3D 40 4A C9 1A E2 BE 1D A1 27 B5 23 +72 C9 3E 4F 3D 40 4A C9 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CC CB 3F D2 C8 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C2 46 C9 AE C9 B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 C3 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A C2 -42 C7 92 C6 DC C6 3A CA DE C2 70 C3 52 C7 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CB 34 C2 -30 FF F2 C4 8A C3 52 C7 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CB 24 C5 D0 CA C0 C5 05 41 42 4F -52 54 3F 40 80 1C D1 3F 0C CB 86 41 42 4F 52 54 -22 00 87 12 6C C7 34 C2 2E CB C8 C9 2A C2 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D2 B0 12 -FC C5 92 C3 DC 05 38 40 AA 0A 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 DC 05 F2 23 87 12 -6A D2 34 C2 DE 1D F2 C2 B2 C6 52 C7 04 1B 5B 37 -6D 00 14 C7 54 C2 28 C5 8A CB 42 C7 52 C7 05 6C -69 6E 65 3A 14 C7 40 C3 D2 C4 14 C7 52 C7 04 1B -5B 30 6D 00 14 C7 12 CB 00 00 83 5B 27 5D 87 12 -B0 CB 34 C2 34 C2 C8 C9 C8 C9 2A C2 08 C8 01 27 -87 12 B0 C3 B6 C7 0E C8 28 C5 BE CB 2A C2 6E CA -CE C3 81 5C 92 42 C0 1D C4 1D 30 4D 9A CB 81 5B -82 43 BE 1D 30 4D C2 CB 01 5D B2 43 BE 1D 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C5 82 49 53 00 87 12 -C8 C3 F2 C2 28 C5 02 CC 9E CB 34 C2 E0 CB C8 C9 -2A C2 B0 CB E0 CB 2A C2 EA CB 09 49 4D 4D 45 44 +04 C6 8C C5 42 C9 82 C5 46 C9 A4 C2 0C C3 1E C6 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CA +14 C6 30 FF A0 C8 26 C3 1E C6 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CA 3C C4 E0 C9 C2 C8 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E CA 86 41 42 4F +52 54 22 00 87 12 38 C6 14 C6 40 CA B0 C8 2A C2 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 CF +B0 12 B6 C4 92 C3 DC 05 38 40 AA 0A 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 DC 05 F3 23 87 12 +42 CF 14 C6 DE 1D EA C2 AC C5 1E C6 04 1B 5B 37 +6D 00 D6 C5 58 C2 40 C4 9A CA 04 C6 1E C6 05 6C +69 6E 65 3A D6 C5 D0 C2 24 C4 D6 C5 1E C6 04 1B +5B 30 6D 00 D6 C5 24 CA 00 00 83 5B 27 5D 87 12 +C0 CA 14 C6 14 C6 B0 C8 B0 C8 2A C2 E8 C6 01 27 +87 12 42 C9 80 C6 EE C6 40 C4 CE CA 2A C2 7A C9 +32 C3 81 5C 92 42 C0 1D C4 1D 30 4D AA CA 81 5B +82 43 BE 1D 30 4D D2 CA 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A C8 82 49 53 00 87 12 +BE C9 EA C2 40 C4 12 CB AE CA 14 C6 F0 CA B0 C8 +2A C2 C0 CA F0 CA 2A C2 FA CA 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D -68 C7 87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 -BA 1D 00 00 A2 53 C6 1D 30 4D B4 CA 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C3 B6 C7 0E C8 54 C2 -28 C5 BE CB 70 C3 28 C5 66 CC 34 C2 34 C2 C8 C9 -C8 C9 34 C2 C8 C9 C8 C9 2A C2 CE CB 81 3B 82 93 -BE 1D A8 27 87 12 34 C2 2A C2 C8 C9 04 CD D0 CB -2A C2 6C CC 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CC BA 40 87 12 FC FF A2 83 C6 1D B2 43 -BE 1D 82 4F BC 1D 30 4D 84 CC 01 3A 30 12 A4 CC -87 12 92 C7 B0 C3 B6 C7 CA CC 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CC 02 00 -82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A -C6 1D 30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 -B8 1D A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C7 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CB B0 C7 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CC BA 40 86 12 FC FF E4 3F 16 CA 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CC BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CD 06 43 52 45 41 54 -45 00 B0 12 C0 CC BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CA 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CD 05 44 -45 46 45 52 30 12 12 CD 8B 3F 6E C8 05 3E 42 4F -44 59 2E 52 30 4D 6A CD 04 43 4F 44 45 00 B0 12 -C0 CC 2A 82 82 4A C6 1D 87 12 B2 CC 94 D0 66 D0 -2A C2 B8 CD 07 43 4F 44 45 4E 4E 4D 87 12 8C CC -D0 CB C2 CD 2A C2 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D0 04 CD 2A C2 1A CB 03 41 53 4D 92 42 -DA 1D EC 1D B2 40 6A D0 DA 1D D9 3F E8 CD 06 45 -4E 44 41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 -A2 53 C6 1D B2 43 BE 1D 30 40 AE D0 00 00 05 4C -4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 -2A C2 02 00 A2 52 C6 1D ED 3F 0A CC 85 48 49 32 -4C 4F 87 12 F2 C4 8C CE C8 C9 D0 CB 94 D0 66 D0 -2A C2 5C CE 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 1D A2 52 C6 1D BE 40 28 C5 00 00 2E 53 30 4D -9E CD 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D -BA 40 24 C5 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C7 84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F -30 4D D4 CD 85 42 45 47 49 4E 30 40 F2 C4 B2 CE -85 55 4E 54 49 4C 39 40 28 C5 A2 52 C6 1D 1A 42 -C6 1D 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CD -85 41 47 41 49 4E 39 40 24 C5 EF 3F 34 CD 85 57 -48 49 4C 45 87 12 78 CE 78 C2 2A C2 22 CC 86 52 -45 50 45 41 54 00 87 12 F6 CE B8 CE 2A C2 92 CE -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 -C6 1D BE 40 3C C5 FE FF A2 53 00 1C 1A 42 00 1C -8A 43 00 00 30 4D DA C9 84 4C 4F 4F 50 00 39 40 -5E C5 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E -FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C5 85 2B 4C 4F -4F 50 39 40 4C C5 E5 3F 48 CF 85 4C 45 41 56 45 -1A 42 C6 1D BA 40 6E C5 00 00 BA 40 24 C5 02 00 -B2 50 06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C -89 4A 00 00 30 4D 8A CF 04 4D 4F 56 45 00 0A 4E +C4 C9 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 C9 +80 C6 EE C6 58 C2 40 C4 CE CA 0C C3 40 C4 5C CB +14 C6 14 C6 B0 C8 B0 C8 14 C6 B0 C8 B0 C8 2A C2 +DE CA 81 3B 82 93 BE 1D B5 27 87 12 14 C6 2A C2 +B0 C8 FA CB E0 CA 2A C2 62 CB 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CB 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A CB 01 3A 30 12 A0 CB 92 B3 C6 1D A2 63 C6 1D +87 12 42 C9 80 C6 C8 CB 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C6 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CA 90 C9 05 44 45 46 45 52 +B0 12 B8 CB BA 40 30 40 FC FF BA 40 AE CB FE FF +E3 3F 1E C9 06 43 52 45 41 54 45 00 B0 12 B8 CB +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CC 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C7 05 3E 42 4F 44 59 2E 52 +30 4D 44 CC 04 43 4F 44 45 00 B0 12 B8 CB A2 82 +C6 1D 87 12 D2 CE AC CE 2A C2 84 CC 07 43 4F 44 +45 4E 4E 4D B0 12 86 CB F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 CE FA CB 2A C2 2C CA 03 41 +53 4D B2 40 B0 CE DA 1D E0 3F AC CC 06 45 4E 44 +41 53 4D 00 87 12 B4 CC F4 CE 2A C2 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 +C6 1D B2 43 BE 1D 30 40 E0 CE 00 00 05 4C 4F 32 +48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A C2 +02 00 A2 52 C6 1D ED 3F 1A CB 85 48 49 32 4C 4F +87 12 A0 C8 4A CD B0 C8 E0 CA D2 CE AC CE 2A C2 +1A CD 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D +A2 52 C6 1D BE 40 40 C4 00 00 2E 53 30 4D 5E CC +84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 +3C C4 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C5 +84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D +9C CC 85 42 45 47 49 4E 30 40 A0 C8 70 CD 85 55 +4E 54 49 4C 39 40 40 C4 A2 52 C6 1D 1A 42 C6 1D +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CC 85 41 +47 41 49 4E 39 40 3C C4 EF 3F 7A C6 85 57 48 49 +4C 45 87 12 36 CD 76 C2 2A C2 34 C6 86 52 45 50 +45 41 54 00 87 12 B4 CD 76 CD 2A C2 50 CD 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D +BE 40 54 C4 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 +00 00 30 4D E2 C8 84 4C 4F 4F 50 00 39 40 76 C4 +A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF +1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C4 85 2B 4C 4F 4F 50 +39 40 64 C4 E5 3F 06 CE 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE CE -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CD -34 C2 10 00 34 C2 00 00 3C C5 34 C2 00 00 C8 C9 -5E C5 0A D0 F2 C4 34 C2 C8 1D 44 C2 F2 C2 C8 C9 -FA C2 8A CD 34 C2 CA 1D FA C2 2A C2 AE CB 05 46 -4F 52 54 48 84 12 24 D0 8E D0 C2 D3 CC D0 2E D0 -74 CE 7C CF F8 D1 BE D0 8E D2 A8 D2 D0 CE 34 D3 -00 00 CC D1 D8 CB AC CD 00 00 F0 CE 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D0 C4 D9 2C DA 78 D9 -96 DA 3E D9 BA DA 6A D6 00 00 34 D9 E4 D9 96 D9 -D4 D9 7A D7 00 00 00 00 C8 DA 58 D0 5C D0 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D -9D 3F 3C CC 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 1D 38 40 CA 1D 8A 3F 9E C7 04 4F -4E 4C 59 00 82 43 CC 1D 30 4D 20 CF 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D -C4 CE 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C6 +CA 1D F2 C2 2A C2 84 12 7E CE AE CD 52 D1 DE CD +BE CA 32 CD 3A CE 66 D2 64 C6 66 CF 80 CF 8E CD +00 D0 00 00 38 D2 E8 CA 78 CC 00 00 84 12 7E CE +84 D7 E6 D7 38 D7 5A D8 FE D6 00 00 2E D4 00 00 +F4 D6 A4 D7 56 D7 94 D7 3E D5 00 00 00 00 36 D8 +AA CE 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D C6 3F +3A 40 0E 00 39 40 CC 1D 38 40 CA 1D B9 3F 82 43 +CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D 86 CE EE CE +F4 CE 04 CF 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CB 09 50 57 52 5F 53 54 41 +54 45 84 12 FC CE D0 CE 6C D8 CC CD 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 CF 92 42 0C 18 +48 CF EF 3F 38 CF 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 1D 46 CF 92 42 C6 1D 48 CF 30 4D 4C CF +08 52 53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 +92 42 C6 1D 0C 18 EC 3F BC CD 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C4 +DE C4 B2 40 0A D0 08 D0 B2 40 D0 CE 0E 18 B2 40 +6C D8 0C 18 30 12 56 CF B2 40 86 C5 84 C5 B2 40 +08 C6 06 C6 B2 40 98 C4 96 C4 B2 40 18 00 0A 18 +37 40 1A C2 36 40 92 C2 35 40 0E C2 34 40 00 C2 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 9A CF +04 57 41 52 4D 00 30 40 0A D0 3D 40 3E D0 92 C3 +30 01 1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E C6 +06 0D 1B 5B 37 6D 23 00 D6 C5 34 C4 1E C6 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 C5 14 C6 30 FF A0 C8 +B8 C2 24 C4 1E C6 0A 62 79 74 65 73 20 66 72 65 +65 00 3C C4 9A CA 82 CD 04 43 4F 4C 44 00 92 B3 +CA 05 FD 23 B2 40 04 A5 20 01 3E D0 92 D3 30 01 +B2 40 88 5A 5C 01 B2 43 06 02 B2 40 EF 7F 02 02 +E2 D2 05 02 B2 43 26 02 B2 D0 08 FF 22 02 F2 D3 +26 03 F2 40 F0 00 22 03 F2 40 A5 00 61 01 B2 40 +33 00 66 01 39 40 10 00 B2 40 33 00 64 01 D2 43 +61 01 92 D2 9E 01 08 18 38 40 59 14 18 83 FE 23 +19 83 FA 23 B2 D2 B0 01 92 C3 B0 01 F2 D0 10 00 +2A 03 F2 C0 40 00 A1 04 39 40 00 04 29 83 89 43 +00 1C FC 23 39 40 32 00 29 83 B9 40 9C D0 CE FF +FB 23 B2 40 26 C5 F0 FF B2 40 81 00 C0 05 92 42 +02 18 C6 05 92 42 04 18 C8 05 92 C3 C0 05 92 D3 +DA 05 3F 40 80 1C 31 40 E0 1C 30 12 06 D0 45 3F +88 D0 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CC 86 5B 54 48 45 4E 5D 00 30 4D 14 D1 -86 5B 45 4C 53 45 5D 00 87 12 34 C2 00 00 36 C3 -B0 C3 B6 C7 1C CA 44 C2 28 C5 8E D1 8A C2 8A C2 -52 C7 06 5B 54 48 45 4E 5D 00 EA D0 32 C5 5C D1 -36 C7 40 C3 54 C2 32 C5 30 D1 2A C2 8A C2 8A C2 -52 C7 06 5B 45 4C 53 45 5D 00 EA D0 32 C5 7C D1 -36 C7 40 C3 54 C2 32 C5 2E D1 2A C2 52 C7 04 5B -49 46 5D 00 EA D0 32 C5 30 D1 24 C5 2E D1 36 C7 -52 C7 05 0D 0A 6B 6F 20 14 C7 92 C6 2A CA 24 C5 -30 D1 20 D1 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D1 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C3 B6 C7 0E C8 6C C2 2A C2 B4 D1 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C3 B6 C7 0E C8 -6C C2 64 C3 2A C2 E8 D1 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 CF 06 4D 41 52 4B 45 52 00 -B0 12 C0 CC BA 40 84 12 FC FF BA 40 E6 D1 FE FF -9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D -30 40 0A CD 34 D0 C4 D0 D8 D0 2C D2 3A 4E 82 4A -C8 1D 2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D0 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D2 8A D0 -DA DA 0E CF 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D2 92 42 0C 18 70 D2 EF 3F 60 D2 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 1D 6E D2 92 42 -C6 1D 70 D2 30 4D 74 D2 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F -F0 CF 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C6 24 C6 B2 40 3E D3 3C D3 -B2 40 8A D0 0E 18 B2 40 DA DA 0C 18 30 12 7E D2 -B2 40 8C C6 8A C6 B2 40 46 C7 44 C7 B2 40 A0 C5 -9E C5 B2 40 18 00 0A 18 37 40 1A C2 36 40 BC C2 -35 40 0E C2 34 40 00 C2 39 40 10 00 29 83 89 43 -E0 1D FC 23 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D -30 41 C2 D2 04 57 41 52 4D 00 30 40 3E D3 3D 40 -72 D3 92 C3 30 01 1E 42 08 18 0E 93 11 24 D2 B3 -01 02 02 20 3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 C7 06 0D 1B 5B 37 6D 23 00 14 C7 E2 C4 -52 C7 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 C7 34 C2 80 FF F2 C4 28 C3 D2 C4 52 C7 -0B 62 79 74 65 73 20 66 72 65 65 20 24 C5 8A CB -E2 D0 04 43 4F 4C 44 00 92 B3 CA 05 FD 23 B2 40 -04 A5 20 01 92 D3 30 01 B2 40 88 5A 5C 01 B2 40 -EF 7F 06 02 B2 43 02 02 E2 D2 05 02 B2 40 08 FF -02 02 B2 D0 08 FF 06 02 B2 D0 F0 00 04 02 F2 40 -F0 00 22 03 F2 D0 F0 00 26 03 F2 D0 0F 00 24 03 -F2 40 A5 00 61 01 B2 40 33 00 66 01 39 40 10 00 -B2 40 33 00 64 01 D2 43 61 01 92 D2 9E 01 08 18 -38 40 59 14 18 83 FE 23 19 83 FA 23 B2 D2 B0 01 -92 C3 B0 01 F2 D0 10 00 2A 03 F2 C0 40 00 A1 04 -39 40 00 04 29 83 89 43 00 1C FC 23 39 40 32 00 -29 83 B9 40 D4 D3 CE FF FB 23 B2 40 2C C6 F0 FF -B2 40 81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 -C8 05 92 C3 C0 05 92 D3 DA 05 3F 40 80 1C 31 40 -E0 1C 30 12 3A D3 35 3F 38 40 C0 1D 39 48 2A 48 -09 5A 1A 52 C4 1D 09 9A 03 24 7E 9A FC 27 1A 83 -0E 4A 2A 88 82 4A C4 1D 30 4D 1C 15 B0 12 2A C2 -B6 C7 0E C8 32 C5 D0 D4 CA C8 28 C5 BE CB F2 D4 -D2 D4 29 4E 39 90 86 12 02 20 2E 53 0A 3C 39 90 -85 12 03 20 1E 4E 02 00 04 3C 39 90 84 12 01 20 -2E 52 1B 17 30 41 3E 40 28 00 B0 12 BA D4 19 42 +30 4D B2 CB 86 5B 54 48 45 4E 5D 00 30 4D 84 D1 +86 5B 45 4C 53 45 5D 00 87 12 14 C6 00 00 C6 C2 +42 C9 80 C6 24 C9 34 C2 40 C4 FA D1 44 C2 1E C6 +06 5B 54 48 45 4E 5D 00 5A D1 4A C4 CA D1 F8 C5 +D0 C2 58 C2 4A C4 A0 D1 2A C2 44 C2 1E C6 06 5B +45 4C 53 45 5D 00 5A D1 4A C4 E8 D1 F8 C5 D0 C2 +58 C2 4A C4 9E D1 2A C2 1E C6 04 5B 49 46 5D 00 +5A D1 4A C4 A0 D1 3C C4 9E D1 F8 C5 1E C6 05 0D +0A 6B 6F 20 D6 C5 8C C5 32 C9 3C C4 A0 D1 90 D1 +84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D 10 D2 +89 5B 44 45 46 49 4E 45 44 5D 87 12 42 C9 80 C6 +EE C6 6A C2 2A C2 20 D2 8B 5B 55 4E 44 45 46 49 +4E 45 44 5D 87 12 42 C9 80 C6 EE C6 6A C2 00 C3 +2A C2 54 D2 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F +30 40 56 CF 48 CE 06 4D 41 52 4B 45 52 00 B0 12 +B8 CB BA 40 84 12 FC FF BA 40 52 D2 FE FF 9A 42 +C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 +00 CC 1C 15 B0 12 2A C2 80 C6 EE C6 4A C4 A8 D2 +AA C7 40 C4 CE CA C2 D2 AA D2 39 4E 39 80 86 12 +08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 01 24 +2E 82 1B 17 30 41 3E 40 28 00 B0 12 92 D2 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 -12 12 C4 1D 92 53 C4 1D B0 12 2A C2 B6 C7 CA C8 -28 C5 30 D5 26 D5 21 53 3E 90 10 00 83 2D E1 2B -32 D5 B2 41 C4 1D DD 3F 87 12 B0 C3 98 D4 40 D5 +12 12 C4 1D 92 53 C4 1D B0 12 2A C2 80 C6 AA C7 +40 C4 00 D3 F6 D2 21 53 3E 90 10 00 7D 2D E1 2B +02 D3 B2 41 C4 1D DD 3F 87 12 42 C9 74 C6 10 D3 0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 -23 00 2D 20 92 53 C4 1D B0 12 BA D4 0E 93 03 20 -3C 40 00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C -2E 93 03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 -20 02 12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 -03 20 3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 1D -A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 -26 00 07 20 3C 40 10 02 92 53 C4 1D B0 12 BA D4 -ED 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 C4 1D -B0 12 0E D5 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 -0E D5 92 92 C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 -0C 5E DA 3F B0 12 0E D5 FA 23 3C 50 10 00 B0 12 -F6 D4 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 -B0 C3 98 D4 16 D6 FE 90 26 00 00 00 3E 40 20 00 -03 20 3C 50 82 00 C8 3F B0 12 0E D5 E1 23 3C 50 -80 00 B0 12 F6 D4 DC 3F 1C C6 04 52 45 54 49 00 -87 12 34 C2 00 13 C8 C9 2A C2 34 C2 2C 00 38 D5 -0E D6 54 D6 2E 4E 0E DC 09 4B A4 3F 3E CE 03 4D -4F 56 84 12 4A D6 00 40 5E D6 05 4D 4F 56 2E 42 -84 12 4A D6 40 40 00 00 03 41 44 44 84 12 4A D6 -00 50 78 D6 05 41 44 44 2E 42 84 12 4A D6 40 50 -84 D6 04 41 44 44 43 00 84 12 4A D6 00 60 92 D6 -06 41 44 44 43 2E 42 00 84 12 4A D6 40 60 3A D6 -04 53 55 42 43 00 84 12 4A D6 00 70 B0 D6 06 53 -55 42 43 2E 42 00 84 12 4A D6 40 70 BE D6 03 53 -55 42 84 12 4A D6 00 80 CE D6 05 53 55 42 2E 42 -84 12 4A D6 40 80 20 CE 03 43 4D 50 84 12 4A D6 -00 90 E8 D6 05 43 4D 50 2E 42 84 12 4A D6 40 90 -0E CE 04 44 41 44 44 00 84 12 4A D6 00 A0 02 D7 -06 44 41 44 44 2E 42 00 84 12 4A D6 40 A0 F4 D6 -03 42 49 54 84 12 4A D6 00 B0 20 D7 05 42 49 54 -2E 42 84 12 4A D6 40 B0 2C D7 03 42 49 43 84 12 -4A D6 00 C0 3A D7 05 42 49 43 2E 42 84 12 4A D6 -40 C0 46 D7 03 42 49 53 84 12 4A D6 00 D0 54 D7 -05 42 49 53 2E 42 84 12 4A D6 40 D0 00 00 03 58 -4F 52 84 12 4A D6 00 E0 6E D7 05 58 4F 52 2E 42 -84 12 4A D6 40 E0 A0 D6 03 41 4E 44 84 12 4A D6 -00 F0 88 D7 05 41 4E 44 2E 42 84 12 4A D6 40 F0 -B0 C3 38 D5 A6 D7 0A 4C 3C F0 70 00 8A 10 3A F0 -0F 00 0C DA 4F 3F DA D6 03 52 52 43 84 12 A0 D7 -00 10 B8 D7 05 52 52 43 2E 42 84 12 A0 D7 40 10 -C4 D7 04 53 57 50 42 00 84 12 A0 D7 80 10 D2 D7 -03 52 52 41 84 12 A0 D7 00 11 E0 D7 05 52 52 41 -2E 42 84 12 A0 D7 40 11 EC D7 03 53 58 54 84 12 -A0 D7 80 11 00 00 04 50 55 53 48 00 84 12 A0 D7 -00 12 06 D8 06 50 55 53 48 2E 42 00 84 12 A0 D7 -40 12 60 D7 04 43 41 4C 4C 00 84 12 A0 D7 80 12 -1A 53 0E 4A 87 12 E2 C4 52 C7 0D 6F 75 74 20 6F -66 20 62 6F 75 6E 64 73 3A CB B0 C3 98 D4 50 D8 -92 53 C4 1D 3E 40 2C 00 B0 12 2A C2 B6 C7 CA C8 -28 C5 BE CB 04 D6 68 D8 0A 4E 3E 4F 1A 83 E0 33 -29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A -38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 -5A 06 8F 3F FA D7 04 52 52 43 4D 00 84 12 4A D8 -50 00 96 D8 04 52 52 41 4D 00 84 12 4A D8 50 01 -A4 D8 04 52 4C 41 4D 00 84 12 4A D8 50 02 B2 D8 -04 52 52 55 4D 00 84 12 4A D8 50 03 14 D8 05 50 -55 53 48 4D 84 12 4A D8 00 15 CE D8 04 50 4F 50 -4D 00 84 12 4A D8 00 17 85 12 00 3C C0 D8 03 53 -3E 3D 85 12 00 38 EE D8 02 53 3C 00 85 12 00 34 -DC D8 03 30 3E 3D 85 12 00 30 02 D9 02 30 3C 00 -85 12 00 30 00 00 02 55 3C 00 85 12 00 2C 16 D9 -03 55 3E 3D 85 12 00 28 0C D9 03 30 3C 3E 85 12 -00 24 2A D9 02 30 3D 00 85 12 00 20 00 00 02 49 +23 00 27 20 92 53 C4 1D B0 12 92 D2 3C 40 00 03 +0E 93 1C 24 3C 40 10 03 1E 93 18 24 3C 40 20 03 +2E 93 14 24 3C 40 20 02 2E 92 10 24 3C 40 30 02 +3E 92 0C 24 3C 40 30 03 3E 93 08 24 3C 40 30 00 +19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 +30 4D 7A 90 26 00 07 20 3C 40 10 02 92 53 C4 1D +B0 12 92 D2 ED 3F 7A 90 40 00 16 20 3C 40 20 00 +92 53 C4 1D B0 12 DE D2 0C 20 3C 50 10 00 3E 40 +2B 00 B0 12 DE D2 92 92 C0 1D C4 1D 02 24 92 53 +C4 1D 8E 10 0C 5E DA 3F B0 12 DE D2 FA 23 3C 50 +10 00 B0 12 C6 D2 EF 3F 0C 43 1B 42 C6 1D A2 53 +C6 1D 87 12 42 C9 74 C6 DA D3 FE 90 26 00 00 00 +3E 40 20 00 03 20 3C 50 82 00 C8 3F B0 12 DE D2 +E1 23 3C 50 80 00 B0 12 C6 D2 DC 3F D6 C4 04 52 +45 54 49 00 87 12 14 C6 00 13 B0 C8 2A C2 14 C6 +2C 00 08 D3 D2 D3 18 D4 09 4B 2E 4E 0E DC A4 3F +FC CC 03 4D 4F 56 84 12 0E D4 00 40 22 D4 05 4D +4F 56 2E 42 84 12 0E D4 40 40 00 00 03 41 44 44 +84 12 0E D4 00 50 3C D4 05 41 44 44 2E 42 84 12 +0E D4 40 50 48 D4 04 41 44 44 43 00 84 12 0E D4 +00 60 56 D4 06 41 44 44 43 2E 42 00 84 12 0E D4 +40 60 FE D3 04 53 55 42 43 00 84 12 0E D4 00 70 +74 D4 06 53 55 42 43 2E 42 00 84 12 0E D4 40 70 +82 D4 03 53 55 42 84 12 0E D4 00 80 92 D4 05 53 +55 42 2E 42 84 12 0E D4 40 80 DE CC 03 43 4D 50 +84 12 0E D4 00 90 AC D4 05 43 4D 50 2E 42 84 12 +0E D4 40 90 CC CC 04 44 41 44 44 00 84 12 0E D4 +00 A0 C6 D4 06 44 41 44 44 2E 42 00 84 12 0E D4 +40 A0 B8 D4 03 42 49 54 84 12 0E D4 00 B0 E4 D4 +05 42 49 54 2E 42 84 12 0E D4 40 B0 F0 D4 03 42 +49 43 84 12 0E D4 00 C0 FE D4 05 42 49 43 2E 42 +84 12 0E D4 40 C0 0A D5 03 42 49 53 84 12 0E D4 +00 D0 18 D5 05 42 49 53 2E 42 84 12 0E D4 40 D0 +00 00 03 58 4F 52 84 12 0E D4 00 E0 32 D5 05 58 +4F 52 2E 42 84 12 0E D4 40 E0 64 D4 03 41 4E 44 +84 12 0E D4 00 F0 4C D5 05 41 4E 44 2E 42 84 12 +0E D4 40 F0 42 C9 08 D3 6A D5 0A 4C 3C F0 70 00 +8A 10 3A F0 0F 00 0C DA 4F 3F 9E D4 03 52 52 43 +84 12 64 D5 00 10 7C D5 05 52 52 43 2E 42 84 12 +64 D5 40 10 88 D5 04 53 57 50 42 00 84 12 64 D5 +80 10 96 D5 03 52 52 41 84 12 64 D5 00 11 A4 D5 +05 52 52 41 2E 42 84 12 64 D5 40 11 B0 D5 03 53 +58 54 84 12 64 D5 80 11 00 00 04 50 55 53 48 00 +84 12 64 D5 00 12 CA D5 06 50 55 53 48 2E 42 00 +84 12 64 D5 40 12 24 D5 04 43 41 4C 4C 00 84 12 +64 D5 80 12 1A 53 0E 4A 87 12 34 C4 1E C6 0D 6F +75 74 20 6F 66 20 62 6F 75 6E 64 73 4C CA 42 C9 +74 C6 14 D6 92 53 C4 1D 3E 40 2C 00 B0 12 2A C2 +80 C6 AA C7 40 C4 CE CA C8 D3 2C D6 0A 4E 3E 4F +1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 +0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 +D1 2F 8A 10 5A 06 8F 3F BE D5 04 52 52 43 4D 00 +84 12 0E D6 50 00 5A D6 04 52 52 41 4D 00 84 12 +0E D6 50 01 68 D6 04 52 4C 41 4D 00 84 12 0E D6 +50 02 76 D6 04 52 52 55 4D 00 84 12 0E D6 50 03 +D8 D5 05 50 55 53 48 4D 84 12 0E D6 00 15 92 D6 +04 50 4F 50 4D 00 84 12 0E D6 00 17 84 D6 03 53 +3E 3D 85 12 00 38 AE D6 02 53 3C 00 85 12 00 34 +A0 D6 03 30 3E 3D 85 12 00 30 C2 D6 02 30 3C 00 +85 12 00 30 00 00 02 55 3C 00 85 12 00 2C D6 D6 +03 55 3E 3D 85 12 00 28 CC D6 03 30 3C 3E 85 12 +00 24 EA D6 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 0E 4A -30 4D 20 D9 04 54 48 45 4E 00 1A 42 C6 1D 08 4E -3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 61 2F -88 DA 00 00 30 4D 10 D7 04 45 4C 53 45 00 1A 42 +30 4D E0 D6 04 54 48 45 4E 00 1A 42 C6 1D 08 4E +3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 63 2F +88 DA 00 00 30 4D D4 D4 04 45 4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 8F 4A -00 00 E3 3F 54 D9 05 55 4E 54 49 4C 3A 4F 08 4E +00 00 E3 3F 14 D7 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE -40 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 1D -30 4D 94 D7 05 41 47 41 49 4E 87 12 E8 D8 9C D9 -2A C2 00 00 05 57 48 49 4C 45 87 12 42 D9 78 C2 -2A C2 F8 D8 06 52 45 50 45 41 54 00 87 12 E8 D8 -9C D9 5A D9 2A C2 F8 D9 3D 41 2E 4E 08 4E 3E 4F -2A 48 0A 93 88 43 00 00 CA 23 98 42 C6 1D 00 00 -30 4D 24 D8 03 42 57 31 84 12 F6 D9 E0 1D 14 DA -03 42 57 32 84 12 F6 D9 E2 1D 20 DA 03 42 57 33 -84 12 F6 D9 E4 1D 38 DA 3D 41 1A 42 C6 1D 2E 4E -28 4E 08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 -C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 -84 12 36 DA E6 1D 5C DA 03 46 57 32 84 12 36 DA -E8 1D 68 DA 03 46 57 33 84 12 36 DA EA 1D 3E 90 -00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 -00 08 30 4D 74 DA 04 47 4F 54 4F 00 87 12 E8 D8 -B0 CB BE C9 2A C2 00 00 05 3F 47 4F 54 4F 87 12 -7E DA B0 CB BE C9 2A C2 00 00 03 4A 4D 50 87 12 -B0 CB CA D9 2A C2 A8 DA 04 3F 4A 4D 50 00 87 12 -7E DA B0 CB 78 C2 9C D9 2A C2 +42 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 1D +30 4D 58 D5 05 41 47 41 49 4E 0A 4E 38 40 00 3C +E7 3F 00 00 05 57 48 49 4C 45 87 12 02 D7 76 C2 +2A C2 B8 D6 06 52 45 50 45 41 54 00 87 12 8A D7 +1A D7 2A C2 B6 D7 3D 41 08 4E 3E 4F 2A 48 B2 92 +C4 1D CD 2F 98 42 C6 1D 00 00 30 4D E8 D5 03 42 +57 31 84 12 B4 D7 00 00 CE D7 03 42 57 32 84 12 +B4 D7 00 00 DA D7 03 42 57 33 84 12 B4 D7 00 00 +F2 D7 3D 41 1A 42 C6 1D 28 4E B2 92 C4 1D 90 2B +BA 4F 00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D +00 00 03 46 57 31 84 12 F0 D7 00 00 12 D8 03 46 +57 32 84 12 F0 D7 00 00 1E D8 03 46 57 33 84 12 +F0 D7 00 00 00 00 05 3F 47 4F 54 4F 3E 90 00 30 +07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 +87 12 C0 CA DA C8 2A C2 2A D8 04 47 4F 54 4F 00 +2F 83 8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -D4 D3 +9C D0 q diff --git a/binaries/MSP_EXP430FR5739_24MHz.txt b/binaries/MSP_EXP430FR5739_24MHz.txt index 76c34d8..12312a4 100644 --- a/binaries/MSP_EXP430FR5739_24MHz.txt +++ b/binaries/MSP_EXP430FR5739_24MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 0D 00 01 49 C0 5D 05 00 18 00 DE DA 8A D0 -2C 01 7B B0 FC C5 0E C6 +10 00 0D 00 01 49 C0 5D 05 00 18 00 70 D8 D0 CE +2D 01 6B B0 B6 C4 C8 C4 @C200 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C2 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C2 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C2 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C2 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C2 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C2 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C2 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C2 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C2 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C3 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C2 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C3 02 31 2D 00 -1E 83 30 4D D8 C2 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C3 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C3 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C3 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C2 01 3E 3E 8F F4 3B EB 37 0E C3 02 42 4C 00 -85 12 20 00 AC C3 04 42 41 53 45 00 85 12 DC 1D -C8 C2 05 53 54 41 54 45 85 12 BE 1D 96 C3 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 C3 06 55 4D 2F -4D 4F 44 00 30 12 62 C2 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C2 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C3 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 C3 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 C4 -02 23 53 00 87 12 32 C4 6A C4 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C4 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C3 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C3 -02 44 2E 00 87 12 D2 C3 44 C2 B0 C2 4C C3 64 C4 -BC C2 A2 C4 7E C4 14 C7 DC C6 2A C2 DC C3 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C2 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C4 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 C2 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A C4 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C4 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C4 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C3 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C5 03 4B 45 59 30 40 A0 C5 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 FC C5 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 0E C6 30 4D 00 C5 -06 41 43 43 45 50 54 00 3C 40 6A C6 3B 40 34 C6 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C6 92 B3 DC 05 05 24 18 42 CC 05 38 90 -0A 00 04 20 21 53 39 40 22 C6 4D 15 A2 B3 DC 05 -FD 27 B2 40 11 00 CE 05 E2 C2 03 02 30 41 B2 40 -13 00 CE 05 E2 D2 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C6 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 CC 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 DC 05 FD 27 82 48 CE 05 30 4D 60 C6 -2D 83 92 B3 DC 05 E4 23 FC 27 82 93 DE 1D 02 24 -92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C4 04 45 4D 49 54 00 30 40 8C C6 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 1D 00 00 AF 4F 02 00 8F 3F 82 C6 04 45 43 48 -4F 00 B2 40 82 48 58 C6 82 43 DE 1D 30 4D E0 C4 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C6 92 43 -DE 1D 30 4D 9C C4 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C6 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C6 EF 3F 00 C7 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C5 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C7 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C7 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C5 02 43 -52 00 30 40 46 C7 87 12 52 C7 02 0D 0A 00 14 C7 -2A C2 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C6 82 53 22 00 82 43 B4 1D -87 12 34 C2 52 C7 C8 C9 34 C2 22 00 B6 C7 80 C7 -3D 41 B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D -3E 4F 92 B3 C6 1D A2 63 C6 1D 30 4D C0 C6 82 2E -22 00 87 12 6C C7 34 C2 14 C7 C8 C9 2A C2 00 00 -04 57 4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C2 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C2 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C2 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C2 02 3E 52 00 0E 12 3E 4F 30 4D 70 C2 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C2 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C2 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C2 +01 21 BE 4F 00 00 3E 4F 30 4D CC C2 02 30 3D 00 +1E 83 0E 7E 30 4D FC C2 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C3 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C2 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 C3 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 C3 02 23 53 00 87 12 88 C3 C0 C3 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C3 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C2 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C3 34 C2 86 C2 D4 C2 BA C3 +92 C2 F8 C3 D4 C3 D6 C5 42 C9 82 C5 2A C2 22 C3 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C3 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C4 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 C4 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 C4 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C2 03 02 30 41 B2 40 13 00 CE 05 E2 D2 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C4 +B0 12 B6 C4 12 D2 0A 18 F9 3F F0 C2 06 41 43 43 +45 50 54 00 3C 40 64 C5 3B 40 2E C5 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C5 +92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 CC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 +FD 27 82 48 CE 05 30 4D 5A C5 2D 83 92 B3 DC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C2 04 45 4D 49 +54 00 30 40 86 C5 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C C5 04 45 43 48 4F 00 B2 40 82 48 +52 C5 82 43 DE 1D 30 4D 32 C4 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C5 92 43 DE 1D 30 4D 20 C4 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C5 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C5 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C3 +02 43 52 00 30 40 08 C6 87 12 1E C6 02 0D 0A 00 +D6 C5 2A C2 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C3 82 53 22 00 82 43 B4 1D 87 12 14 C6 +1E C6 B0 C8 14 C6 22 00 80 C6 4C C6 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA C5 82 2E 22 00 87 12 38 C6 14 C6 D6 C5 +B0 C8 2A C2 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E @@ -104,302 +86,281 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C2 34 40 00 C2 30 4D A2 C3 07 3E +00 00 35 40 0E C2 34 40 00 C2 30 4D 82 C2 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 -2D 15 3D 40 10 C9 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 C9 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C3 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C6 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C3 01 2C 1A 42 C6 1D A2 53 C6 1D -8A 4E 00 00 3E 4F 30 4D C6 C9 87 4C 49 54 45 52 -41 4C 82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D -BA 40 34 C2 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C7 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F -C2 1D 3E 4F 82 43 C4 1D 30 4D 87 12 2A CA B0 C3 -B6 C7 44 CA 3D 40 4C CA E2 22 5D 3E 4E CA 0A 4E -3E 4F 3D 40 64 CA 39 27 3D 40 3E CA 1A E2 BE 1D -B3 27 AD 23 66 CA 3E 4F 3D 40 3E CA BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CD -CD 3F B6 C9 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 1D 3C 49 3B 49 3A 49 3D 15 B0 12 2A C2 3A CA -A2 CA B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 -30 4D 6C C3 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 C7 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C7 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C3 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C4 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 C2 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC C4 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 C5 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE C8 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 C6 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C6 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 C9 42 C9 80 C6 50 C9 +3D 40 58 C9 CC 22 82 3E 5A C9 0A 4E 3E 4F 3D 40 +70 C9 23 27 3D 40 4A C9 1A E2 BE 1D A1 27 B5 23 +72 C9 3E 4F 3D 40 4A C9 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CC CB 3F D2 C8 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C2 46 C9 AE C9 B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 C3 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A C2 -42 C7 92 C6 DC C6 3A CA DE C2 70 C3 52 C7 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CB 34 C2 -30 FF F2 C4 8A C3 52 C7 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CB 24 C5 D0 CA C0 C5 05 41 42 4F -52 54 3F 40 80 1C D1 3F 0C CB 86 41 42 4F 52 54 -22 00 87 12 6C C7 34 C2 2E CB C8 C9 2A C2 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D2 B0 12 -FC C5 92 C3 DC 05 38 40 F0 FF 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 DC 05 F2 23 87 12 -6A D2 34 C2 DE 1D F2 C2 B2 C6 52 C7 04 1B 5B 37 -6D 00 14 C7 54 C2 28 C5 8A CB 42 C7 52 C7 05 6C -69 6E 65 3A 14 C7 40 C3 D2 C4 14 C7 52 C7 04 1B -5B 30 6D 00 14 C7 12 CB 00 00 83 5B 27 5D 87 12 -B0 CB 34 C2 34 C2 C8 C9 C8 C9 2A C2 08 C8 01 27 -87 12 B0 C3 B6 C7 0E C8 28 C5 BE CB 2A C2 6E CA -CE C3 81 5C 92 42 C0 1D C4 1D 30 4D 9A CB 81 5B -82 43 BE 1D 30 4D C2 CB 01 5D B2 43 BE 1D 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C5 82 49 53 00 87 12 -C8 C3 F2 C2 28 C5 02 CC 9E CB 34 C2 E0 CB C8 C9 -2A C2 B0 CB E0 CB 2A C2 EA CB 09 49 4D 4D 45 44 +04 C6 8C C5 42 C9 82 C5 46 C9 A4 C2 0C C3 1E C6 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CA +14 C6 30 FF A0 C8 26 C3 1E C6 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CA 3C C4 E0 C9 C2 C8 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E CA 86 41 42 4F +52 54 22 00 87 12 38 C6 14 C6 40 CA B0 C8 2A C2 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 CF +B0 12 B6 C4 92 C3 DC 05 38 40 F0 FF 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 DC 05 F3 23 87 12 +42 CF 14 C6 DE 1D EA C2 AC C5 1E C6 04 1B 5B 37 +6D 00 D6 C5 58 C2 40 C4 9A CA 04 C6 1E C6 05 6C +69 6E 65 3A D6 C5 D0 C2 24 C4 D6 C5 1E C6 04 1B +5B 30 6D 00 D6 C5 24 CA 00 00 83 5B 27 5D 87 12 +C0 CA 14 C6 14 C6 B0 C8 B0 C8 2A C2 E8 C6 01 27 +87 12 42 C9 80 C6 EE C6 40 C4 CE CA 2A C2 7A C9 +32 C3 81 5C 92 42 C0 1D C4 1D 30 4D AA CA 81 5B +82 43 BE 1D 30 4D D2 CA 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A C8 82 49 53 00 87 12 +BE C9 EA C2 40 C4 12 CB AE CA 14 C6 F0 CA B0 C8 +2A C2 C0 CA F0 CA 2A C2 FA CA 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D -68 C7 87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 -BA 1D 00 00 A2 53 C6 1D 30 4D B4 CA 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C3 B6 C7 0E C8 54 C2 -28 C5 BE CB 70 C3 28 C5 66 CC 34 C2 34 C2 C8 C9 -C8 C9 34 C2 C8 C9 C8 C9 2A C2 CE CB 81 3B 82 93 -BE 1D A8 27 87 12 34 C2 2A C2 C8 C9 04 CD D0 CB -2A C2 6C CC 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CC BA 40 87 12 FC FF A2 83 C6 1D B2 43 -BE 1D 82 4F BC 1D 30 4D 84 CC 01 3A 30 12 A4 CC -87 12 92 C7 B0 C3 B6 C7 CA CC 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CC 02 00 -82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A -C6 1D 30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 -B8 1D A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C7 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CB B0 C7 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CC BA 40 86 12 FC FF E4 3F 16 CA 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CC BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CD 06 43 52 45 41 54 -45 00 B0 12 C0 CC BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CA 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CD 05 44 -45 46 45 52 30 12 12 CD 8B 3F 6E C8 05 3E 42 4F -44 59 2E 52 30 4D 6A CD 04 43 4F 44 45 00 B0 12 -C0 CC 2A 82 82 4A C6 1D 87 12 B2 CC 94 D0 66 D0 -2A C2 B8 CD 07 43 4F 44 45 4E 4E 4D 87 12 8C CC -D0 CB C2 CD 2A C2 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D0 04 CD 2A C2 1A CB 03 41 53 4D 92 42 -DA 1D EC 1D B2 40 6A D0 DA 1D D9 3F E8 CD 06 45 -4E 44 41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 -A2 53 C6 1D B2 43 BE 1D 30 40 AE D0 00 00 05 4C -4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 -2A C2 02 00 A2 52 C6 1D ED 3F 0A CC 85 48 49 32 -4C 4F 87 12 F2 C4 8C CE C8 C9 D0 CB 94 D0 66 D0 -2A C2 5C CE 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 1D A2 52 C6 1D BE 40 28 C5 00 00 2E 53 30 4D -9E CD 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D -BA 40 24 C5 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C7 84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F -30 4D D4 CD 85 42 45 47 49 4E 30 40 F2 C4 B2 CE -85 55 4E 54 49 4C 39 40 28 C5 A2 52 C6 1D 1A 42 -C6 1D 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CD -85 41 47 41 49 4E 39 40 24 C5 EF 3F 34 CD 85 57 -48 49 4C 45 87 12 78 CE 78 C2 2A C2 22 CC 86 52 -45 50 45 41 54 00 87 12 F6 CE B8 CE 2A C2 92 CE -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 -C6 1D BE 40 3C C5 FE FF A2 53 00 1C 1A 42 00 1C -8A 43 00 00 30 4D DA C9 84 4C 4F 4F 50 00 39 40 -5E C5 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E -FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C5 85 2B 4C 4F -4F 50 39 40 4C C5 E5 3F 48 CF 85 4C 45 41 56 45 -1A 42 C6 1D BA 40 6E C5 00 00 BA 40 24 C5 02 00 -B2 50 06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C -89 4A 00 00 30 4D 8A CF 04 4D 4F 56 45 00 0A 4E +C4 C9 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 C9 +80 C6 EE C6 58 C2 40 C4 CE CA 0C C3 40 C4 5C CB +14 C6 14 C6 B0 C8 B0 C8 14 C6 B0 C8 B0 C8 2A C2 +DE CA 81 3B 82 93 BE 1D B5 27 87 12 14 C6 2A C2 +B0 C8 FA CB E0 CA 2A C2 62 CB 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CB 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A CB 01 3A 30 12 A0 CB 92 B3 C6 1D A2 63 C6 1D +87 12 42 C9 80 C6 C8 CB 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C6 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CA 90 C9 05 44 45 46 45 52 +B0 12 B8 CB BA 40 30 40 FC FF BA 40 AE CB FE FF +E3 3F 1E C9 06 43 52 45 41 54 45 00 B0 12 B8 CB +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CC 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C7 05 3E 42 4F 44 59 2E 52 +30 4D 44 CC 04 43 4F 44 45 00 B0 12 B8 CB A2 82 +C6 1D 87 12 D2 CE AC CE 2A C2 84 CC 07 43 4F 44 +45 4E 4E 4D B0 12 86 CB F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 CE FA CB 2A C2 2C CA 03 41 +53 4D B2 40 B0 CE DA 1D E0 3F AC CC 06 45 4E 44 +41 53 4D 00 87 12 B4 CC F4 CE 2A C2 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 +C6 1D B2 43 BE 1D 30 40 E0 CE 00 00 05 4C 4F 32 +48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A C2 +02 00 A2 52 C6 1D ED 3F 1A CB 85 48 49 32 4C 4F +87 12 A0 C8 4A CD B0 C8 E0 CA D2 CE AC CE 2A C2 +1A CD 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D +A2 52 C6 1D BE 40 40 C4 00 00 2E 53 30 4D 5E CC +84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 +3C C4 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C5 +84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D +9C CC 85 42 45 47 49 4E 30 40 A0 C8 70 CD 85 55 +4E 54 49 4C 39 40 40 C4 A2 52 C6 1D 1A 42 C6 1D +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CC 85 41 +47 41 49 4E 39 40 3C C4 EF 3F 7A C6 85 57 48 49 +4C 45 87 12 36 CD 76 C2 2A C2 34 C6 86 52 45 50 +45 41 54 00 87 12 B4 CD 76 CD 2A C2 50 CD 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D +BE 40 54 C4 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 +00 00 30 4D E2 C8 84 4C 4F 4F 50 00 39 40 76 C4 +A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF +1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C4 85 2B 4C 4F 4F 50 +39 40 64 C4 E5 3F 06 CE 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE CE -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CD -34 C2 10 00 34 C2 00 00 3C C5 34 C2 00 00 C8 C9 -5E C5 0A D0 F2 C4 34 C2 C8 1D 44 C2 F2 C2 C8 C9 -FA C2 8A CD 34 C2 CA 1D FA C2 2A C2 AE CB 05 46 -4F 52 54 48 84 12 24 D0 8E D0 C2 D3 CC D0 2E D0 -74 CE 7C CF F8 D1 BE D0 8E D2 A8 D2 D0 CE 34 D3 -00 00 CC D1 D8 CB AC CD 00 00 F0 CE 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D0 C8 D9 30 DA 7C D9 -9A DA 42 D9 BE DA 6E D6 00 00 38 D9 E8 D9 9A D9 -D8 D9 7E D7 00 00 00 00 CC DA 58 D0 5C D0 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D -9D 3F 3C CC 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 1D 38 40 CA 1D 8A 3F 9E C7 04 4F -4E 4C 59 00 82 43 CC 1D 30 4D 20 CF 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D -C4 CE 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CC 86 5B 54 48 45 4E 5D 00 30 4D 14 D1 -86 5B 45 4C 53 45 5D 00 87 12 34 C2 00 00 36 C3 -B0 C3 B6 C7 1C CA 44 C2 28 C5 8E D1 8A C2 8A C2 -52 C7 06 5B 54 48 45 4E 5D 00 EA D0 32 C5 5C D1 -36 C7 40 C3 54 C2 32 C5 30 D1 2A C2 8A C2 8A C2 -52 C7 06 5B 45 4C 53 45 5D 00 EA D0 32 C5 7C D1 -36 C7 40 C3 54 C2 32 C5 2E D1 2A C2 52 C7 04 5B -49 46 5D 00 EA D0 32 C5 30 D1 24 C5 2E D1 36 C7 -52 C7 05 0D 0A 6B 6F 20 14 C7 92 C6 2A CA 24 C5 -30 D1 20 D1 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D1 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C3 B6 C7 0E C8 6C C2 2A C2 B4 D1 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C3 B6 C7 0E C8 -6C C2 64 C3 2A C2 E8 D1 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 CF 06 4D 41 52 4B 45 52 00 -B0 12 C0 CC BA 40 84 12 FC FF BA 40 E6 D1 FE FF -9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D -30 40 0A CD 34 D0 C4 D0 D8 D0 2C D2 3A 4E 82 4A -C8 1D 2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D0 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D2 8A D0 -DE DA 0E CF 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D2 92 42 0C 18 70 D2 EF 3F 60 D2 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 1D 6E D2 92 42 -C6 1D 70 D2 30 4D 74 D2 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F -F0 CF 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C6 24 C6 B2 40 3E D3 3C D3 -B2 40 8A D0 0E 18 B2 40 DE DA 0C 18 30 12 7E D2 -B2 40 8C C6 8A C6 B2 40 46 C7 44 C7 B2 40 A0 C5 -9E C5 B2 40 18 00 0A 18 37 40 1A C2 36 40 BC C2 -35 40 0E C2 34 40 00 C2 39 40 10 00 29 83 89 43 -E0 1D FC 23 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D -30 41 C2 D2 04 57 41 52 4D 00 30 40 3E D3 3D 40 -72 D3 92 C3 30 01 1E 42 08 18 0E 93 11 24 D2 B3 -01 02 02 20 3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 C7 06 0D 1B 5B 37 6D 23 00 14 C7 E2 C4 -52 C7 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 C7 34 C2 80 FF F2 C4 28 C3 D2 C4 52 C7 -0B 62 79 74 65 73 20 66 72 65 65 20 24 C5 8A CB -E2 D0 04 43 4F 4C 44 00 92 B3 CA 05 FD 23 B2 40 -04 A5 20 01 92 D3 30 01 B2 40 88 5A 5C 01 B2 40 -EF 7F 06 02 B2 43 02 02 E2 D2 05 02 B2 40 08 FF -02 02 B2 D0 08 FF 06 02 B2 D0 F0 00 04 02 F2 40 -F0 00 22 03 F2 D0 F0 00 26 03 F2 D0 0F 00 24 03 -F2 40 A5 00 61 01 B2 40 86 00 62 01 82 43 66 01 -39 40 80 01 B2 40 33 00 64 01 D2 43 61 01 92 D2 -9E 01 08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 -B2 D2 B0 01 92 C3 B0 01 F2 D0 10 00 2A 03 F2 C0 -40 00 A1 04 39 40 00 04 29 83 89 43 00 1C FC 23 -39 40 32 00 29 83 B9 40 D4 D3 CE FF FB 23 B2 40 -2C C6 F0 FF B2 40 81 00 C0 05 92 42 02 18 C6 05 -92 42 04 18 C8 05 92 C3 C0 05 92 D3 DA 05 3F 40 -80 1C 31 40 E0 1C 30 12 3A D3 33 3F 38 40 C0 1D -39 48 2A 48 09 5A 1A 52 C4 1D 09 9A 03 24 7E 9A -FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D 30 4D 1C 15 -B0 12 2A C2 B6 C7 0E C8 32 C5 D4 D4 CA C8 28 C5 -BE CB F6 D4 D6 D4 29 4E 39 90 86 12 02 20 2E 53 -0A 3C 39 90 85 12 03 20 1E 4E 02 00 04 3C 39 90 -84 12 01 20 2E 52 1B 17 30 41 3E 40 28 00 B0 12 -BE D4 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C6 +CA 1D F2 C2 2A C2 84 12 7E CE AE CD 56 D1 DE CD +BE CA 32 CD 3A CE 6A D2 64 C6 66 CF 80 CF 8E CD +00 D0 00 00 3C D2 E8 CA 78 CC 00 00 84 12 7E CE +88 D7 EA D7 3C D7 5E D8 02 D7 00 00 32 D4 00 00 +F8 D6 A8 D7 5A D7 98 D7 42 D5 00 00 00 00 3A D8 +AA CE 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D C6 3F +3A 40 0E 00 39 40 CC 1D 38 40 CA 1D B9 3F 82 43 +CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D 86 CE EE CE +F4 CE 04 CF 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CB 09 50 57 52 5F 53 54 41 +54 45 84 12 FC CE D0 CE 70 D8 CC CD 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 CF 92 42 0C 18 +48 CF EF 3F 38 CF 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 1D 46 CF 92 42 C6 1D 48 CF 30 4D 4C CF +08 52 53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 +92 42 C6 1D 0C 18 EC 3F BC CD 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C4 +DE C4 B2 40 0A D0 08 D0 B2 40 D0 CE 0E 18 B2 40 +70 D8 0C 18 30 12 56 CF B2 40 86 C5 84 C5 B2 40 +08 C6 06 C6 B2 40 98 C4 96 C4 B2 40 18 00 0A 18 +37 40 1A C2 36 40 92 C2 35 40 0E C2 34 40 00 C2 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 9A CF +04 57 41 52 4D 00 30 40 0A D0 3D 40 3E D0 92 C3 +30 01 1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E C6 +06 0D 1B 5B 37 6D 23 00 D6 C5 34 C4 1E C6 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 C5 14 C6 30 FF A0 C8 +B8 C2 24 C4 1E C6 0A 62 79 74 65 73 20 66 72 65 +65 00 3C C4 9A CA 82 CD 04 43 4F 4C 44 00 92 B3 +CA 05 FD 23 B2 40 04 A5 20 01 3E D0 92 D3 30 01 +B2 40 88 5A 5C 01 B2 43 06 02 B2 40 EF 7F 02 02 +E2 D2 05 02 B2 43 26 02 B2 D0 08 FF 22 02 F2 D3 +26 03 F2 40 F0 00 22 03 F2 40 A5 00 61 01 B2 40 +86 00 62 01 82 43 66 01 39 40 80 01 B2 40 33 00 +64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 59 14 +18 83 FE 23 19 83 FA 23 B2 D2 B0 01 92 C3 B0 01 +F2 D0 10 00 2A 03 F2 C0 40 00 A1 04 39 40 00 04 +29 83 89 43 00 1C FC 23 39 40 32 00 29 83 B9 40 +9C D0 CE FF FB 23 B2 40 26 C5 F0 FF B2 40 81 00 +C0 05 92 42 02 18 C6 05 92 42 04 18 C8 05 92 C3 +C0 05 92 D3 DA 05 3F 40 80 1C 31 40 E0 1C 30 12 +06 D0 43 3F 88 D0 07 43 4F 4D 50 41 52 45 0C 4E +38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 +1C 83 07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 +30 4D 1E 43 30 4D B2 CB 86 5B 54 48 45 4E 5D 00 +30 4D 88 D1 86 5B 45 4C 53 45 5D 00 87 12 14 C6 +00 00 C6 C2 42 C9 80 C6 24 C9 34 C2 40 C4 FE D1 +44 C2 1E C6 06 5B 54 48 45 4E 5D 00 5E D1 4A C4 +CE D1 F8 C5 D0 C2 58 C2 4A C4 A4 D1 2A C2 44 C2 +1E C6 06 5B 45 4C 53 45 5D 00 5E D1 4A C4 EC D1 +F8 C5 D0 C2 58 C2 4A C4 A2 D1 2A C2 1E C6 04 5B +49 46 5D 00 5E D1 4A C4 A4 D1 3C C4 A2 D1 F8 C5 +1E C6 05 0D 0A 6B 6F 20 D6 C5 8C C5 32 C9 3C C4 +A4 D1 94 D1 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 +30 4D 14 D2 89 5B 44 45 46 49 4E 45 44 5D 87 12 +42 C9 80 C6 EE C6 6A C2 2A C2 24 D2 8B 5B 55 4E +44 45 46 49 4E 45 44 5D 87 12 42 C9 80 C6 EE C6 +6A C2 00 C3 2A C2 58 D2 3D 41 B2 4E 0E 18 A2 4E +0C 18 3E 4F 30 40 56 CF 48 CE 06 4D 41 52 4B 45 +52 00 B0 12 B8 CB BA 40 84 12 FC FF BA 40 56 D2 +FE FF 9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 +C6 1D 30 40 00 CC 1C 15 B0 12 2A C2 80 C6 EE C6 +4A C4 AC D2 AA C7 40 C4 CE CA C6 D2 AE D2 39 4E +39 80 86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 +19 53 01 24 2E 82 1B 17 30 41 3E 40 28 00 B0 12 +96 D2 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D 92 53 C4 1D B0 12 2A C2 -B6 C7 CA C8 28 C5 34 D5 2A D5 21 53 3E 90 10 00 -83 2D E1 2B 36 D5 B2 41 C4 1D DD 3F 87 12 B0 C3 -9C D4 44 D5 0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E -3E 4F 7A 90 23 00 2D 20 92 53 C4 1D B0 12 BE D4 -0E 93 03 20 3C 40 00 03 21 3C 1E 93 03 20 3C 40 -10 03 1C 3C 2E 93 03 20 3C 40 20 03 17 3C 2E 92 -03 20 3C 40 20 02 12 3C 3E 92 03 20 3C 40 30 02 -0D 3C 3E 93 03 20 3C 40 30 03 08 3C 3C 40 30 00 -19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 -30 4D 7A 90 26 00 07 20 3C 40 10 02 92 53 C4 1D -B0 12 BE D4 ED 3F 7A 90 40 00 16 20 3C 40 20 00 -92 53 C4 1D B0 12 12 D5 0C 20 3C 50 10 00 3E 40 -2B 00 B0 12 12 D5 92 92 C0 1D C4 1D 02 24 92 53 -C4 1D 8E 10 0C 5E DA 3F B0 12 12 D5 FA 23 3C 50 -10 00 B0 12 FA D4 EF 3F 0C 43 1B 42 C6 1D A2 53 -C6 1D 87 12 B0 C3 9C D4 1A D6 FE 90 26 00 00 00 -3E 40 20 00 03 20 3C 50 82 00 C8 3F B0 12 12 D5 -E1 23 3C 50 80 00 B0 12 FA D4 DC 3F 1C C6 04 52 -45 54 49 00 87 12 34 C2 00 13 C8 C9 2A C2 34 C2 -2C 00 3C D5 12 D6 58 D6 2E 4E 0E DC 09 4B A4 3F -3E CE 03 4D 4F 56 84 12 4E D6 00 40 62 D6 05 4D -4F 56 2E 42 84 12 4E D6 40 40 00 00 03 41 44 44 -84 12 4E D6 00 50 7C D6 05 41 44 44 2E 42 84 12 -4E D6 40 50 88 D6 04 41 44 44 43 00 84 12 4E D6 -00 60 96 D6 06 41 44 44 43 2E 42 00 84 12 4E D6 -40 60 3E D6 04 53 55 42 43 00 84 12 4E D6 00 70 -B4 D6 06 53 55 42 43 2E 42 00 84 12 4E D6 40 70 -C2 D6 03 53 55 42 84 12 4E D6 00 80 D2 D6 05 53 -55 42 2E 42 84 12 4E D6 40 80 20 CE 03 43 4D 50 -84 12 4E D6 00 90 EC D6 05 43 4D 50 2E 42 84 12 -4E D6 40 90 0E CE 04 44 41 44 44 00 84 12 4E D6 -00 A0 06 D7 06 44 41 44 44 2E 42 00 84 12 4E D6 -40 A0 F8 D6 03 42 49 54 84 12 4E D6 00 B0 24 D7 -05 42 49 54 2E 42 84 12 4E D6 40 B0 30 D7 03 42 -49 43 84 12 4E D6 00 C0 3E D7 05 42 49 43 2E 42 -84 12 4E D6 40 C0 4A D7 03 42 49 53 84 12 4E D6 -00 D0 58 D7 05 42 49 53 2E 42 84 12 4E D6 40 D0 -00 00 03 58 4F 52 84 12 4E D6 00 E0 72 D7 05 58 -4F 52 2E 42 84 12 4E D6 40 E0 A4 D6 03 41 4E 44 -84 12 4E D6 00 F0 8C D7 05 41 4E 44 2E 42 84 12 -4E D6 40 F0 B0 C3 3C D5 AA D7 0A 4C 3C F0 70 00 -8A 10 3A F0 0F 00 0C DA 4F 3F DE D6 03 52 52 43 -84 12 A4 D7 00 10 BC D7 05 52 52 43 2E 42 84 12 -A4 D7 40 10 C8 D7 04 53 57 50 42 00 84 12 A4 D7 -80 10 D6 D7 03 52 52 41 84 12 A4 D7 00 11 E4 D7 -05 52 52 41 2E 42 84 12 A4 D7 40 11 F0 D7 03 53 -58 54 84 12 A4 D7 80 11 00 00 04 50 55 53 48 00 -84 12 A4 D7 00 12 0A D8 06 50 55 53 48 2E 42 00 -84 12 A4 D7 40 12 64 D7 04 43 41 4C 4C 00 84 12 -A4 D7 80 12 1A 53 0E 4A 87 12 E2 C4 52 C7 0D 6F -75 74 20 6F 66 20 62 6F 75 6E 64 73 3A CB B0 C3 -9C D4 54 D8 92 53 C4 1D 3E 40 2C 00 B0 12 2A C2 -B6 C7 CA C8 28 C5 BE CB 08 D6 6C D8 0A 4E 3E 4F -1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 -0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 -D1 2F 8A 10 5A 06 8F 3F FE D7 04 52 52 43 4D 00 -84 12 4E D8 50 00 9A D8 04 52 52 41 4D 00 84 12 -4E D8 50 01 A8 D8 04 52 4C 41 4D 00 84 12 4E D8 -50 02 B6 D8 04 52 52 55 4D 00 84 12 4E D8 50 03 -18 D8 05 50 55 53 48 4D 84 12 4E D8 00 15 D2 D8 -04 50 4F 50 4D 00 84 12 4E D8 00 17 85 12 00 3C -C4 D8 03 53 3E 3D 85 12 00 38 F2 D8 02 53 3C 00 -85 12 00 34 E0 D8 03 30 3E 3D 85 12 00 30 06 D9 +80 C6 AA C7 40 C4 04 D3 FA D2 21 53 3E 90 10 00 +7D 2D E1 2B 06 D3 B2 41 C4 1D DD 3F 87 12 42 C9 +74 C6 14 D3 0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E +3E 4F 7A 90 23 00 27 20 92 53 C4 1D B0 12 96 D2 +3C 40 00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 +3C 40 20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 +3C 40 30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 +3C 40 30 00 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 +3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 +92 53 C4 1D B0 12 96 D2 ED 3F 7A 90 40 00 16 20 +3C 40 20 00 92 53 C4 1D B0 12 E2 D2 0C 20 3C 50 +10 00 3E 40 2B 00 B0 12 E2 D2 92 92 C0 1D C4 1D +02 24 92 53 C4 1D 8E 10 0C 5E DA 3F B0 12 E2 D2 +FA 23 3C 50 10 00 B0 12 CA D2 EF 3F 0C 43 1B 42 +C6 1D A2 53 C6 1D 87 12 42 C9 74 C6 DE D3 FE 90 +26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F +B0 12 E2 D2 E1 23 3C 50 80 00 B0 12 CA D2 DC 3F +D6 C4 04 52 45 54 49 00 87 12 14 C6 00 13 B0 C8 +2A C2 14 C6 2C 00 0C D3 D6 D3 1C D4 09 4B 2E 4E +0E DC A4 3F FC CC 03 4D 4F 56 84 12 12 D4 00 40 +26 D4 05 4D 4F 56 2E 42 84 12 12 D4 40 40 00 00 +03 41 44 44 84 12 12 D4 00 50 40 D4 05 41 44 44 +2E 42 84 12 12 D4 40 50 4C D4 04 41 44 44 43 00 +84 12 12 D4 00 60 5A D4 06 41 44 44 43 2E 42 00 +84 12 12 D4 40 60 02 D4 04 53 55 42 43 00 84 12 +12 D4 00 70 78 D4 06 53 55 42 43 2E 42 00 84 12 +12 D4 40 70 86 D4 03 53 55 42 84 12 12 D4 00 80 +96 D4 05 53 55 42 2E 42 84 12 12 D4 40 80 DE CC +03 43 4D 50 84 12 12 D4 00 90 B0 D4 05 43 4D 50 +2E 42 84 12 12 D4 40 90 CC CC 04 44 41 44 44 00 +84 12 12 D4 00 A0 CA D4 06 44 41 44 44 2E 42 00 +84 12 12 D4 40 A0 BC D4 03 42 49 54 84 12 12 D4 +00 B0 E8 D4 05 42 49 54 2E 42 84 12 12 D4 40 B0 +F4 D4 03 42 49 43 84 12 12 D4 00 C0 02 D5 05 42 +49 43 2E 42 84 12 12 D4 40 C0 0E D5 03 42 49 53 +84 12 12 D4 00 D0 1C D5 05 42 49 53 2E 42 84 12 +12 D4 40 D0 00 00 03 58 4F 52 84 12 12 D4 00 E0 +36 D5 05 58 4F 52 2E 42 84 12 12 D4 40 E0 68 D4 +03 41 4E 44 84 12 12 D4 00 F0 50 D5 05 41 4E 44 +2E 42 84 12 12 D4 40 F0 42 C9 0C D3 6E D5 0A 4C +3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F A2 D4 +03 52 52 43 84 12 68 D5 00 10 80 D5 05 52 52 43 +2E 42 84 12 68 D5 40 10 8C D5 04 53 57 50 42 00 +84 12 68 D5 80 10 9A D5 03 52 52 41 84 12 68 D5 +00 11 A8 D5 05 52 52 41 2E 42 84 12 68 D5 40 11 +B4 D5 03 53 58 54 84 12 68 D5 80 11 00 00 04 50 +55 53 48 00 84 12 68 D5 00 12 CE D5 06 50 55 53 +48 2E 42 00 84 12 68 D5 40 12 28 D5 04 43 41 4C +4C 00 84 12 68 D5 80 12 1A 53 0E 4A 87 12 34 C4 +1E C6 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 +4C CA 42 C9 74 C6 18 D6 92 53 C4 1D 3E 40 2C 00 +B0 12 2A C2 80 C6 AA C7 40 C4 CE CA CC D3 30 D6 +0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C +59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E +94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F C2 D5 04 52 +52 43 4D 00 84 12 12 D6 50 00 5E D6 04 52 52 41 +4D 00 84 12 12 D6 50 01 6C D6 04 52 4C 41 4D 00 +84 12 12 D6 50 02 7A D6 04 52 52 55 4D 00 84 12 +12 D6 50 03 DC D5 05 50 55 53 48 4D 84 12 12 D6 +00 15 96 D6 04 50 4F 50 4D 00 84 12 12 D6 00 17 +88 D6 03 53 3E 3D 85 12 00 38 B2 D6 02 53 3C 00 +85 12 00 34 A4 D6 03 30 3E 3D 85 12 00 30 C6 D6 02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 -00 2C 1A D9 03 55 3E 3D 85 12 00 28 10 D9 03 30 -3C 3E 85 12 00 24 2E D9 02 30 3D 00 85 12 00 20 +00 2C DA D6 03 55 3E 3D 85 12 00 28 D0 D6 03 30 +3C 3E 85 12 00 24 EE D6 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 -C6 1D 0E 4A 30 4D 24 D9 04 54 48 45 4E 00 1A 42 +C6 1D 0E 4A 30 4D E4 D6 04 54 48 45 4E 00 1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 -00 02 61 2F 88 DA 00 00 30 4D 14 D7 04 45 4C 53 +00 02 63 2F 88 DA 00 00 30 4D D8 D4 04 45 4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D -2F 83 8F 4A 00 00 E3 3F 58 D9 05 55 4E 54 49 4C +2F 83 8F 4A 00 00 E3 3F 18 D7 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 -3A 90 00 FE 40 3B 3A F0 FF 03 08 DA 89 48 00 00 -A2 53 C6 1D 30 4D 98 D7 05 41 47 41 49 4E 87 12 -EC D8 A0 D9 2A C2 00 00 05 57 48 49 4C 45 87 12 -46 D9 78 C2 2A C2 FC D8 06 52 45 50 45 41 54 00 -87 12 EC D8 A0 D9 5E D9 2A C2 FC D9 3D 41 2E 4E -08 4E 3E 4F 2A 48 0A 93 88 43 00 00 CA 23 98 42 -C6 1D 00 00 30 4D 28 D8 03 42 57 31 84 12 FA D9 -E0 1D 18 DA 03 42 57 32 84 12 FA D9 E2 1D 24 DA -03 42 57 33 84 12 FA D9 E4 1D 3C DA 3D 41 1A 42 -C6 1D 2E 4E 28 4E 08 93 8E 43 00 00 8B 23 BA 4F -00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 -03 46 57 31 84 12 3A DA E6 1D 60 DA 03 46 57 32 -84 12 3A DA E8 1D 6C DA 03 46 57 33 84 12 3A DA -EA 1D 3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 -02 24 3E E0 00 08 30 4D 78 DA 04 47 4F 54 4F 00 -87 12 EC D8 B0 CB BE C9 2A C2 00 00 05 3F 47 4F -54 4F 87 12 82 DA B0 CB BE C9 2A C2 00 00 03 4A -4D 50 87 12 B0 CB CE D9 2A C2 AC DA 04 3F 4A 4D -50 00 87 12 82 DA B0 CB 78 C2 A0 D9 2A C2 +3A 90 00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 +A2 53 C6 1D 30 4D 5C D5 05 41 47 41 49 4E 0A 4E +38 40 00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 +06 D7 76 C2 2A C2 BC D6 06 52 45 50 45 41 54 00 +87 12 8E D7 1E D7 2A C2 BA D7 3D 41 08 4E 3E 4F +2A 48 B2 92 C4 1D CD 2F 98 42 C6 1D 00 00 30 4D +EC D5 03 42 57 31 84 12 B8 D7 00 00 D2 D7 03 42 +57 32 84 12 B8 D7 00 00 DE D7 03 42 57 33 84 12 +B8 D7 00 00 F6 D7 3D 41 1A 42 C6 1D 28 4E B2 92 +C4 1D 90 2B BA 4F 00 00 A2 53 C6 1D 8E 4A 00 00 +3E 4F 30 4D 00 00 03 46 57 31 84 12 F4 D7 00 00 +16 D8 03 46 57 32 84 12 F4 D7 00 00 22 D8 03 46 +57 33 84 12 F4 D7 00 00 00 00 05 3F 47 4F 54 4F +3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 +3E E0 00 08 87 12 C0 CA DA C8 2A C2 2E D8 04 47 +4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -D4 D3 +9C D0 q diff --git a/binaries/MSP_EXP430FR5739_4MHz.txt b/binaries/MSP_EXP430FR5739_4MHz.txt deleted file mode 100644 index a340add..0000000 --- a/binaries/MSP_EXP430FR5739_4MHz.txt +++ /dev/null @@ -1,405 +0,0 @@ -@1800 -10 00 02 00 21 BB A0 0F 05 00 18 00 DA DA 8A D0 -2C 01 7B B0 FC C5 0E C6 -@C200 -2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 -8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C2 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C2 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C2 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C2 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C2 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C2 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C2 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C2 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C2 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C3 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C2 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C3 02 31 2D 00 -1E 83 30 4D D8 C2 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C3 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C3 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C3 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C2 01 3E 3E 8F F4 3B EB 37 0E C3 02 42 4C 00 -85 12 20 00 AC C3 04 42 41 53 45 00 85 12 DC 1D -C8 C2 05 53 54 41 54 45 85 12 BE 1D 96 C3 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 C3 06 55 4D 2F -4D 4F 44 00 30 12 62 C2 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C2 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C3 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 C3 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 C4 -02 23 53 00 87 12 32 C4 6A C4 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C4 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C3 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C3 -02 44 2E 00 87 12 D2 C3 44 C2 B0 C2 4C C3 64 C4 -BC C2 A2 C4 7E C4 14 C7 DC C6 2A C2 DC C3 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C2 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C4 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 C2 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A C4 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C4 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C4 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C3 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C5 03 4B 45 59 30 40 A0 C5 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 FC C5 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 0E C6 30 4D 00 C5 -06 41 43 43 45 50 54 00 3C 40 6A C6 3B 40 34 C6 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C6 92 B3 DC 05 05 24 18 42 CC 05 38 90 -0A 00 04 20 21 53 39 40 22 C6 4D 15 A2 B3 DC 05 -FD 27 B2 40 11 00 CE 05 E2 C2 03 02 30 41 B2 40 -13 00 CE 05 E2 D2 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C6 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 CC 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 DC 05 FD 27 82 48 CE 05 30 4D 60 C6 -2D 83 92 B3 DC 05 E4 23 FC 27 82 93 DE 1D 02 24 -92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C4 04 45 4D 49 54 00 30 40 8C C6 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 1D 00 00 AF 4F 02 00 8F 3F 82 C6 04 45 43 48 -4F 00 B2 40 82 48 58 C6 82 43 DE 1D 30 4D E0 C4 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C6 92 43 -DE 1D 30 4D 9C C4 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C6 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C6 EF 3F 00 C7 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C5 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C7 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C7 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C5 02 43 -52 00 30 40 46 C7 87 12 52 C7 02 0D 0A 00 14 C7 -2A C2 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C6 82 53 22 00 82 43 B4 1D -87 12 34 C2 52 C7 C8 C9 34 C2 22 00 B6 C7 80 C7 -3D 41 B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D -3E 4F 92 B3 C6 1D A2 63 C6 1D 30 4D C0 C6 82 2E -22 00 87 12 6C C7 34 C2 14 C7 C8 C9 2A C2 00 00 -04 57 4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 -60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 -18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D -F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E -CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 -0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 -1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E -FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 -0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 -09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C2 34 40 00 C2 30 4D A2 C3 07 3E -4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 -DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 -07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 -D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 -E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 -2D 15 3D 40 10 C9 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 C9 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C3 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C6 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C3 01 2C 1A 42 C6 1D A2 53 C6 1D -8A 4E 00 00 3E 4F 30 4D C6 C9 87 4C 49 54 45 52 -41 4C 82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D -BA 40 34 C2 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C7 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F -C2 1D 3E 4F 82 43 C4 1D 30 4D 87 12 2A CA B0 C3 -B6 C7 44 CA 3D 40 4C CA E2 22 5D 3E 4E CA 0A 4E -3E 4F 3D 40 64 CA 39 27 3D 40 3E CA 1A E2 BE 1D -B3 27 AD 23 66 CA 3E 4F 3D 40 3E CA BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CD -CD 3F B6 C9 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 1D 3C 49 3B 49 3A 49 3D 15 B0 12 2A C2 3A CA -A2 CA B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 -30 4D 6C C3 04 51 55 49 54 00 82 43 08 18 31 40 -E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A C2 -42 C7 92 C6 DC C6 3A CA DE C2 70 C3 52 C7 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CB 34 C2 -30 FF F2 C4 8A C3 52 C7 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CB 24 C5 D0 CA C0 C5 05 41 42 4F -52 54 3F 40 80 1C D1 3F 0C CB 86 41 42 4F 52 54 -22 00 87 12 6C C7 34 C2 2E CB C8 C9 2A C2 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D2 B0 12 -FC C5 92 C3 DC 05 38 40 A8 2A 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 DC 05 F2 23 87 12 -6A D2 34 C2 DE 1D F2 C2 B2 C6 52 C7 04 1B 5B 37 -6D 00 14 C7 54 C2 28 C5 8A CB 42 C7 52 C7 05 6C -69 6E 65 3A 14 C7 40 C3 D2 C4 14 C7 52 C7 04 1B -5B 30 6D 00 14 C7 12 CB 00 00 83 5B 27 5D 87 12 -B0 CB 34 C2 34 C2 C8 C9 C8 C9 2A C2 08 C8 01 27 -87 12 B0 C3 B6 C7 0E C8 28 C5 BE CB 2A C2 6E CA -CE C3 81 5C 92 42 C0 1D C4 1D 30 4D 9A CB 81 5B -82 43 BE 1D 30 4D C2 CB 01 5D B2 43 BE 1D 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C5 82 49 53 00 87 12 -C8 C3 F2 C2 28 C5 02 CC 9E CB 34 C2 E0 CB C8 C9 -2A C2 B0 CB E0 CB 2A C2 EA CB 09 49 4D 4D 45 44 -49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D -68 C7 87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 -BA 1D 00 00 A2 53 C6 1D 30 4D B4 CA 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C3 B6 C7 0E C8 54 C2 -28 C5 BE CB 70 C3 28 C5 66 CC 34 C2 34 C2 C8 C9 -C8 C9 34 C2 C8 C9 C8 C9 2A C2 CE CB 81 3B 82 93 -BE 1D A8 27 87 12 34 C2 2A C2 C8 C9 04 CD D0 CB -2A C2 6C CC 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CC BA 40 87 12 FC FF A2 83 C6 1D B2 43 -BE 1D 82 4F BC 1D 30 4D 84 CC 01 3A 30 12 A4 CC -87 12 92 C7 B0 C3 B6 C7 CA CC 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CC 02 00 -82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A -C6 1D 30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 -B8 1D A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C7 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CB B0 C7 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CC BA 40 86 12 FC FF E4 3F 16 CA 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CC BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CD 06 43 52 45 41 54 -45 00 B0 12 C0 CC BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CA 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CD 05 44 -45 46 45 52 30 12 12 CD 8B 3F 6E C8 05 3E 42 4F -44 59 2E 52 30 4D 6A CD 04 43 4F 44 45 00 B0 12 -C0 CC 2A 82 82 4A C6 1D 87 12 B2 CC 94 D0 66 D0 -2A C2 B8 CD 07 43 4F 44 45 4E 4E 4D 87 12 8C CC -D0 CB C2 CD 2A C2 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D0 04 CD 2A C2 1A CB 03 41 53 4D 92 42 -DA 1D EC 1D B2 40 6A D0 DA 1D D9 3F E8 CD 06 45 -4E 44 41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 -A2 53 C6 1D B2 43 BE 1D 30 40 AE D0 00 00 05 4C -4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 -2A C2 02 00 A2 52 C6 1D ED 3F 0A CC 85 48 49 32 -4C 4F 87 12 F2 C4 8C CE C8 C9 D0 CB 94 D0 66 D0 -2A C2 5C CE 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 1D A2 52 C6 1D BE 40 28 C5 00 00 2E 53 30 4D -9E CD 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D -BA 40 24 C5 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C7 84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F -30 4D D4 CD 85 42 45 47 49 4E 30 40 F2 C4 B2 CE -85 55 4E 54 49 4C 39 40 28 C5 A2 52 C6 1D 1A 42 -C6 1D 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CD -85 41 47 41 49 4E 39 40 24 C5 EF 3F 34 CD 85 57 -48 49 4C 45 87 12 78 CE 78 C2 2A C2 22 CC 86 52 -45 50 45 41 54 00 87 12 F6 CE B8 CE 2A C2 92 CE -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 -C6 1D BE 40 3C C5 FE FF A2 53 00 1C 1A 42 00 1C -8A 43 00 00 30 4D DA C9 84 4C 4F 4F 50 00 39 40 -5E C5 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E -FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C5 85 2B 4C 4F -4F 50 39 40 4C C5 E5 3F 48 CF 85 4C 45 41 56 45 -1A 42 C6 1D BA 40 6E C5 00 00 BA 40 24 C5 02 00 -B2 50 06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C -89 4A 00 00 30 4D 8A CF 04 4D 4F 56 45 00 0A 4E -38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C -F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE CE -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CD -34 C2 10 00 34 C2 00 00 3C C5 34 C2 00 00 C8 C9 -5E C5 0A D0 F2 C4 34 C2 C8 1D 44 C2 F2 C2 C8 C9 -FA C2 8A CD 34 C2 CA 1D FA C2 2A C2 AE CB 05 46 -4F 52 54 48 84 12 24 D0 8E D0 C2 D3 CC D0 2E D0 -74 CE 7C CF F8 D1 BE D0 8E D2 A8 D2 D0 CE 34 D3 -00 00 CC D1 D8 CB AC CD 00 00 F0 CE 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D0 C4 D9 2C DA 78 D9 -96 DA 3E D9 BA DA 6A D6 00 00 34 D9 E4 D9 96 D9 -D4 D9 7A D7 00 00 00 00 C8 DA 58 D0 5C D0 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D -9D 3F 3C CC 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 1D 38 40 CA 1D 8A 3F 9E C7 04 4F -4E 4C 59 00 82 43 CC 1D 30 4D 20 CF 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D -C4 CE 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CC 86 5B 54 48 45 4E 5D 00 30 4D 14 D1 -86 5B 45 4C 53 45 5D 00 87 12 34 C2 00 00 36 C3 -B0 C3 B6 C7 1C CA 44 C2 28 C5 8E D1 8A C2 8A C2 -52 C7 06 5B 54 48 45 4E 5D 00 EA D0 32 C5 5C D1 -36 C7 40 C3 54 C2 32 C5 30 D1 2A C2 8A C2 8A C2 -52 C7 06 5B 45 4C 53 45 5D 00 EA D0 32 C5 7C D1 -36 C7 40 C3 54 C2 32 C5 2E D1 2A C2 52 C7 04 5B -49 46 5D 00 EA D0 32 C5 30 D1 24 C5 2E D1 36 C7 -52 C7 05 0D 0A 6B 6F 20 14 C7 92 C6 2A CA 24 C5 -30 D1 20 D1 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D1 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C3 B6 C7 0E C8 6C C2 2A C2 B4 D1 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C3 B6 C7 0E C8 -6C C2 64 C3 2A C2 E8 D1 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 CF 06 4D 41 52 4B 45 52 00 -B0 12 C0 CC BA 40 84 12 FC FF BA 40 E6 D1 FE FF -9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D -30 40 0A CD 34 D0 C4 D0 D8 D0 2C D2 3A 4E 82 4A -C8 1D 2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D0 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D2 8A D0 -DA DA 0E CF 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D2 92 42 0C 18 70 D2 EF 3F 60 D2 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 1D 6E D2 92 42 -C6 1D 70 D2 30 4D 74 D2 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F -F0 CF 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C6 24 C6 B2 40 3E D3 3C D3 -B2 40 8A D0 0E 18 B2 40 DA DA 0C 18 30 12 7E D2 -B2 40 8C C6 8A C6 B2 40 46 C7 44 C7 B2 40 A0 C5 -9E C5 B2 40 18 00 0A 18 37 40 1A C2 36 40 BC C2 -35 40 0E C2 34 40 00 C2 39 40 10 00 29 83 89 43 -E0 1D FC 23 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D -30 41 C2 D2 04 57 41 52 4D 00 30 40 3E D3 3D 40 -72 D3 92 C3 30 01 1E 42 08 18 0E 93 11 24 D2 B3 -01 02 02 20 3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 C7 06 0D 1B 5B 37 6D 23 00 14 C7 E2 C4 -52 C7 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 C7 34 C2 80 FF F2 C4 28 C3 D2 C4 52 C7 -0B 62 79 74 65 73 20 66 72 65 65 20 24 C5 8A CB -E2 D0 04 43 4F 4C 44 00 92 B3 CA 05 FD 23 B2 40 -04 A5 20 01 92 D3 30 01 B2 40 88 5A 5C 01 B2 40 -EF 7F 06 02 B2 43 02 02 E2 D2 05 02 B2 40 08 FF -02 02 B2 D0 08 FF 06 02 B2 D0 F0 00 04 02 F2 40 -F0 00 22 03 F2 D0 F0 00 26 03 F2 D0 0F 00 24 03 -F2 40 A5 00 61 01 B2 40 11 00 66 01 39 40 40 00 -B2 40 33 00 64 01 D2 43 61 01 92 D2 9E 01 08 18 -38 40 59 14 18 83 FE 23 19 83 FA 23 B2 D2 B0 01 -92 C3 B0 01 F2 D0 10 00 2A 03 F2 C0 40 00 A1 04 -39 40 00 04 29 83 89 43 00 1C FC 23 39 40 32 00 -29 83 B9 40 D4 D3 CE FF FB 23 B2 40 2C C6 F0 FF -B2 40 81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 -C8 05 92 C3 C0 05 92 D3 DA 05 3F 40 80 1C 31 40 -E0 1C 30 12 3A D3 35 3F 38 40 C0 1D 39 48 2A 48 -09 5A 1A 52 C4 1D 09 9A 03 24 7E 9A FC 27 1A 83 -0E 4A 2A 88 82 4A C4 1D 30 4D 1C 15 B0 12 2A C2 -B6 C7 0E C8 32 C5 D0 D4 CA C8 28 C5 BE CB F2 D4 -D2 D4 29 4E 39 90 86 12 02 20 2E 53 0A 3C 39 90 -85 12 03 20 1E 4E 02 00 04 3C 39 90 84 12 01 20 -2E 52 1B 17 30 41 3E 40 28 00 B0 12 BA D4 19 42 -C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 -12 12 C4 1D 92 53 C4 1D B0 12 2A C2 B6 C7 CA C8 -28 C5 30 D5 26 D5 21 53 3E 90 10 00 83 2D E1 2B -32 D5 B2 41 C4 1D DD 3F 87 12 B0 C3 98 D4 40 D5 -0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 -23 00 2D 20 92 53 C4 1D B0 12 BA D4 0E 93 03 20 -3C 40 00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C -2E 93 03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 -20 02 12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 -03 20 3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 1D -A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 -26 00 07 20 3C 40 10 02 92 53 C4 1D B0 12 BA D4 -ED 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 C4 1D -B0 12 0E D5 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 -0E D5 92 92 C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 -0C 5E DA 3F B0 12 0E D5 FA 23 3C 50 10 00 B0 12 -F6 D4 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 -B0 C3 98 D4 16 D6 FE 90 26 00 00 00 3E 40 20 00 -03 20 3C 50 82 00 C8 3F B0 12 0E D5 E1 23 3C 50 -80 00 B0 12 F6 D4 DC 3F 1C C6 04 52 45 54 49 00 -87 12 34 C2 00 13 C8 C9 2A C2 34 C2 2C 00 38 D5 -0E D6 54 D6 2E 4E 0E DC 09 4B A4 3F 3E CE 03 4D -4F 56 84 12 4A D6 00 40 5E D6 05 4D 4F 56 2E 42 -84 12 4A D6 40 40 00 00 03 41 44 44 84 12 4A D6 -00 50 78 D6 05 41 44 44 2E 42 84 12 4A D6 40 50 -84 D6 04 41 44 44 43 00 84 12 4A D6 00 60 92 D6 -06 41 44 44 43 2E 42 00 84 12 4A D6 40 60 3A D6 -04 53 55 42 43 00 84 12 4A D6 00 70 B0 D6 06 53 -55 42 43 2E 42 00 84 12 4A D6 40 70 BE D6 03 53 -55 42 84 12 4A D6 00 80 CE D6 05 53 55 42 2E 42 -84 12 4A D6 40 80 20 CE 03 43 4D 50 84 12 4A D6 -00 90 E8 D6 05 43 4D 50 2E 42 84 12 4A D6 40 90 -0E CE 04 44 41 44 44 00 84 12 4A D6 00 A0 02 D7 -06 44 41 44 44 2E 42 00 84 12 4A D6 40 A0 F4 D6 -03 42 49 54 84 12 4A D6 00 B0 20 D7 05 42 49 54 -2E 42 84 12 4A D6 40 B0 2C D7 03 42 49 43 84 12 -4A D6 00 C0 3A D7 05 42 49 43 2E 42 84 12 4A D6 -40 C0 46 D7 03 42 49 53 84 12 4A D6 00 D0 54 D7 -05 42 49 53 2E 42 84 12 4A D6 40 D0 00 00 03 58 -4F 52 84 12 4A D6 00 E0 6E D7 05 58 4F 52 2E 42 -84 12 4A D6 40 E0 A0 D6 03 41 4E 44 84 12 4A D6 -00 F0 88 D7 05 41 4E 44 2E 42 84 12 4A D6 40 F0 -B0 C3 38 D5 A6 D7 0A 4C 3C F0 70 00 8A 10 3A F0 -0F 00 0C DA 4F 3F DA D6 03 52 52 43 84 12 A0 D7 -00 10 B8 D7 05 52 52 43 2E 42 84 12 A0 D7 40 10 -C4 D7 04 53 57 50 42 00 84 12 A0 D7 80 10 D2 D7 -03 52 52 41 84 12 A0 D7 00 11 E0 D7 05 52 52 41 -2E 42 84 12 A0 D7 40 11 EC D7 03 53 58 54 84 12 -A0 D7 80 11 00 00 04 50 55 53 48 00 84 12 A0 D7 -00 12 06 D8 06 50 55 53 48 2E 42 00 84 12 A0 D7 -40 12 60 D7 04 43 41 4C 4C 00 84 12 A0 D7 80 12 -1A 53 0E 4A 87 12 E2 C4 52 C7 0D 6F 75 74 20 6F -66 20 62 6F 75 6E 64 73 3A CB B0 C3 98 D4 50 D8 -92 53 C4 1D 3E 40 2C 00 B0 12 2A C2 B6 C7 CA C8 -28 C5 BE CB 04 D6 68 D8 0A 4E 3E 4F 1A 83 E0 33 -29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A -38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 -5A 06 8F 3F FA D7 04 52 52 43 4D 00 84 12 4A D8 -50 00 96 D8 04 52 52 41 4D 00 84 12 4A D8 50 01 -A4 D8 04 52 4C 41 4D 00 84 12 4A D8 50 02 B2 D8 -04 52 52 55 4D 00 84 12 4A D8 50 03 14 D8 05 50 -55 53 48 4D 84 12 4A D8 00 15 CE D8 04 50 4F 50 -4D 00 84 12 4A D8 00 17 85 12 00 3C C0 D8 03 53 -3E 3D 85 12 00 38 EE D8 02 53 3C 00 85 12 00 34 -DC D8 03 30 3E 3D 85 12 00 30 02 D9 02 30 3C 00 -85 12 00 30 00 00 02 55 3C 00 85 12 00 2C 16 D9 -03 55 3E 3D 85 12 00 28 0C D9 03 30 3C 3E 85 12 -00 24 2A D9 02 30 3D 00 85 12 00 20 00 00 02 49 -46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 0E 4A -30 4D 20 D9 04 54 48 45 4E 00 1A 42 C6 1D 08 4E -3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 61 2F -88 DA 00 00 30 4D 10 D7 04 45 4C 53 45 00 1A 42 -C6 1D BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 8F 4A -00 00 E3 3F 54 D9 05 55 4E 54 49 4C 3A 4F 08 4E -3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE -40 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 1D -30 4D 94 D7 05 41 47 41 49 4E 87 12 E8 D8 9C D9 -2A C2 00 00 05 57 48 49 4C 45 87 12 42 D9 78 C2 -2A C2 F8 D8 06 52 45 50 45 41 54 00 87 12 E8 D8 -9C D9 5A D9 2A C2 F8 D9 3D 41 2E 4E 08 4E 3E 4F -2A 48 0A 93 88 43 00 00 CA 23 98 42 C6 1D 00 00 -30 4D 24 D8 03 42 57 31 84 12 F6 D9 E0 1D 14 DA -03 42 57 32 84 12 F6 D9 E2 1D 20 DA 03 42 57 33 -84 12 F6 D9 E4 1D 38 DA 3D 41 1A 42 C6 1D 2E 4E -28 4E 08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 -C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 -84 12 36 DA E6 1D 5C DA 03 46 57 32 84 12 36 DA -E8 1D 68 DA 03 46 57 33 84 12 36 DA EA 1D 3E 90 -00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 -00 08 30 4D 74 DA 04 47 4F 54 4F 00 87 12 E8 D8 -B0 CB BE C9 2A C2 00 00 05 3F 47 4F 54 4F 87 12 -7E DA B0 CB BE C9 2A C2 00 00 03 4A 4D 50 87 12 -B0 CB CA D9 2A C2 A8 DA 04 3F 4A 4D 50 00 87 12 -7E DA B0 CB 78 C2 9C D9 2A C2 -@FFFE -D4 D3 -q diff --git a/binaries/MSP_EXP430FR5739_8MHz.txt b/binaries/MSP_EXP430FR5739_8MHz.txt index 1de7e2a..c3d368c 100644 --- a/binaries/MSP_EXP430FR5739_8MHz.txt +++ b/binaries/MSP_EXP430FR5739_8MHz.txt @@ -1,100 +1,82 @@ @1800 -10 00 04 00 51 55 40 1F 05 00 18 00 D8 DA 8A D0 -2C 01 7B B0 FC C5 0E C6 +10 00 04 00 51 55 40 1F 05 00 18 00 6A D8 D0 CE +2D 01 6B B0 B6 C4 C8 C4 @C200 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 C2 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 C2 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 C2 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 C2 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E C2 02 3E 52 00 -0E 12 3E 4F 30 4D 96 C2 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 C2 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C C2 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 C2 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 C3 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 C2 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 C3 02 31 2D 00 -1E 83 30 4D D8 C2 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C C3 -02 30 3D 00 1E 83 0E 7E 30 4D 60 C3 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A C3 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC C2 01 3E 3E 8F F4 3B EB 37 0E C3 02 42 4C 00 -85 12 20 00 AC C3 04 42 41 53 45 00 85 12 DC 1D -C8 C2 05 53 54 41 54 45 85 12 BE 1D 96 C3 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 C3 06 55 4D 2F -4D 4F 44 00 30 12 62 C2 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 C2 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 C3 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 C3 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 C4 -02 23 53 00 87 12 32 C4 6A C4 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 C4 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 C3 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 C3 -02 44 2E 00 87 12 D2 C3 44 C2 B0 C2 4C C3 64 C4 -BC C2 A2 C4 7E C4 14 C7 DC C6 2A C2 DC C3 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 C2 -01 2E 0E 93 F6 37 38 43 F5 3F 8E C4 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 C2 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A C4 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE C4 06 55 4E 4C 4F 4F 50 00 F5 3F -EC C4 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E C3 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 C5 03 4B 45 59 30 40 A0 C5 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 FC C5 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 0E C6 30 4D 00 C5 -06 41 43 43 45 50 54 00 3C 40 6A C6 3B 40 34 C6 -2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 -3D 40 5E C6 92 B3 DC 05 05 24 18 42 CC 05 38 90 -0A 00 04 20 21 53 39 40 22 C6 4D 15 A2 B3 DC 05 -FD 27 B2 40 11 00 CE 05 E2 C2 03 02 30 41 B2 40 -13 00 CE 05 E2 D2 03 02 30 41 00 00 05 53 4C 45 -45 50 30 40 26 C6 12 D2 0A 18 FB 3F 21 52 3A 17 -58 42 CC 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 -2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 -1E 53 A2 B3 DC 05 FD 27 82 48 CE 05 30 4D 60 C6 -2D 83 92 B3 DC 05 E4 23 FC 27 82 93 DE 1D 02 24 -92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D -B0 C4 04 45 4D 49 54 00 30 40 8C C6 08 4E 3E 4F -E0 3F 3F 80 06 00 8F 4E 04 00 3E 40 54 00 BF 40 -3C 1D 00 00 AF 4F 02 00 8F 3F 82 C6 04 45 43 48 -4F 00 B2 40 82 48 58 C6 82 43 DE 1D 30 4D E0 C4 -06 4E 4F 45 43 48 4F 00 B2 40 30 4D 58 C6 92 43 -DE 1D 30 4D 9C C4 05 53 50 41 43 45 2F 83 8F 4E -00 00 3E 40 20 00 D0 3F D6 C6 06 53 50 41 43 45 -53 00 0E 93 09 24 0D 12 3D 40 FE C6 EF 3F 00 C7 -2D 83 1E 83 EB 23 3D 41 3E 4F 30 4D 66 C5 04 54 -59 50 45 00 0E 93 0F 24 1E 15 3D 40 2A C7 28 4F -7E 48 8F 48 00 00 2F 83 AF 3F 2C C7 2D 83 91 83 -02 00 F5 23 1D 17 2F 53 3E 4F 30 4D 10 C5 02 43 -52 00 30 40 46 C7 87 12 52 C7 02 0D 0A 00 14 C7 -2A C2 2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E -1D B3 0D 63 30 4D EA C6 82 53 22 00 82 43 B4 1D -87 12 34 C2 52 C7 C8 C9 34 C2 22 00 B6 C7 80 C7 -3D 41 B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D -3E 4F 92 B3 C6 1D A2 63 C6 1D 30 4D C0 C6 82 2E -22 00 87 12 6C C7 34 C2 14 C7 C8 C9 2A C2 00 00 -04 57 4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A -3A 5C 28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 C2 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 C2 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E C2 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 C2 02 3E 52 00 0E 12 3E 4F 30 4D 70 C2 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 C2 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 C2 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 C2 +01 21 BE 4F 00 00 3E 4F 30 4D CC C2 02 30 3D 00 +1E 83 0E 7E 30 4D FC C2 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 C3 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 C2 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 C3 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 C3 02 23 53 00 87 12 88 C3 C0 C3 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 C3 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E C2 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 C3 34 C2 86 C2 D4 C2 BA C3 +92 C2 F8 C3 D4 C3 D6 C5 42 C9 82 C5 2A C2 22 C3 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 C3 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 C4 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 C4 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 C4 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C2 03 02 30 41 B2 40 13 00 CE 05 E2 D2 +03 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 C4 +B0 12 B6 C4 12 D2 0A 18 F9 3F F0 C2 06 41 43 43 +45 50 54 00 3C 40 64 C5 3B 40 2E C5 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 C5 +92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 CC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 +FD 27 82 48 CE 05 30 4D 5A C5 2D 83 92 B3 DC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E C2 04 45 4D 49 +54 00 30 40 86 C5 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C C5 04 45 43 48 4F 00 B2 40 82 48 +52 C5 82 43 DE 1D 30 4D 32 C4 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 C5 92 43 DE 1D 30 4D 20 C4 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC C5 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE C5 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 C3 +02 43 52 00 30 40 08 C6 87 12 1E C6 02 0D 0A 00 +D6 C5 2A C2 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 C3 82 53 22 00 82 43 B4 1D 87 12 14 C6 +1E C6 B0 C8 14 C6 22 00 80 C6 4C C6 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA C5 82 2E 22 00 87 12 38 C6 14 C6 D6 C5 +B0 C8 2A C2 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E @@ -104,302 +86,281 @@ CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C -00 00 35 40 0E C2 34 40 00 C2 30 4D A2 C3 07 3E +00 00 35 40 0E C2 34 40 00 C2 30 4D 82 C2 07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 -8F 48 02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 -2D 15 3D 40 10 C9 09 43 08 43 3F 82 8F 4E 06 00 -0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 -02 00 E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 -04 24 3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F -12 C9 2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 -7A 90 F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 -8F 49 02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 -79 90 0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 -09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 C3 -2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A -4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 -3F 50 06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 -BF 4F 00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 -00 00 9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 -2F 53 30 4D AC C6 07 45 58 45 43 55 54 45 0A 4E -3E 4F 00 4A 26 C3 01 2C 1A 42 C6 1D A2 53 C6 1D -8A 4E 00 00 3E 4F 30 4D C6 C9 87 4C 49 54 45 52 -41 4C 82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D -BA 40 34 C2 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 -32 C0 00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 -EB 3F 30 4D 3E C7 05 43 4F 55 4E 54 2F 83 1E 53 -8F 4E 00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F -C2 1D 3E 4F 82 43 C4 1D 30 4D 87 12 2A CA B0 C3 -B6 C7 44 CA 3D 40 4C CA E2 22 5D 3E 4E CA 0A 4E -3E 4F 3D 40 64 CA 39 27 3D 40 3E CA 1A E2 BE 1D -B3 27 AD 23 66 CA 3E 4F 3D 40 3E CA BA 23 DE 53 -00 00 68 4E 08 5E F8 40 3F 00 00 00 3D 40 30 CD -CD 3F B6 C9 08 45 56 41 4C 55 41 54 45 00 39 40 -C0 1D 3C 49 3B 49 3A 49 3D 15 B0 12 2A C2 3A CA -A2 CA B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 -30 4D 6C C3 04 51 55 49 54 00 82 43 08 18 31 40 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 C7 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 C7 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E C3 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E C4 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 C2 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC C4 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 C5 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE C8 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 C6 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 C6 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 C9 42 C9 80 C6 50 C9 +3D 40 58 C9 CC 22 82 3E 5A C9 0A 4E 3E 4F 3D 40 +70 C9 23 27 3D 40 4A C9 1A E2 BE 1D A1 27 B5 23 +72 C9 3E 4F 3D 40 4A C9 B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 CC CB 3F D2 C8 +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A C2 46 C9 AE C9 B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 C3 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A C2 -42 C7 92 C6 DC C6 3A CA DE C2 70 C3 52 C7 0C 73 -74 61 63 6B 20 65 6D 70 74 79 21 00 2E CB 34 C2 -30 FF F2 C4 8A C3 52 C7 0A 46 52 41 4D 20 66 75 -6C 6C 21 00 2E CB 24 C5 D0 CA C0 C5 05 41 42 4F -52 54 3F 40 80 1C D1 3F 0C CB 86 41 42 4F 52 54 -22 00 87 12 6C C7 34 C2 2E CB C8 C9 2A C2 8F 93 -02 00 03 20 2F 52 3E 4F 30 4D B0 12 F0 D2 B0 12 -FC C5 92 C3 DC 05 38 40 50 55 39 42 09 59 03 43 -19 83 FD 23 18 83 F9 23 92 B3 DC 05 F2 23 87 12 -6A D2 34 C2 DE 1D F2 C2 B2 C6 52 C7 04 1B 5B 37 -6D 00 14 C7 54 C2 28 C5 8A CB 42 C7 52 C7 05 6C -69 6E 65 3A 14 C7 40 C3 D2 C4 14 C7 52 C7 04 1B -5B 30 6D 00 14 C7 12 CB 00 00 83 5B 27 5D 87 12 -B0 CB 34 C2 34 C2 C8 C9 C8 C9 2A C2 08 C8 01 27 -87 12 B0 C3 B6 C7 0E C8 28 C5 BE CB 2A C2 6E CA -CE C3 81 5C 92 42 C0 1D C4 1D 30 4D 9A CB 81 5B -82 43 BE 1D 30 4D C2 CB 01 5D B2 43 BE 1D 30 4D -BE 4F 02 00 3E 4F 30 4D 72 C5 82 49 53 00 87 12 -C8 C3 F2 C2 28 C5 02 CC 9E CB 34 C2 E0 CB C8 C9 -2A C2 B0 CB E0 CB 2A C2 EA CB 09 49 4D 4D 45 44 +04 C6 8C C5 42 C9 82 C5 46 C9 A4 C2 0C C3 1E C6 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 CA +14 C6 30 FF A0 C8 26 C3 1E C6 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 CA 3C C4 E0 C9 C2 C8 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E CA 86 41 42 4F +52 54 22 00 87 12 38 C6 14 C6 40 CA B0 C8 2A C2 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 CF +B0 12 B6 C4 92 C3 DC 05 38 40 50 55 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 DC 05 F3 23 87 12 +42 CF 14 C6 DE 1D EA C2 AC C5 1E C6 04 1B 5B 37 +6D 00 D6 C5 58 C2 40 C4 9A CA 04 C6 1E C6 05 6C +69 6E 65 3A D6 C5 D0 C2 24 C4 D6 C5 1E C6 04 1B +5B 30 6D 00 D6 C5 24 CA 00 00 83 5B 27 5D 87 12 +C0 CA 14 C6 14 C6 B0 C8 B0 C8 2A C2 E8 C6 01 27 +87 12 42 C9 80 C6 EE C6 40 C4 CE CA 2A C2 7A C9 +32 C3 81 5C 92 42 C0 1D C4 1D 30 4D AA CA 81 5B +82 43 BE 1D 30 4D D2 CA 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A C8 82 49 53 00 87 12 +BE C9 EA C2 40 C4 12 CB AE CA 14 C6 F0 CA B0 C8 +2A C2 C0 CA F0 CA 2A C2 FA CA 09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D -68 C7 87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 -BA 1D 00 00 A2 53 C6 1D 30 4D B4 CA 88 50 4F 53 -54 50 4F 4E 45 00 87 12 B0 C3 B6 C7 0E C8 54 C2 -28 C5 BE CB 70 C3 28 C5 66 CC 34 C2 34 C2 C8 C9 -C8 C9 34 C2 C8 C9 C8 C9 2A C2 CE CB 81 3B 82 93 -BE 1D A8 27 87 12 34 C2 2A C2 C8 C9 04 CD D0 CB -2A C2 6C CC 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E -00 00 1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 -B0 12 F0 CC BA 40 87 12 FC FF A2 83 C6 1D B2 43 -BE 1D 82 4F BC 1D 30 4D 84 CC 01 3A 30 12 A4 CC -87 12 92 C7 B0 C3 B6 C7 CA CC 3D 41 08 4E 7A 4E -5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 -09 5E 3E 4F BA 40 30 40 00 00 BA 40 B6 CC 02 00 -82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A -C6 1D 30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 -B8 1D A8 49 FE FF 89 48 00 00 30 4D 87 12 52 C7 -0F 73 74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 -3A CB B0 C7 08 56 41 52 49 41 42 4C 45 00 B0 12 -C0 CC BA 40 86 12 FC FF E4 3F 16 CA 08 43 4F 4E -53 54 41 4E 54 00 B0 12 C0 CC BA 40 85 12 FC FF -8A 4E FE FF 3E 4F D5 3F 4C CD 06 43 52 45 41 54 -45 00 B0 12 C0 CC BA 40 85 12 FC FF 8A 4A FE FF -C8 3F 84 CA 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 -84 12 00 00 8A 4D 02 00 3D 41 30 4D 84 CD 05 44 -45 46 45 52 30 12 12 CD 8B 3F 6E C8 05 3E 42 4F -44 59 2E 52 30 4D 6A CD 04 43 4F 44 45 00 B0 12 -C0 CC 2A 82 82 4A C6 1D 87 12 B2 CC 94 D0 66 D0 -2A C2 B8 CD 07 43 4F 44 45 4E 4E 4D 87 12 8C CC -D0 CB C2 CD 2A C2 00 00 07 45 4E 44 43 4F 44 45 -87 12 AE D0 04 CD 2A C2 1A CB 03 41 53 4D 92 42 -DA 1D EC 1D B2 40 6A D0 DA 1D D9 3F E8 CD 06 45 -4E 44 41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 -05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 -A2 53 C6 1D B2 43 BE 1D 30 40 AE D0 00 00 05 4C -4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 -2A C2 02 00 A2 52 C6 1D ED 3F 0A CC 85 48 49 32 -4C 4F 87 12 F2 C4 8C CE C8 C9 D0 CB 94 D0 66 D0 -2A C2 5C CE 82 49 46 00 2F 83 8F 4E 00 00 1E 42 -C6 1D A2 52 C6 1D BE 40 28 C5 00 00 2E 53 30 4D -9E CD 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D -BA 40 24 C5 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D -0E C7 84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F -30 4D D4 CD 85 42 45 47 49 4E 30 40 F2 C4 B2 CE -85 55 4E 54 49 4C 39 40 28 C5 A2 52 C6 1D 1A 42 -C6 1D 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D FA CD -85 41 47 41 49 4E 39 40 24 C5 EF 3F 34 CD 85 57 -48 49 4C 45 87 12 78 CE 78 C2 2A C2 22 CC 86 52 -45 50 45 41 54 00 87 12 F6 CE B8 CE 2A C2 92 CE -82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 -C6 1D BE 40 3C C5 FE FF A2 53 00 1C 1A 42 00 1C -8A 43 00 00 30 4D DA C9 84 4C 4F 4F 50 00 39 40 -5E C5 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E -FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 -8E 4A 00 00 F6 3F 3E 4F 30 4D 98 C5 85 2B 4C 4F -4F 50 39 40 4C C5 E5 3F 48 CF 85 4C 45 41 56 45 -1A 42 C6 1D BA 40 6E C5 00 00 BA 40 24 C5 02 00 -B2 50 06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C -89 4A 00 00 30 4D 8A CF 04 4D 4F 56 45 00 0A 4E +C4 C9 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 C9 +80 C6 EE C6 58 C2 40 C4 CE CA 0C C3 40 C4 5C CB +14 C6 14 C6 B0 C8 B0 C8 14 C6 B0 C8 B0 C8 2A C2 +DE CA 81 3B 82 93 BE 1D B5 27 87 12 14 C6 2A C2 +B0 C8 FA CB E0 CA 2A C2 62 CB 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 CB 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A CB 01 3A 30 12 A0 CB 92 B3 C6 1D A2 63 C6 1D +87 12 42 C9 80 C6 C8 CB 3D 41 08 4E 7A 4E 5A D3 +5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E C6 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C CA 90 C9 05 44 45 46 45 52 +B0 12 B8 CB BA 40 30 40 FC FF BA 40 AE CB FE FF +E3 3F 1E C9 06 43 52 45 41 54 45 00 B0 12 B8 CB +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A CC 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E C7 05 3E 42 4F 44 59 2E 52 +30 4D 44 CC 04 43 4F 44 45 00 B0 12 B8 CB A2 82 +C6 1D 87 12 D2 CE AC CE 2A C2 84 CC 07 43 4F 44 +45 4E 4E 4D B0 12 86 CB F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 CE FA CB 2A C2 2C CA 03 41 +53 4D B2 40 B0 CE DA 1D E0 3F AC CC 06 45 4E 44 +41 53 4D 00 87 12 B4 CC F4 CE 2A C2 00 00 05 43 +4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 +C6 1D B2 43 BE 1D 30 40 E0 CE 00 00 05 4C 4F 32 +48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A C2 +02 00 A2 52 C6 1D ED 3F 1A CB 85 48 49 32 4C 4F +87 12 A0 C8 4A CD B0 C8 E0 CA D2 CE AC CE 2A C2 +1A CD 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D +A2 52 C6 1D BE 40 40 C4 00 00 2E 53 30 4D 5E CC +84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 +3C C4 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 C5 +84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D +9C CC 85 42 45 47 49 4E 30 40 A0 C8 70 CD 85 55 +4E 54 49 4C 39 40 40 C4 A2 52 C6 1D 1A 42 C6 1D +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE CC 85 41 +47 41 49 4E 39 40 3C C4 EF 3F 7A C6 85 57 48 49 +4C 45 87 12 36 CD 76 C2 2A C2 34 C6 86 52 45 50 +45 41 54 00 87 12 B4 CD 76 CD 2A C2 50 CD 82 44 +4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D +BE 40 54 C4 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 +00 00 30 4D E2 C8 84 4C 4F 4F 50 00 39 40 76 C4 +A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF +1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A +00 00 F6 3F 3E 4F 30 4D 90 C4 85 2B 4C 4F 4F 50 +39 40 64 C4 E5 3F 06 CE 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A -19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D FE CE -0A 56 4F 43 41 42 55 4C 41 52 59 00 87 12 72 CD -34 C2 10 00 34 C2 00 00 3C C5 34 C2 00 00 C8 C9 -5E C5 0A D0 F2 C4 34 C2 C8 1D 44 C2 F2 C2 C8 C9 -FA C2 8A CD 34 C2 CA 1D FA C2 2A C2 AE CB 05 46 -4F 52 54 48 84 12 24 D0 8E D0 C2 D3 CC D0 2E D0 -74 CE 7C CF F8 D1 BE D0 8E D2 A8 D2 D0 CE 34 D3 -00 00 CC D1 D8 CB AC CD 00 00 F0 CE 09 41 53 53 -45 4D 42 4C 45 52 84 12 24 D0 C2 D9 2A DA 76 D9 -94 DA 3C D9 B8 DA 68 D6 00 00 32 D9 E2 D9 94 D9 -D2 D9 78 D7 00 00 00 00 C6 DA 58 D0 5C D0 04 41 -4C 53 4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D -9D 3F 3C CC 08 50 52 45 56 49 4F 55 53 00 3A 40 -0E 00 39 40 CC 1D 38 40 CA 1D 8A 3F 9E C7 04 4F -4E 4C 59 00 82 43 CC 1D 30 4D 20 CF 0B 44 45 46 -49 4E 49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D -C4 CE 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F -39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 -19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 -30 4D BA CC 86 5B 54 48 45 4E 5D 00 30 4D 14 D1 -86 5B 45 4C 53 45 5D 00 87 12 34 C2 00 00 36 C3 -B0 C3 B6 C7 1C CA 44 C2 28 C5 8E D1 8A C2 8A C2 -52 C7 06 5B 54 48 45 4E 5D 00 EA D0 32 C5 5C D1 -36 C7 40 C3 54 C2 32 C5 30 D1 2A C2 8A C2 8A C2 -52 C7 06 5B 45 4C 53 45 5D 00 EA D0 32 C5 7C D1 -36 C7 40 C3 54 C2 32 C5 2E D1 2A C2 52 C7 04 5B -49 46 5D 00 EA D0 32 C5 30 D1 24 C5 2E D1 36 C7 -52 C7 05 0D 0A 6B 6F 20 14 C7 92 C6 2A CA 24 C5 -30 D1 20 D1 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 -30 4D A4 D1 89 5B 44 45 46 49 4E 45 44 5D 87 12 -B0 C3 B6 C7 0E C8 6C C2 2A C2 B4 D1 8B 5B 55 4E -44 45 46 49 4E 45 44 5D 87 12 B0 C3 B6 C7 0E C8 -6C C2 64 C3 2A C2 E8 D1 3D 41 B2 4E 0E 18 A2 4E -0C 18 3E 4F 44 3C B8 CF 06 4D 41 52 4B 45 52 00 -B0 12 C0 CC BA 40 84 12 FC FF BA 40 E6 D1 FE FF -9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D -30 40 0A CD 34 D0 C4 D0 D8 D0 2C D2 3A 4E 82 4A -C8 1D 2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 -29 83 18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 -F6 23 2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D A4 D0 -09 50 57 52 5F 53 54 41 54 45 84 12 24 D2 8A D0 -D8 DA 0E CF 09 52 53 54 5F 53 54 41 54 45 92 42 -0E 18 6E D2 92 42 0C 18 70 D2 EF 3F 60 D2 08 50 -57 52 5F 48 45 52 45 00 92 42 C8 1D 6E D2 92 42 -C6 1D 70 D2 30 4D 74 D2 08 52 53 54 5F 48 45 52 -45 00 92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F -F0 CF 04 57 49 50 45 00 39 40 10 00 29 83 B9 43 -80 FF FC 23 B2 40 26 C6 24 C6 B2 40 3E D3 3C D3 -B2 40 8A D0 0E 18 B2 40 D8 DA 0C 18 30 12 7E D2 -B2 40 8C C6 8A C6 B2 40 46 C7 44 C7 B2 40 A0 C5 -9E C5 B2 40 18 00 0A 18 37 40 1A C2 36 40 BC C2 -35 40 0E C2 34 40 00 C2 39 40 10 00 29 83 89 43 -E0 1D FC 23 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D -30 41 C2 D2 04 57 41 52 4D 00 30 40 3E D3 3D 40 -72 D3 92 C3 30 01 1E 42 08 18 0E 93 11 24 D2 B3 -01 02 02 20 3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 -0A 00 B2 27 3E 90 16 00 AF 2F 2E 93 7E 27 87 2F -30 4D 52 C7 06 0D 1B 5B 37 6D 23 00 14 C7 E2 C4 -52 C7 1F 46 61 73 74 46 6F 72 74 68 20 56 33 30 -30 20 28 43 29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E -73 20 14 C7 34 C2 80 FF F2 C4 28 C3 D2 C4 52 C7 -0B 62 79 74 65 73 20 66 72 65 65 20 24 C5 8A CB -E2 D0 04 43 4F 4C 44 00 92 B3 CA 05 FD 23 B2 40 -04 A5 20 01 92 D3 30 01 B2 40 88 5A 5C 01 B2 40 -EF 7F 06 02 B2 43 02 02 E2 D2 05 02 B2 40 08 FF -02 02 B2 D0 08 FF 06 02 B2 D0 F0 00 04 02 F2 40 -F0 00 22 03 F2 D0 F0 00 26 03 F2 D0 0F 00 24 03 -F2 40 A5 00 61 01 82 43 66 01 39 40 80 00 B2 40 -33 00 64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 B2 D2 B0 01 92 C3 -B0 01 F2 D0 10 00 2A 03 F2 C0 40 00 A1 04 39 40 -00 04 29 83 89 43 00 1C FC 23 39 40 32 00 29 83 -B9 40 D4 D3 CE FF FB 23 B2 40 2C C6 F0 FF B2 40 -81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 C8 05 -92 C3 C0 05 92 D3 DA 05 3F 40 80 1C 31 40 E0 1C -30 12 3A D3 36 3F 38 40 C0 1D 39 48 2A 48 09 5A -1A 52 C4 1D 09 9A 03 24 7E 9A FC 27 1A 83 0E 4A -2A 88 82 4A C4 1D 30 4D 1C 15 B0 12 2A C2 B6 C7 -0E C8 32 C5 CE D4 CA C8 28 C5 BE CB F0 D4 D0 D4 -29 4E 39 90 86 12 02 20 2E 53 0A 3C 39 90 85 12 -03 20 1E 4E 02 00 04 3C 39 90 84 12 01 20 2E 52 -1B 17 30 41 3E 40 28 00 B0 12 B8 D4 19 42 C6 1D +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 C6 +CA 1D F2 C2 2A C2 84 12 7E CE AE CD 50 D1 DE CD +BE CA 32 CD 3A CE 64 D2 64 C6 66 CF 80 CF 8E CD +00 D0 00 00 36 D2 E8 CA 78 CC 00 00 84 12 7E CE +82 D7 E4 D7 36 D7 58 D8 FC D6 00 00 2C D4 00 00 +F2 D6 A2 D7 54 D7 92 D7 3C D5 00 00 00 00 34 D8 +AA CE 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D C6 3F +3A 40 0E 00 39 40 CC 1D 38 40 CA 1D B9 3F 82 43 +CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D 86 CE EE CE +F4 CE 04 CF 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 CB 09 50 57 52 5F 53 54 41 +54 45 84 12 FC CE D0 CE 6A D8 CC CD 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 CF 92 42 0C 18 +48 CF EF 3F 38 CF 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 1D 46 CF 92 42 C6 1D 48 CF 30 4D 4C CF +08 52 53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 +92 42 C6 1D 0C 18 EC 3F BC CD 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 C4 +DE C4 B2 40 0A D0 08 D0 B2 40 D0 CE 0E 18 B2 40 +6A D8 0C 18 30 12 56 CF B2 40 86 C5 84 C5 B2 40 +08 C6 06 C6 B2 40 98 C4 96 C4 B2 40 18 00 0A 18 +37 40 1A C2 36 40 92 C2 35 40 0E C2 34 40 00 C2 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 9A CF +04 57 41 52 4D 00 30 40 0A D0 3D 40 3E D0 92 C3 +30 01 1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E C6 +06 0D 1B 5B 37 6D 23 00 D6 C5 34 C4 1E C6 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 C5 14 C6 30 FF A0 C8 +B8 C2 24 C4 1E C6 0A 62 79 74 65 73 20 66 72 65 +65 00 3C C4 9A CA 82 CD 04 43 4F 4C 44 00 92 B3 +CA 05 FD 23 B2 40 04 A5 20 01 3E D0 92 D3 30 01 +B2 40 88 5A 5C 01 B2 43 06 02 B2 40 EF 7F 02 02 +E2 D2 05 02 B2 43 26 02 B2 D0 08 FF 22 02 F2 D3 +26 03 F2 40 F0 00 22 03 F2 40 A5 00 61 01 82 43 +66 01 39 40 80 00 B2 40 33 00 64 01 D2 43 61 01 +92 D2 9E 01 08 18 38 40 59 14 18 83 FE 23 19 83 +FA 23 B2 D2 B0 01 92 C3 B0 01 F2 D0 10 00 2A 03 +F2 C0 40 00 A1 04 39 40 00 04 29 83 89 43 00 1C +FC 23 39 40 32 00 29 83 B9 40 9C D0 CE FF FB 23 +B2 40 26 C5 F0 FF B2 40 81 00 C0 05 92 42 02 18 +C6 05 92 42 04 18 C8 05 92 C3 C0 05 92 D3 DA 05 +3F 40 80 1C 31 40 E0 1C 30 12 06 D0 46 3F 88 D0 +07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F +0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 +F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D +B2 CB 86 5B 54 48 45 4E 5D 00 30 4D 82 D1 86 5B +45 4C 53 45 5D 00 87 12 14 C6 00 00 C6 C2 42 C9 +80 C6 24 C9 34 C2 40 C4 F8 D1 44 C2 1E C6 06 5B +54 48 45 4E 5D 00 58 D1 4A C4 C8 D1 F8 C5 D0 C2 +58 C2 4A C4 9E D1 2A C2 44 C2 1E C6 06 5B 45 4C +53 45 5D 00 58 D1 4A C4 E6 D1 F8 C5 D0 C2 58 C2 +4A C4 9C D1 2A C2 1E C6 04 5B 49 46 5D 00 58 D1 +4A C4 9E D1 3C C4 9C D1 F8 C5 1E C6 05 0D 0A 6B +6F 20 D6 C5 8C C5 32 C9 3C C4 9E D1 8E D1 84 5B +49 46 5D 00 0E 93 3E 4F BE 27 30 4D 0E D2 89 5B +44 45 46 49 4E 45 44 5D 87 12 42 C9 80 C6 EE C6 +6A C2 2A C2 1E D2 8B 5B 55 4E 44 45 46 49 4E 45 +44 5D 87 12 42 C9 80 C6 EE C6 6A C2 00 C3 2A C2 +52 D2 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F 30 40 +56 CF 48 CE 06 4D 41 52 4B 45 52 00 B0 12 B8 CB +BA 40 84 12 FC FF BA 40 50 D2 FE FF 9A 42 C8 1D +00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 00 CC +1C 15 B0 12 2A C2 80 C6 EE C6 4A C4 A6 D2 AA C7 +40 C4 CE CA C0 D2 A8 D2 39 4E 39 80 86 12 08 24 +19 53 02 20 2E 4E 04 3C 2E 53 19 53 01 24 2E 82 +1B 17 30 41 3E 40 28 00 B0 12 90 D2 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 -C4 1D 92 53 C4 1D B0 12 2A C2 B6 C7 CA C8 28 C5 -2E D5 24 D5 21 53 3E 90 10 00 83 2D E1 2B 30 D5 -B2 41 C4 1D DD 3F 87 12 B0 C3 96 D4 3E D5 0C 43 +C4 1D 92 53 C4 1D B0 12 2A C2 80 C6 AA C7 40 C4 +FE D2 F4 D2 21 53 3E 90 10 00 7D 2D E1 2B 00 D3 +B2 41 C4 1D DD 3F 87 12 42 C9 74 C6 0E D3 0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 -2D 20 92 53 C4 1D B0 12 B8 D4 0E 93 03 20 3C 40 -00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 -03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 -12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 -3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 1D A2 53 -C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 -07 20 3C 40 10 02 92 53 C4 1D B0 12 B8 D4 ED 3F -7A 90 40 00 16 20 3C 40 20 00 92 53 C4 1D B0 12 -0C D5 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 0C D5 -92 92 C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 0C 5E -DA 3F B0 12 0C D5 FA 23 3C 50 10 00 B0 12 F4 D4 -EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 B0 C3 -96 D4 14 D6 FE 90 26 00 00 00 3E 40 20 00 03 20 -3C 50 82 00 C8 3F B0 12 0C D5 E1 23 3C 50 80 00 -B0 12 F4 D4 DC 3F 1C C6 04 52 45 54 49 00 87 12 -34 C2 00 13 C8 C9 2A C2 34 C2 2C 00 36 D5 0C D6 -52 D6 2E 4E 0E DC 09 4B A4 3F 3E CE 03 4D 4F 56 -84 12 48 D6 00 40 5C D6 05 4D 4F 56 2E 42 84 12 -48 D6 40 40 00 00 03 41 44 44 84 12 48 D6 00 50 -76 D6 05 41 44 44 2E 42 84 12 48 D6 40 50 82 D6 -04 41 44 44 43 00 84 12 48 D6 00 60 90 D6 06 41 -44 44 43 2E 42 00 84 12 48 D6 40 60 38 D6 04 53 -55 42 43 00 84 12 48 D6 00 70 AE D6 06 53 55 42 -43 2E 42 00 84 12 48 D6 40 70 BC D6 03 53 55 42 -84 12 48 D6 00 80 CC D6 05 53 55 42 2E 42 84 12 -48 D6 40 80 20 CE 03 43 4D 50 84 12 48 D6 00 90 -E6 D6 05 43 4D 50 2E 42 84 12 48 D6 40 90 0E CE -04 44 41 44 44 00 84 12 48 D6 00 A0 00 D7 06 44 -41 44 44 2E 42 00 84 12 48 D6 40 A0 F2 D6 03 42 -49 54 84 12 48 D6 00 B0 1E D7 05 42 49 54 2E 42 -84 12 48 D6 40 B0 2A D7 03 42 49 43 84 12 48 D6 -00 C0 38 D7 05 42 49 43 2E 42 84 12 48 D6 40 C0 -44 D7 03 42 49 53 84 12 48 D6 00 D0 52 D7 05 42 -49 53 2E 42 84 12 48 D6 40 D0 00 00 03 58 4F 52 -84 12 48 D6 00 E0 6C D7 05 58 4F 52 2E 42 84 12 -48 D6 40 E0 9E D6 03 41 4E 44 84 12 48 D6 00 F0 -86 D7 05 41 4E 44 2E 42 84 12 48 D6 40 F0 B0 C3 -36 D5 A4 D7 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 -0C DA 4F 3F D8 D6 03 52 52 43 84 12 9E D7 00 10 -B6 D7 05 52 52 43 2E 42 84 12 9E D7 40 10 C2 D7 -04 53 57 50 42 00 84 12 9E D7 80 10 D0 D7 03 52 -52 41 84 12 9E D7 00 11 DE D7 05 52 52 41 2E 42 -84 12 9E D7 40 11 EA D7 03 53 58 54 84 12 9E D7 -80 11 00 00 04 50 55 53 48 00 84 12 9E D7 00 12 -04 D8 06 50 55 53 48 2E 42 00 84 12 9E D7 40 12 -5E D7 04 43 41 4C 4C 00 84 12 9E D7 80 12 1A 53 -0E 4A 87 12 E2 C4 52 C7 0D 6F 75 74 20 6F 66 20 -62 6F 75 6E 64 73 3A CB B0 C3 96 D4 4E D8 92 53 -C4 1D 3E 40 2C 00 B0 12 2A C2 B6 C7 CA C8 28 C5 -BE CB 02 D6 66 D8 0A 4E 3E 4F 1A 83 E0 33 29 4E -59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 -10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 -8F 3F F8 D7 04 52 52 43 4D 00 84 12 48 D8 50 00 -94 D8 04 52 52 41 4D 00 84 12 48 D8 50 01 A2 D8 -04 52 4C 41 4D 00 84 12 48 D8 50 02 B0 D8 04 52 -52 55 4D 00 84 12 48 D8 50 03 12 D8 05 50 55 53 -48 4D 84 12 48 D8 00 15 CC D8 04 50 4F 50 4D 00 -84 12 48 D8 00 17 85 12 00 3C BE D8 03 53 3E 3D -85 12 00 38 EC D8 02 53 3C 00 85 12 00 34 DA D8 -03 30 3E 3D 85 12 00 30 00 D9 02 30 3C 00 85 12 -00 30 00 00 02 55 3C 00 85 12 00 2C 14 D9 03 55 -3E 3D 85 12 00 28 0A D9 03 30 3C 3E 85 12 00 24 -28 D9 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 +27 20 92 53 C4 1D B0 12 90 D2 3C 40 00 03 0E 93 +1C 24 3C 40 10 03 1E 93 18 24 3C 40 20 03 2E 93 +14 24 3C 40 20 02 2E 92 10 24 3C 40 30 02 3E 92 +0C 24 3C 40 30 03 3E 93 08 24 3C 40 30 00 19 42 +C6 1D A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D +7A 90 26 00 07 20 3C 40 10 02 92 53 C4 1D B0 12 +90 D2 ED 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 +C4 1D B0 12 DC D2 0C 20 3C 50 10 00 3E 40 2B 00 +B0 12 DC D2 92 92 C0 1D C4 1D 02 24 92 53 C4 1D +8E 10 0C 5E DA 3F B0 12 DC D2 FA 23 3C 50 10 00 +B0 12 C4 D2 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D +87 12 42 C9 74 C6 D8 D3 FE 90 26 00 00 00 3E 40 +20 00 03 20 3C 50 82 00 C8 3F B0 12 DC D2 E1 23 +3C 50 80 00 B0 12 C4 D2 DC 3F D6 C4 04 52 45 54 +49 00 87 12 14 C6 00 13 B0 C8 2A C2 14 C6 2C 00 +06 D3 D0 D3 16 D4 09 4B 2E 4E 0E DC A4 3F FC CC +03 4D 4F 56 84 12 0C D4 00 40 20 D4 05 4D 4F 56 +2E 42 84 12 0C D4 40 40 00 00 03 41 44 44 84 12 +0C D4 00 50 3A D4 05 41 44 44 2E 42 84 12 0C D4 +40 50 46 D4 04 41 44 44 43 00 84 12 0C D4 00 60 +54 D4 06 41 44 44 43 2E 42 00 84 12 0C D4 40 60 +FC D3 04 53 55 42 43 00 84 12 0C D4 00 70 72 D4 +06 53 55 42 43 2E 42 00 84 12 0C D4 40 70 80 D4 +03 53 55 42 84 12 0C D4 00 80 90 D4 05 53 55 42 +2E 42 84 12 0C D4 40 80 DE CC 03 43 4D 50 84 12 +0C D4 00 90 AA D4 05 43 4D 50 2E 42 84 12 0C D4 +40 90 CC CC 04 44 41 44 44 00 84 12 0C D4 00 A0 +C4 D4 06 44 41 44 44 2E 42 00 84 12 0C D4 40 A0 +B6 D4 03 42 49 54 84 12 0C D4 00 B0 E2 D4 05 42 +49 54 2E 42 84 12 0C D4 40 B0 EE D4 03 42 49 43 +84 12 0C D4 00 C0 FC D4 05 42 49 43 2E 42 84 12 +0C D4 40 C0 08 D5 03 42 49 53 84 12 0C D4 00 D0 +16 D5 05 42 49 53 2E 42 84 12 0C D4 40 D0 00 00 +03 58 4F 52 84 12 0C D4 00 E0 30 D5 05 58 4F 52 +2E 42 84 12 0C D4 40 E0 62 D4 03 41 4E 44 84 12 +0C D4 00 F0 4A D5 05 41 4E 44 2E 42 84 12 0C D4 +40 F0 42 C9 06 D3 68 D5 0A 4C 3C F0 70 00 8A 10 +3A F0 0F 00 0C DA 4F 3F 9C D4 03 52 52 43 84 12 +62 D5 00 10 7A D5 05 52 52 43 2E 42 84 12 62 D5 +40 10 86 D5 04 53 57 50 42 00 84 12 62 D5 80 10 +94 D5 03 52 52 41 84 12 62 D5 00 11 A2 D5 05 52 +52 41 2E 42 84 12 62 D5 40 11 AE D5 03 53 58 54 +84 12 62 D5 80 11 00 00 04 50 55 53 48 00 84 12 +62 D5 00 12 C8 D5 06 50 55 53 48 2E 42 00 84 12 +62 D5 40 12 22 D5 04 43 41 4C 4C 00 84 12 62 D5 +80 12 1A 53 0E 4A 87 12 34 C4 1E C6 0D 6F 75 74 +20 6F 66 20 62 6F 75 6E 64 73 4C CA 42 C9 74 C6 +12 D6 92 53 C4 1D 3E 40 2C 00 B0 12 2A C2 80 C6 +AA C7 40 C4 CE CA C6 D3 2A D6 0A 4E 3E 4F 1A 83 +E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A +08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F +8A 10 5A 06 8F 3F BC D5 04 52 52 43 4D 00 84 12 +0C D6 50 00 58 D6 04 52 52 41 4D 00 84 12 0C D6 +50 01 66 D6 04 52 4C 41 4D 00 84 12 0C D6 50 02 +74 D6 04 52 52 55 4D 00 84 12 0C D6 50 03 D6 D5 +05 50 55 53 48 4D 84 12 0C D6 00 15 90 D6 04 50 +4F 50 4D 00 84 12 0C D6 00 17 82 D6 03 53 3E 3D +85 12 00 38 AC D6 02 53 3C 00 85 12 00 34 9E D6 +03 30 3E 3D 85 12 00 30 C0 D6 02 30 3C 00 85 12 +00 30 00 00 02 55 3C 00 85 12 00 2C D4 D6 03 55 +3E 3D 85 12 00 28 CA D6 03 30 3C 3E 85 12 00 24 +E8 D6 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 0E 4A 30 4D -1E D9 04 54 48 45 4E 00 1A 42 C6 1D 08 4E 3E 4F -09 48 29 53 0A 89 0A 11 3A 90 00 02 61 2F 88 DA -00 00 30 4D 0E D7 04 45 4C 53 45 00 1A 42 C6 1D +DE D6 04 54 48 45 4E 00 1A 42 C6 1D 08 4E 3E 4F +09 48 29 53 0A 89 0A 11 3A 90 00 02 63 2F 88 DA +00 00 30 4D D2 D4 04 45 4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 8F 4A 00 00 -E3 3F 52 D9 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F -19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE 40 3B +E3 3F 12 D7 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F +19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 1D 30 4D -92 D7 05 41 47 41 49 4E 87 12 E6 D8 9A D9 2A C2 -00 00 05 57 48 49 4C 45 87 12 40 D9 78 C2 2A C2 -F6 D8 06 52 45 50 45 41 54 00 87 12 E6 D8 9A D9 -58 D9 2A C2 F6 D9 3D 41 2E 4E 08 4E 3E 4F 2A 48 -0A 93 88 43 00 00 CA 23 98 42 C6 1D 00 00 30 4D -22 D8 03 42 57 31 84 12 F4 D9 E0 1D 12 DA 03 42 -57 32 84 12 F4 D9 E2 1D 1E DA 03 42 57 33 84 12 -F4 D9 E4 1D 36 DA 3D 41 1A 42 C6 1D 2E 4E 28 4E -08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 C6 1D -8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 -34 DA E6 1D 5A DA 03 46 57 32 84 12 34 DA E8 1D -66 DA 03 46 57 33 84 12 34 DA EA 1D 3E 90 00 30 -07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 -30 4D 72 DA 04 47 4F 54 4F 00 87 12 E6 D8 B0 CB -BE C9 2A C2 00 00 05 3F 47 4F 54 4F 87 12 7C DA -B0 CB BE C9 2A C2 00 00 03 4A 4D 50 87 12 B0 CB -C8 D9 2A C2 A6 DA 04 3F 4A 4D 50 00 87 12 7C DA -B0 CB 78 C2 9A D9 2A C2 +56 D5 05 41 47 41 49 4E 0A 4E 38 40 00 3C E7 3F +00 00 05 57 48 49 4C 45 87 12 00 D7 76 C2 2A C2 +B6 D6 06 52 45 50 45 41 54 00 87 12 88 D7 18 D7 +2A C2 B4 D7 3D 41 08 4E 3E 4F 2A 48 B2 92 C4 1D +CD 2F 98 42 C6 1D 00 00 30 4D E6 D5 03 42 57 31 +84 12 B2 D7 00 00 CC D7 03 42 57 32 84 12 B2 D7 +00 00 D8 D7 03 42 57 33 84 12 B2 D7 00 00 F0 D7 +3D 41 1A 42 C6 1D 28 4E B2 92 C4 1D 90 2B BA 4F +00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 +03 46 57 31 84 12 EE D7 00 00 10 D8 03 46 57 32 +84 12 EE D7 00 00 1C D8 03 46 57 33 84 12 EE D7 +00 00 00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 +3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 87 12 +C0 CA DA C8 2A C2 28 D8 04 47 4F 54 4F 00 2F 83 +8F 4E 00 00 3E 40 00 3C F2 3F @FFFE -D4 D3 +9C D0 q diff --git a/binaries/MSP_EXP430FR5969_16MHz.txt b/binaries/MSP_EXP430FR5969_16MHz.txt index 86da61b..de84383 100644 --- a/binaries/MSP_EXP430FR5969_16MHz.txt +++ b/binaries/MSP_EXP430FR5969_16MHz.txt @@ -1,525 +1,387 @@ @1800 -10 00 08 00 A1 F7 80 3E 05 00 18 00 58 64 98 52 -2C 01 7F B0 00 48 12 48 +10 00 08 00 A1 F7 80 3E 05 00 18 00 B4 5B D0 50 +2D 01 6B B4 B6 46 C8 46 @4400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 44 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 44 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 44 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 44 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 44 02 3E 52 00 -0E 12 3E 4F 30 4D 96 44 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 44 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 44 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 44 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 45 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 44 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 45 02 31 2D 00 -1E 83 30 4D D8 44 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 45 -02 30 3D 00 1E 83 0E 7E 30 4D 60 45 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 45 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 44 01 3E 3E 8F F4 3B EB 37 0E 45 02 42 4C 00 -85 12 20 00 AC 45 04 42 41 53 45 00 85 12 DC 1D -C8 44 05 53 54 41 54 45 85 12 BE 1D 96 45 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 45 06 55 4D 2F -4D 4F 44 00 30 12 62 44 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 44 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 45 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 45 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 46 -02 23 53 00 87 12 32 46 6A 46 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 46 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 45 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 45 -02 44 2E 00 87 12 D2 45 44 44 B0 44 4C 45 64 46 -BC 44 A2 46 7E 46 22 49 EA 48 2A 44 DC 45 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 44 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 46 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 44 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 46 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 46 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 46 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 45 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 47 03 4B 45 59 30 40 A0 47 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 00 48 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 12 48 30 4D 00 47 -06 41 43 43 45 50 54 00 30 40 CC 47 3C 40 6E 48 -3B 40 38 48 2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 -3C 40 20 00 3D 40 62 48 92 B3 DC 05 05 24 18 42 -CC 05 38 90 0A 00 04 20 21 53 39 40 26 48 4D 15 -A2 B3 DC 05 FD 27 B2 40 11 00 CE 05 E2 C3 23 02 -30 41 B2 40 13 00 CE 05 E2 D3 23 02 30 41 00 00 -05 53 4C 45 45 50 30 40 2A 48 12 D2 0A 18 FB 3F -21 52 3A 17 58 42 CC 05 48 9C 08 2C 48 9B E9 27 -78 92 11 20 2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 -CE 48 00 00 1E 53 A2 B3 DC 05 FD 27 82 48 CE 05 -30 4D 64 48 2D 83 92 B3 DC 05 E4 23 FC 27 82 93 -DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 -0A 18 30 4D B0 46 04 45 4D 49 54 00 30 40 90 48 -08 4E 3E 4F E0 3F 10 47 03 43 49 42 85 12 3C 1D -3F 80 06 00 8F 4E 04 00 3E 40 54 00 9F 42 9E 48 -00 00 AF 4F 02 00 88 3F 86 48 04 45 43 48 4F 00 -B2 40 82 48 5C 48 82 43 DE 1D 30 4D E0 46 06 4E -4F 45 43 48 4F 00 B2 40 30 4D 5C 48 92 43 DE 1D -30 4D 9C 46 05 53 50 41 43 45 2F 83 8F 4E 00 00 -3E 40 20 00 CB 3F E4 48 06 53 50 41 43 45 53 00 -0E 93 09 24 0D 12 3D 40 0C 49 EF 3F 0E 49 2D 83 -1E 83 EB 23 3D 41 3E 4F 30 4D 66 47 04 54 59 50 -45 00 0E 93 0F 24 1E 15 3D 40 38 49 28 4F 7E 48 -8F 48 00 00 2F 83 AA 3F 3A 49 2D 83 91 83 02 00 -F5 23 1D 17 2F 53 3E 4F 30 4D 98 48 02 43 52 00 -30 40 54 49 87 12 60 49 02 0D 0A 00 22 49 2A 44 -2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 -0D 63 30 4D F8 48 82 53 22 00 82 43 B4 1D 87 12 -34 44 60 49 D6 4B 34 44 22 00 C4 49 8E 49 3D 41 -B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D 3E 4F -92 B3 C6 1D A2 63 C6 1D 30 4D CE 48 82 2E 22 00 -87 12 7A 49 34 44 22 49 D6 4B 2A 44 00 00 04 57 -4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A 3A 5C -28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 60 00 -C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 -4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F -1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E CE 48 -00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 0C 4E -65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 1E 24 -58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E FE FF -0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C -FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 -0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C 00 00 -35 40 0E 44 34 40 00 44 30 4D A2 45 07 3E 4E 55 -4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D -6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 -7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 -82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 -09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 8F 48 -02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 2D 15 -3D 40 1E 4B 09 43 08 43 3F 82 8F 4E 06 00 0C 4E -7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 02 00 -E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 04 24 -3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F 20 4B -2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 7A 90 -F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 8F 49 -02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 79 90 -0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 09 9B -08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 45 2A 17 -E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A 4E 93 -2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 3F 50 -06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 BF 4F -00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 00 00 -9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 2F 53 -30 4D BA 48 07 45 58 45 43 55 54 45 0A 4E 3E 4F -00 4A 26 45 01 2C 1A 42 C6 1D A2 53 C6 1D 8A 4E -00 00 3E 4F 30 4D D4 4B 87 4C 49 54 45 52 41 4C -82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 -34 44 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 -00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 EB 3F -30 4D 4C 49 05 43 4F 55 4E 54 2F 83 1E 53 8F 4E -00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F C2 1D -3E 4F 82 43 C4 1D 30 4D 87 12 38 4C B0 45 C4 49 -52 4C 3D 40 5A 4C E2 22 5D 3E 5C 4C 0A 4E 3E 4F -3D 40 72 4C 39 27 3D 40 4C 4C 1A E2 BE 1D B3 27 -AD 23 74 4C 3E 4F 3D 40 4C 4C BA 23 DE 53 00 00 -68 4E 08 5E F8 40 3F 00 00 00 3D 40 3E 4F CD 3F -C4 4B 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D -3C 49 3B 49 3A 49 3D 15 B0 12 2A 44 48 4C B0 4C -B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D -6C 45 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C -B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 50 49 -A0 48 EA 48 48 4C DE 44 70 45 60 49 0C 73 74 61 -63 6B 20 65 6D 70 74 79 21 00 3C 4D 34 44 30 FF -F2 46 8A 45 60 49 0A 46 52 41 4D 20 66 75 6C 6C -21 00 3C 4D 24 47 DE 4C C0 47 05 41 42 4F 52 54 -3F 40 80 1C D1 3F 1A 4D 86 41 42 4F 52 54 22 00 -87 12 7A 49 34 44 3C 4D D6 4B 2A 44 8F 93 02 00 -03 20 2F 52 3E 4F 30 4D B0 12 FE 54 B0 12 00 48 -92 C3 DC 05 38 40 A0 AA 39 42 09 59 03 43 19 83 -FD 23 18 83 F9 23 92 B3 DC 05 F2 23 87 12 78 54 -34 44 DE 1D F2 44 C0 48 60 49 04 1B 5B 37 6D 00 -22 49 54 44 28 47 98 4D 50 49 60 49 05 6C 69 6E -65 3A 22 49 40 45 D2 46 22 49 60 49 04 1B 5B 30 -6D 00 22 49 20 4D 00 00 83 5B 27 5D 87 12 BE 4D -34 44 34 44 D6 4B D6 4B 2A 44 16 4A 01 27 87 12 -B0 45 C4 49 1C 4A 28 47 CC 4D 2A 44 7C 4C CE 45 -81 5C 92 42 C0 1D C4 1D 30 4D A8 4D 81 5B 82 43 -BE 1D 30 4D D0 4D 01 5D B2 43 BE 1D 30 4D BE 4F -02 00 3E 4F 30 4D 72 47 82 49 53 00 87 12 C8 45 -F2 44 28 47 10 4E AC 4D 34 44 EE 4D D6 4B 2A 44 -BE 4D EE 4D 2A 44 F8 4D 09 49 4D 4D 45 44 49 41 -54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D 76 49 -87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D -00 00 A2 53 C6 1D 30 4D C2 4C 88 50 4F 53 54 50 -4F 4E 45 00 87 12 B0 45 C4 49 1C 4A 54 44 28 47 -CC 4D 70 45 28 47 74 4E 34 44 34 44 D6 4B D6 4B -34 44 D6 4B D6 4B 2A 44 DC 4D 81 3B 82 93 BE 1D -A8 27 87 12 34 44 2A 44 D6 4B 12 4F DE 4D 2A 44 -7A 4E 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 -1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 -FE 4E BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D -82 4F BC 1D 30 4D 92 4E 01 3A 30 12 B2 4E 87 12 -A0 49 B0 45 C4 49 D8 4E 3D 41 08 4E 7A 4E 5A D3 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 44 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 44 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 44 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 44 02 3E 52 00 0E 12 3E 4F 30 4D 70 44 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 44 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 44 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 44 +01 21 BE 4F 00 00 3E 4F 30 4D CC 44 02 30 3D 00 +1E 83 0E 7E 30 4D FC 44 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 45 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 44 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 45 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 45 02 23 53 00 87 12 88 45 C0 45 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 45 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 44 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 45 34 44 86 44 D4 44 BA 45 +92 44 F8 45 D4 45 D6 47 42 4B 82 47 2A 44 22 45 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 45 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 46 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 46 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 46 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C3 23 02 30 41 B2 40 13 00 CE 05 E2 D3 +23 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 46 +B0 12 B6 46 12 D2 0A 18 F9 3F F0 44 06 41 43 43 +45 50 54 00 3C 40 64 47 3B 40 2E 47 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 47 +92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 CC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 +FD 27 82 48 CE 05 30 4D 5A 47 2D 83 92 B3 DC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 44 04 45 4D 49 +54 00 30 40 86 47 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C 47 04 45 43 48 4F 00 B2 40 82 48 +52 47 82 43 DE 1D 30 4D 32 46 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 47 92 43 DE 1D 30 4D 20 46 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 47 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 47 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 45 +02 43 52 00 30 40 08 48 87 12 1E 48 02 0D 0A 00 +D6 47 2A 44 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 45 82 53 22 00 82 43 B4 1D 87 12 14 48 +1E 48 B0 4A 14 48 22 00 80 48 4C 48 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA 47 82 2E 22 00 87 12 38 48 14 48 D6 47 +B0 4A 2A 44 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 +60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 +18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D +F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E +CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 +0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 +1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E +FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 +0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 +09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C +00 00 35 40 0E 44 34 40 00 44 30 4D 82 44 07 3E +4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 +DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 +07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 +D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 +E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 49 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 49 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 45 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 46 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 44 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC 46 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 47 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 4A 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 48 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 48 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 4B 42 4B 80 48 50 4B +3D 40 58 4B CC 22 82 3E 5A 4B 0A 4E 3E 4F 3D 40 +70 4B 23 27 3D 40 4A 4B 1A E2 BE 1D A1 27 B5 23 +72 4B 3E 4F 3D 40 4A 4B B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 4E CB 3F D2 4A +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 44 46 4B AE 4B B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 45 04 51 55 49 54 00 82 43 08 18 31 40 +E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 +04 48 8C 47 42 4B 82 47 46 4B A4 44 0C 45 1E 48 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 4C +14 48 30 FF A0 4A 26 45 1E 48 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 4C 3C 46 E0 4B C2 4A 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E 4C 86 41 42 4F +52 54 22 00 87 12 38 48 14 48 40 4C B0 4A 2A 44 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 51 +B0 12 B6 46 92 C3 DC 05 38 40 A0 AA 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 DC 05 F3 23 87 12 +42 51 14 48 DE 1D EA 44 AC 47 1E 48 04 1B 5B 37 +6D 00 D6 47 58 44 40 46 9A 4C 04 48 1E 48 05 6C +69 6E 65 3A D6 47 D0 44 24 46 D6 47 1E 48 04 1B +5B 30 6D 00 D6 47 24 4C 00 00 83 5B 27 5D 87 12 +C0 4C 14 48 14 48 B0 4A B0 4A 2A 44 E8 48 01 27 +87 12 42 4B 80 48 EE 48 40 46 CE 4C 2A 44 7A 4B +32 45 81 5C 92 42 C0 1D C4 1D 30 4D AA 4C 81 5B +82 43 BE 1D 30 4D D2 4C 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 4A 82 49 53 00 87 12 +BE 4B EA 44 40 46 12 4D AE 4C 14 48 F0 4C B0 4A +2A 44 C0 4C F0 4C 2A 44 FA 4C 09 49 4D 4D 45 44 +49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D +C4 4B 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 4B +80 48 EE 48 58 44 40 46 CE 4C 0C 45 40 46 5C 4D +14 48 14 48 B0 4A B0 4A 14 48 B0 4A B0 4A 2A 44 +DE 4C 81 3B 82 93 BE 1D B5 27 87 12 14 48 2A 44 +B0 4A FA 4D E0 4C 2A 44 62 4D 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 4D 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A 4D 01 3A 30 12 A0 4D 92 B3 C6 1D A2 63 C6 1D +87 12 42 4B 80 48 C8 4D 3D 41 08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E -3E 4F BA 40 30 40 00 00 BA 40 C4 4E 02 00 82 48 -B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D -30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D -A8 49 FE FF 89 48 00 00 30 4D 87 12 60 49 0F 73 -74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 48 4D -BE 49 08 56 41 52 49 41 42 4C 45 00 B0 12 CE 4E -BA 40 86 12 FC FF E4 3F 24 4C 08 43 4F 4E 53 54 -41 4E 54 00 B0 12 CE 4E BA 40 85 12 FC FF 8A 4E -FE FF 3E 4F D5 3F 5A 4F 06 43 52 45 41 54 45 00 -B0 12 CE 4E BA 40 85 12 FC FF 8A 4A FE FF C8 3F -92 4C 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 -00 00 8A 4D 02 00 3D 41 30 4D 92 4F 05 44 45 46 -45 52 30 12 20 4F 8B 3F 7C 4A 05 3E 42 4F 44 59 -2E 52 30 4D 78 4F 04 43 4F 44 45 00 B0 12 CE 4E -2A 82 82 4A C6 1D 87 12 C0 4E A2 52 74 52 2A 44 -C6 4F 07 43 4F 44 45 4E 4E 4D 87 12 9A 4E DE 4D -D0 4F 2A 44 00 00 07 45 4E 44 43 4F 44 45 87 12 -BC 52 12 4F 2A 44 28 4D 03 41 53 4D 92 42 DA 1D -EC 1D B2 40 78 52 DA 1D D9 3F F6 4F 06 45 4E 44 -41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 48 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 4C 90 4B 05 44 45 46 45 52 +B0 12 B8 4D BA 40 30 40 FC FF BA 40 AE 4D FE FF +E3 3F 1E 4B 06 43 52 45 41 54 45 00 B0 12 B8 4D +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 4E 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 49 05 3E 42 4F 44 59 2E 52 +30 4D 44 4E 04 43 4F 44 45 00 B0 12 B8 4D A2 82 +C6 1D 87 12 D2 50 AC 50 2A 44 84 4E 07 43 4F 44 +45 4E 4E 4D B0 12 86 4D F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 50 FA 4D 2A 44 2C 4C 03 41 +53 4D B2 40 B0 50 DA 1D E0 3F AC 4E 06 45 4E 44 +41 53 4D 00 87 12 B4 4E F4 50 2A 44 00 00 05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 -C6 1D B2 43 BE 1D 30 40 BC 52 00 00 05 4C 4F 32 +C6 1D B2 43 BE 1D 30 40 E0 50 00 00 05 4C 4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 44 -02 00 A2 52 C6 1D ED 3F 18 4E 85 48 49 32 4C 4F -87 12 F2 46 9A 50 D6 4B DE 4D A2 52 74 52 2A 44 -6A 50 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D -A2 52 C6 1D BE 40 28 47 00 00 2E 53 30 4D AC 4F +02 00 A2 52 C6 1D ED 3F 1A 4D 85 48 49 32 4C 4F +87 12 A0 4A 4A 4F B0 4A E0 4C D2 50 AC 50 2A 44 +1A 4F 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D +A2 52 C6 1D BE 40 40 46 00 00 2E 53 30 4D 5E 4E 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 -24 47 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 1C 49 +3C 46 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 47 84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D -E2 4F 85 42 45 47 49 4E 30 40 F2 46 C0 50 85 55 -4E 54 49 4C 39 40 28 47 A2 52 C6 1D 1A 42 C6 1D -8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D 08 50 85 41 -47 41 49 4E 39 40 24 47 EF 3F 42 4F 85 57 48 49 -4C 45 87 12 86 50 78 44 2A 44 30 4E 86 52 45 50 -45 41 54 00 87 12 04 51 C6 50 2A 44 A0 50 82 44 +9C 4E 85 42 45 47 49 4E 30 40 A0 4A 70 4F 85 55 +4E 54 49 4C 39 40 40 46 A2 52 C6 1D 1A 42 C6 1D +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 4E 85 41 +47 41 49 4E 39 40 3C 46 EF 3F 7A 48 85 57 48 49 +4C 45 87 12 36 4F 76 44 2A 44 34 48 86 52 45 50 +45 41 54 00 87 12 B4 4F 76 4F 2A 44 50 4F 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D -BE 40 3C 47 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 -00 00 30 4D E8 4B 84 4C 4F 4F 50 00 39 40 5E 47 +BE 40 54 46 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 +00 00 30 4D E2 4A 84 4C 4F 4F 50 00 39 40 76 46 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A -00 00 F6 3F 3E 4F 30 4D 98 47 85 2B 4C 4F 4F 50 -39 40 4C 47 E5 3F 56 51 85 4C 45 41 56 45 1A 42 -C6 1D BA 40 6E 47 00 00 BA 40 24 47 02 00 B2 50 -06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A -00 00 30 4D 98 51 04 4D 4F 56 45 00 0A 4E 38 4F -39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 -00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 -18 83 E8 49 00 00 1A 83 FA 23 30 4D 0C 51 0A 56 -4F 43 41 42 55 4C 41 52 59 00 87 12 80 4F 34 44 -10 00 34 44 00 00 3C 47 34 44 00 00 D6 4B 5E 47 -18 52 F2 46 34 44 C8 1D 44 44 F2 44 D6 4B FA 44 -98 4F 34 44 CA 1D FA 44 2A 44 BC 4D 05 46 4F 52 -54 48 84 12 32 52 9C 52 DC 55 DA 52 3C 52 82 50 -8A 51 06 54 CC 52 9C 54 F8 56 DE 50 4E 55 00 00 -DA 53 E6 4D BA 4F 00 00 FE 50 09 41 53 53 45 4D -42 4C 45 52 84 12 32 52 EA 62 82 62 E6 61 78 5D -20 5C 9C 5D AE 60 00 00 10 64 22 64 78 5C B6 5C -B6 62 00 00 00 00 AA 5D 66 52 6A 52 04 41 4C 53 -4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F -4A 4E 08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 -39 40 CC 1D 38 40 CA 1D 8A 3F AC 49 04 4F 4E 4C -59 00 82 43 CC 1D 30 4D 2E 51 0B 44 45 46 49 4E -49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D D2 50 -07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F -0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 -F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D -C8 4E 86 5B 54 48 45 4E 5D 00 30 4D 22 53 86 5B -45 4C 53 45 5D 00 87 12 34 44 00 00 36 45 B0 45 -C4 49 2A 4C 44 44 28 47 9C 53 8A 44 8A 44 60 49 -06 5B 54 48 45 4E 5D 00 F8 52 32 47 6A 53 44 49 -40 45 54 44 32 47 3E 53 2A 44 8A 44 8A 44 60 49 -06 5B 45 4C 53 45 5D 00 F8 52 32 47 8A 53 44 49 -40 45 54 44 32 47 3C 53 2A 44 60 49 04 5B 49 46 -5D 00 F8 52 32 47 3E 53 24 47 3C 53 44 49 60 49 -05 0D 0A 6B 6F 20 22 49 A0 48 38 4C 24 47 3E 53 -2E 53 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D -B2 53 89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 45 -C4 49 1C 4A 6C 44 2A 44 C2 53 8B 5B 55 4E 44 45 -46 49 4E 45 44 5D 87 12 B0 45 C4 49 1C 4A 6C 44 -64 45 2A 44 F6 53 3D 41 B2 4E 0E 18 A2 4E 0C 18 -3E 4F 44 3C C6 51 06 4D 41 52 4B 45 52 00 B0 12 -CE 4E BA 40 84 12 FC FF BA 40 F4 53 FE FF 9A 42 -C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 -18 4F 42 52 D2 52 E6 52 3A 54 3A 4E 82 4A C8 1D -2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 -18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 -2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D B2 52 09 50 -57 52 5F 53 54 41 54 45 84 12 32 54 98 52 58 64 -1C 51 09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 -7C 54 92 42 0C 18 7E 54 EF 3F 6E 54 08 50 57 52 -5F 48 45 52 45 00 92 42 C8 1D 7C 54 92 42 C6 1D -7E 54 30 4D 82 54 08 52 53 54 5F 48 45 52 45 00 -92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F FE 51 -04 57 49 50 45 00 39 40 10 00 29 83 B9 43 80 FF -FC 23 B2 40 2A 48 28 48 B2 40 58 55 56 55 B2 40 -98 52 0E 18 B2 40 58 64 0C 18 30 12 8C 54 B2 40 -90 48 8E 48 B2 40 54 49 52 49 B2 40 A0 47 9E 47 -B2 40 CC 47 CA 47 B2 40 3C 1D 9E 48 B2 40 18 00 -0A 18 37 40 1A 44 36 40 BC 44 35 40 0E 44 34 40 -00 44 39 40 10 00 29 83 89 43 E0 1D FC 23 B2 40 -0A 00 DC 1D B2 40 20 00 B4 1D 30 41 D0 54 04 57 -41 52 4D 00 30 40 58 55 3D 40 8C 55 92 C3 30 01 -1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 3E E3 -1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 AC 27 3E 90 -16 00 A9 2F 2E 93 78 27 81 2F 30 4D 60 49 06 0D -1B 5B 37 6D 23 00 22 49 E2 46 60 49 1F 46 61 73 -74 46 6F 72 74 68 20 56 33 30 30 20 28 43 29 4A -2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 22 49 34 44 -80 FF F2 46 28 45 D2 46 60 49 0B 62 79 74 65 73 -20 66 72 65 65 20 24 47 98 4D F0 52 04 43 4F 4C -44 00 92 B3 CA 05 FD 23 B2 40 04 A5 20 01 B2 40 -88 5A 5C 01 92 D3 04 02 B2 40 FE FF 02 02 92 C3 -06 02 B2 43 26 02 B2 43 22 02 E2 D3 25 02 F2 43 -22 03 F2 43 26 03 F2 40 A5 00 41 01 F2 40 10 00 -40 01 D2 43 41 01 F2 40 A5 00 61 01 B2 40 48 00 -62 01 82 43 66 01 39 40 00 01 B2 40 33 00 64 01 -D2 43 61 01 92 D2 9E 01 08 18 38 40 59 14 18 83 -FE 23 19 83 FA 23 B2 D2 B0 01 F2 D0 10 00 2A 03 -F2 C0 40 00 A1 04 39 40 00 FC 29 83 89 43 00 1C -FC 23 39 40 34 00 29 83 B9 40 EE 55 CC FF FB 23 -B2 40 30 48 F0 FF B2 40 81 00 C0 05 92 42 02 18 -C6 05 92 42 04 18 C8 05 92 C3 C0 05 92 D3 DA 05 -3F 40 80 1C 31 40 E0 1C 30 12 54 55 37 3F 38 40 -C0 1D 39 48 2A 48 09 5A 1A 52 C4 1D 09 9A 03 24 -7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D 30 4D -B6 54 09 32 43 4F 4E 53 54 41 4E 54 87 12 80 4F -D6 4B D6 4B 98 4F E8 56 2F 83 9F 4E 02 00 00 00 -2E 4E 3D 41 30 4D D2 56 09 32 56 41 52 49 41 42 -4C 45 87 12 80 4F 34 44 04 00 06 47 98 4F 2A 44 -1C 15 B0 12 2A 44 C4 49 1C 4A 32 47 26 57 D8 4A -28 47 CC 4D 5E 57 28 57 29 4E 39 90 86 12 02 20 -2E 53 15 3C 39 90 85 12 03 20 1E 4E 02 00 0F 3C -39 90 84 12 0C 20 2E 52 B9 90 E6 56 02 00 04 24 -B9 90 0E 57 02 00 03 20 B0 12 E8 56 5E 57 1B 17 -30 41 32 B0 00 02 01 24 3E 4F 30 41 3E 40 28 00 -B0 12 10 57 B0 12 62 57 19 42 C6 1D A2 53 C6 1D +00 00 F6 3F 3E 4F 30 4D 90 46 85 2B 4C 4F 4F 50 +39 40 64 46 E5 3F 06 50 04 4D 4F 56 45 00 0A 4E +38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C +F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 48 +CA 1D F2 44 2A 44 84 12 7E 50 AE 4F 5C 53 DE 4F +BE 4C 32 4F 3A 50 70 54 64 48 66 51 80 51 8E 4F +00 52 00 00 42 54 E8 4C 78 4E 00 00 84 12 7E 50 +9A 5B 8C 5B 42 59 64 5A 08 59 00 00 7E 5B 00 00 +FE 58 A8 5B 60 59 9E 59 48 57 00 00 00 00 40 5A +AA 50 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D C6 3F +3A 40 0E 00 39 40 CC 1D 38 40 CA 1D B9 3F 82 43 +CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D 86 50 EE 50 +F4 50 04 51 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 4D 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 50 D0 50 B4 5B CC 4F 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 51 92 42 0C 18 +48 51 EF 3F 38 51 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 1D 46 51 92 42 C6 1D 48 51 30 4D 4C 51 +08 52 53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 +92 42 C6 1D 0C 18 EC 3F BC 4F 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 46 +DE 46 B2 40 0A 52 08 52 B2 40 D0 50 0E 18 B2 40 +B4 5B 0C 18 30 12 56 51 B2 40 86 47 84 47 B2 40 +08 48 06 48 B2 40 98 46 96 46 B2 40 18 00 0A 18 +37 40 1A 44 36 40 92 44 35 40 0E 44 34 40 00 44 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 9A 51 +04 57 41 52 4D 00 30 40 0A 52 3D 40 3E 52 92 C3 +30 01 1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E 48 +06 0D 1B 5B 37 6D 23 00 D6 47 34 46 1E 48 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 47 14 48 30 FF A0 4A +B8 44 24 46 1E 48 0A 62 79 74 65 73 20 66 72 65 +65 00 3C 46 9A 4C 82 4F 04 43 4F 4C 44 00 92 B3 +CA 05 FD 23 B2 40 04 A5 20 01 3E 52 B2 40 88 5A +5C 01 B2 40 FE FF 02 02 B2 D3 06 02 B2 D3 26 02 +B2 40 FF BF 22 02 E2 D3 25 02 F2 43 22 03 F2 D3 +26 03 F2 40 A5 00 41 01 F2 40 10 00 40 01 D2 43 +41 01 F2 40 A5 00 61 01 B2 40 48 00 62 01 82 43 +66 01 39 40 00 01 B2 40 33 00 64 01 D2 43 61 01 +92 D2 9E 01 08 18 38 40 59 14 18 83 FE 23 19 83 +FA 23 B2 D2 B0 01 F2 D0 10 00 2A 03 F2 C0 40 00 +A1 04 39 40 00 08 29 83 89 43 00 1C FC 23 39 40 +34 00 29 83 B9 40 9C 52 CC FF FB 23 B2 40 26 47 +F0 FF B2 40 81 00 C0 05 92 42 02 18 C6 05 92 42 +04 18 C8 05 92 C3 C0 05 92 D3 DA 05 3F 40 80 1C +31 40 E0 1C 30 12 06 52 40 3F 88 52 07 43 4F 4D +50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B 0E 5C +0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 FF FF +F5 27 02 2C 3E 43 30 4D 1E 43 30 4D B2 4D 86 5B +54 48 45 4E 5D 00 30 4D 8E 53 86 5B 45 4C 53 45 +5D 00 87 12 14 48 00 00 C6 44 42 4B 80 48 24 4B +34 44 40 46 04 54 44 44 1E 48 06 5B 54 48 45 4E +5D 00 64 53 4A 46 D4 53 F8 47 D0 44 58 44 4A 46 +AA 53 2A 44 44 44 1E 48 06 5B 45 4C 53 45 5D 00 +64 53 4A 46 F2 53 F8 47 D0 44 58 44 4A 46 A8 53 +2A 44 1E 48 04 5B 49 46 5D 00 64 53 4A 46 AA 53 +3C 46 A8 53 F8 47 1E 48 05 0D 0A 6B 6F 20 D6 47 +8C 47 32 4B 3C 46 AA 53 9A 53 84 5B 49 46 5D 00 +0E 93 3E 4F BE 27 30 4D 1A 54 89 5B 44 45 46 49 +4E 45 44 5D 87 12 42 4B 80 48 EE 48 6A 44 2A 44 +2A 54 8B 5B 55 4E 44 45 46 49 4E 45 44 5D 87 12 +42 4B 80 48 EE 48 6A 44 00 45 2A 44 5E 54 3D 41 +B2 4E 0E 18 A2 4E 0C 18 3E 4F 30 40 56 51 48 50 +06 4D 41 52 4B 45 52 00 B0 12 B8 4D BA 40 84 12 +FC FF BA 40 5C 54 FE FF 9A 42 C8 1D 00 00 28 83 +8A 48 02 00 A2 52 C6 1D 30 40 00 4E 1C 15 B0 12 +2A 44 80 48 EE 48 4A 46 B2 54 AA 49 40 46 CE 4C +CC 54 B4 54 39 4E 39 80 86 12 08 24 19 53 02 20 +2E 4E 04 3C 2E 53 19 53 01 24 2E 82 1B 17 30 41 +3E 40 28 00 B0 12 9C 54 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D 92 53 -C4 1D B0 12 2A 44 C4 49 D8 4A 28 47 AA 57 A0 57 -21 53 3E 90 10 00 87 2D DA 2B AC 57 B2 41 C4 1D -D6 3F 87 12 B0 45 AE 56 BA 57 0C 43 1B 42 C6 1D -A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 2F 20 92 53 -C4 1D B0 12 10 57 B0 12 62 57 0E 93 03 20 3C 40 -00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 -03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 -12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 -3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 1D A2 53 +C4 1D B0 12 2A 44 80 48 AA 49 40 46 0A 55 00 55 +21 53 3E 90 10 00 7D 2D E1 2B 0C 55 B2 41 C4 1D +DD 3F 87 12 42 4B 74 48 1A 55 0C 43 1B 42 C6 1D +A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 27 20 92 53 +C4 1D B0 12 9C 54 3C 40 00 03 0E 93 1C 24 3C 40 +10 03 1E 93 18 24 3C 40 20 03 2E 93 14 24 3C 40 +20 02 2E 92 10 24 3C 40 30 02 3E 92 0C 24 3C 40 +30 03 3E 93 08 24 3C 40 30 00 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 -09 20 3C 40 10 02 92 53 C4 1D B0 12 10 57 B0 12 -62 57 EB 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 -C4 1D B0 12 88 57 0C 20 3C 50 10 00 3E 40 2B 00 -B0 12 88 57 92 92 C0 1D C4 1D 02 24 92 53 C4 1D -8E 10 0C 5E D8 3F B0 12 88 57 FA 23 3C 50 10 00 -B0 12 6C 57 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D -87 12 B0 45 AE 56 98 58 FE 90 26 00 00 00 3E 40 -20 00 03 20 3C 50 82 00 C6 3F B0 12 88 57 E1 23 -3C 50 80 00 B0 12 6C 57 DC 3F 20 48 04 52 45 54 -49 00 87 12 34 44 00 13 D6 4B 2A 44 34 44 2C 00 -B2 57 90 58 D6 58 2E 4E 0E DC 09 4B A2 3F 4C 50 -03 4D 4F 56 84 12 CC 58 00 40 E0 58 05 4D 4F 56 -2E 42 84 12 CC 58 40 40 00 00 03 41 44 44 84 12 -CC 58 00 50 FA 58 05 41 44 44 2E 42 84 12 CC 58 -40 50 06 59 04 41 44 44 43 00 84 12 CC 58 00 60 -14 59 06 41 44 44 43 2E 42 00 84 12 CC 58 40 60 -BC 58 04 53 55 42 43 00 84 12 CC 58 00 70 32 59 -06 53 55 42 43 2E 42 00 84 12 CC 58 40 70 40 59 -03 53 55 42 84 12 CC 58 00 80 50 59 05 53 55 42 -2E 42 84 12 CC 58 40 80 2E 50 03 43 4D 50 84 12 -CC 58 00 90 6A 59 05 43 4D 50 2E 42 84 12 CC 58 -40 90 1C 50 04 44 41 44 44 00 84 12 CC 58 00 A0 -84 59 06 44 41 44 44 2E 42 00 84 12 CC 58 40 A0 -76 59 03 42 49 54 84 12 CC 58 00 B0 A2 59 05 42 -49 54 2E 42 84 12 CC 58 40 B0 AE 59 03 42 49 43 -84 12 CC 58 00 C0 BC 59 05 42 49 43 2E 42 84 12 -CC 58 40 C0 C8 59 03 42 49 53 84 12 CC 58 00 D0 -D6 59 05 42 49 53 2E 42 84 12 CC 58 40 D0 00 00 -03 58 4F 52 84 12 CC 58 00 E0 F0 59 05 58 4F 52 -2E 42 84 12 CC 58 40 E0 22 59 03 41 4E 44 84 12 -CC 58 00 F0 0A 5A 05 41 4E 44 2E 42 84 12 CC 58 -40 F0 B0 45 B2 57 28 5A 0A 4C 3C F0 70 00 8A 10 -3A F0 0F 00 0C DA 4F 3F 5C 59 03 52 52 43 84 12 -22 5A 00 10 3A 5A 05 52 52 43 2E 42 84 12 22 5A -40 10 46 5A 04 53 57 50 42 00 84 12 22 5A 80 10 -54 5A 03 52 52 41 84 12 22 5A 00 11 62 5A 05 52 -52 41 2E 42 84 12 22 5A 40 11 6E 5A 03 53 58 54 -84 12 22 5A 80 11 00 00 04 50 55 53 48 00 84 12 -22 5A 00 12 88 5A 06 50 55 53 48 2E 42 00 84 12 -22 5A 40 12 E2 59 04 43 41 4C 4C 00 84 12 22 5A -80 12 1A 53 0E 4A 87 12 E2 46 60 49 0D 6F 75 74 -20 6F 66 20 62 6F 75 6E 64 73 48 4D B0 45 AE 56 -D2 5A 92 53 C4 1D 3E 40 2C 00 B0 12 2A 44 C4 49 -D8 4A 28 47 CC 4D 86 58 EA 5A 0A 4E 3E 4F 1A 83 -E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A -08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F -8A 10 5A 06 8F 3F 7C 5A 06 52 52 43 4D 2E 41 00 -84 12 CC 5A 40 00 18 5B 04 52 52 43 4D 00 84 12 -CC 5A 50 00 28 5B 06 52 52 41 4D 2E 41 00 84 12 -CC 5A 40 01 36 5B 04 52 52 41 4D 00 84 12 CC 5A -50 01 46 5B 06 52 4C 41 4D 2E 41 00 84 12 CC 5A -40 02 54 5B 04 52 4C 41 4D 00 84 12 CC 5A 50 02 -64 5B 06 52 52 55 4D 2E 41 00 84 12 CC 5A 40 03 -72 5B 04 52 52 55 4D 00 84 12 CC 5A 50 03 96 5A -07 50 55 53 48 4D 2E 41 84 12 CC 5A 00 14 90 5B -05 50 55 53 48 4D 84 12 CC 5A 00 15 A0 5B 06 50 -4F 50 4D 2E 41 00 84 12 CC 5A 00 16 AE 5B 04 50 -4F 50 4D 00 84 12 CC 5A 00 17 85 12 00 3C 82 5B -03 53 3E 3D 85 12 00 38 D0 5B 02 53 3C 00 85 12 -00 34 BE 5B 03 30 3E 3D 85 12 00 30 E4 5B 02 30 -3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 00 2C -F8 5B 03 55 3E 3D 85 12 00 28 EE 5B 03 30 3C 3E -85 12 00 24 0C 5C 02 30 3D 00 85 12 00 20 00 00 -02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D -0E 4A 30 4D 02 5C 04 54 48 45 4E 00 1A 42 C6 1D -08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 -31 2F 88 DA 00 00 30 4D 92 59 04 45 4C 53 45 00 -1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 -8F 4A 00 00 E3 3F 36 5C 05 55 4E 54 49 4C 3A 4F -08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 -00 FE 10 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 -C6 1D 30 4D 16 5A 05 41 47 41 49 4E 87 12 CA 5B -7E 5C 2A 44 00 00 05 57 48 49 4C 45 87 12 24 5C -78 44 2A 44 DA 5B 06 52 45 50 45 41 54 00 87 12 -CA 5B 7E 5C 3C 5C 2A 44 DA 5C 3D 41 2E 4E 08 4E -3E 4F 2A 48 0A 93 88 43 00 00 CA 23 98 42 C6 1D -00 00 30 4D A6 5A 03 42 57 31 84 12 D8 5C E0 1D -F6 5C 03 42 57 32 84 12 D8 5C E2 1D 02 5D 03 42 -57 33 84 12 D8 5C E4 1D 1A 5D 3D 41 1A 42 C6 1D -2E 4E 28 4E 08 93 8E 43 00 00 8B 23 BA 4F 00 00 -A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 -57 31 84 12 18 5D E6 1D 3E 5D 03 46 57 32 84 12 -18 5D E8 1D 4A 5D 03 46 57 33 84 12 18 5D EA 1D -3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 -3E E0 00 08 30 4D 56 5D 04 47 4F 54 4F 00 87 12 -CA 5B BE 4D CC 4B 2A 44 00 00 05 3F 47 4F 54 4F -87 12 60 5D BE 4D CC 4B 2A 44 00 00 03 4A 4D 50 -87 12 BE 4D AC 5C 2A 44 8A 5D 04 3F 4A 4D 50 00 -87 12 60 5D BE 4D 78 44 7E 5C 2A 44 87 12 B0 45 -AE 56 C4 5D 69 4E 3E 4F 3C 4F 2C 4C 1B 42 C6 1D -A2 53 C6 1D 79 90 52 00 0A 20 B0 12 88 57 5E 0E -5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D 79 90 -23 00 0D 20 3C C0 40 00 92 53 C4 1D A2 53 C6 1D -B0 12 10 57 BB 4F 02 00 3E F0 0F 00 E8 3F 79 90 -26 00 03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 79 90 -40 00 12 20 92 53 C4 1D B0 12 88 57 D8 23 3C D0 -10 00 3E 40 2B 00 B0 12 88 57 92 92 C0 1D C4 1D -CE 27 92 53 C4 1D CB 3F 3C D0 30 00 A2 53 C6 1D -3E 40 28 00 B0 12 10 57 BB 4F 02 00 3E 40 29 00 -EA 3F 87 12 B0 45 AE 56 6A 5E 3B 4F 2C 4B 69 4E -7E 40 20 00 79 90 52 00 03 20 B0 12 88 57 B1 3F -3C C0 F0 00 A2 53 C6 1D 79 90 26 00 09 20 3C D0 -60 00 92 53 C4 1D B0 12 10 57 BB 4F 02 00 A1 3F -3C D0 70 00 3E 40 28 00 B0 12 10 57 BB 4F 02 00 -3E 40 29 00 E2 3F 34 44 2C 00 BC 5D 62 5E 62 44 -2A 44 EC 58 04 4D 4F 56 41 00 84 12 B6 5E C0 00 -0E 5D 04 43 4D 50 41 00 84 12 B6 5E D0 00 A6 5C -04 41 44 44 41 00 84 12 B6 5E E0 00 C6 5C 04 53 -55 42 41 00 84 12 B6 5E F0 00 D2 5E 05 43 41 4C -4C 41 87 12 B0 45 AE 56 0A 5F 1B 42 C6 1D A2 53 -C6 1D 6E 4E 3C 40 34 01 7E 90 52 00 0B 20 7E 40 -20 00 B0 12 88 57 5C 0E 0C DE 8B 4C 00 00 3E 4F -3D 41 30 4D 2C 53 7E 90 40 00 0B 20 92 53 C4 1D -7E 40 20 00 B0 12 88 57 EE 23 1C 53 3E 40 2B 00 -E8 3F A2 53 C6 1D 7E 90 23 00 09 20 3C 40 3B 01 -92 53 C4 1D B0 12 10 57 BB 4F 02 00 DC 3F 7E 90 -26 00 02 20 2C 53 F4 3F 7E 40 28 00 1C 83 B0 12 -10 57 BB 4F 02 00 3E 40 29 00 CB 3F 87 12 B0 45 -AE 56 94 5F 69 4E 3E 4F 3C 40 00 18 79 90 52 00 -05 20 B0 12 88 57 0E 4C 3D 41 30 4D 82 43 EE 1D -79 90 23 00 0B 20 92 53 C4 1D B0 12 10 57 2F 53 -3E F0 0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 26 00 -F2 27 79 90 40 00 12 20 92 53 C4 1D B0 12 88 57 -E2 23 3E 40 2B 00 92 53 C4 1D B0 12 88 57 92 92 -C0 1D C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 28 00 -B0 12 10 57 8F 4E 00 00 3E 40 29 00 B0 12 88 57 -3E 4F 3E F0 0F 00 0C DE EA 3F 87 12 B0 45 AE 56 -22 60 3C 4F 69 4E 3E 40 20 00 79 90 52 00 BB 27 -82 43 EE 1D 79 90 26 00 08 20 92 53 C4 1D B0 12 -10 57 2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 B0 12 -10 57 F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E 3E 4F -1C D2 EE 1D 82 43 EE 1D 3C DE 8B 4C 00 00 B2 41 -C4 1D 30 4D 34 44 C4 1D F2 44 B0 44 34 44 2C 00 -8C 5F 1A 60 54 60 24 47 CC 58 C4 5E 04 4D 4F 56 -58 00 84 12 74 60 40 00 00 40 8C 60 06 4D 4F 56 -58 2E 41 00 84 12 74 60 00 00 40 40 9C 60 06 4D -4F 56 58 2E 42 00 84 12 74 60 40 00 40 40 E0 5E -04 41 44 44 58 00 84 12 74 60 40 00 00 50 C0 60 -06 41 44 44 58 2E 41 00 84 12 74 60 00 00 40 50 -D0 60 06 41 44 44 58 2E 42 00 84 12 74 60 40 00 -40 50 E2 60 05 41 44 44 43 58 84 12 74 60 40 00 -00 60 F4 60 07 41 44 44 43 58 2E 41 84 12 74 60 -00 00 40 60 04 61 07 41 44 44 43 58 2E 42 84 12 -74 60 40 00 40 60 EE 5E 05 53 55 42 43 58 84 12 -74 60 40 00 00 70 28 61 07 53 55 42 43 58 2E 41 -84 12 74 60 00 00 40 70 38 61 07 53 55 42 43 58 -2E 42 84 12 74 60 40 00 40 70 4A 61 04 53 55 42 -58 00 84 12 74 60 40 00 00 80 5C 61 06 53 55 42 -58 2E 41 00 84 12 74 60 00 00 40 80 6C 61 06 53 -55 42 58 2E 42 00 84 12 74 60 40 00 40 80 FC 5E -04 43 4D 50 58 00 84 12 74 60 40 00 00 90 90 61 -06 43 4D 50 58 2E 41 00 84 12 74 60 00 00 40 90 -A0 61 06 43 4D 50 58 2E 42 00 84 12 74 60 40 00 -40 90 5A 5C 05 44 41 44 44 58 84 12 74 60 40 00 -00 A0 C4 61 07 44 41 44 44 58 2E 41 84 12 74 60 -00 00 40 A0 D4 61 07 44 41 44 44 58 2E 42 84 12 -74 60 40 00 40 A0 B2 61 04 42 49 54 58 00 84 12 -74 60 40 00 00 B0 F8 61 06 42 49 54 58 2E 41 00 -84 12 74 60 00 00 40 B0 08 62 06 42 49 54 58 2E -42 00 84 12 74 60 40 00 40 B0 1A 62 04 42 49 43 -58 00 84 12 74 60 40 00 00 C0 2C 62 06 42 49 43 -58 2E 41 00 84 12 74 60 00 00 40 C0 3C 62 06 42 -49 43 58 2E 42 00 84 12 74 60 40 00 40 C0 4E 62 -04 42 49 53 58 00 84 12 74 60 40 00 00 D0 60 62 -06 42 49 53 58 2E 41 00 84 12 74 60 00 00 40 D0 -70 62 06 42 49 53 58 2E 42 00 84 12 74 60 40 00 -40 D0 FC 59 04 58 4F 52 58 00 84 12 74 60 40 00 -00 E0 94 62 06 58 4F 52 58 2E 41 00 84 12 74 60 -00 00 40 E0 A4 62 06 58 4F 52 58 2E 42 00 84 12 -74 60 40 00 40 E0 16 61 04 41 4E 44 58 00 84 12 -74 60 40 00 00 F0 C8 62 06 41 4E 44 58 2E 41 00 -84 12 74 60 00 00 40 F0 D8 62 06 41 4E 44 58 2E -42 00 84 12 74 60 40 00 40 F0 34 44 C4 1D F2 44 -B0 44 B0 45 8C 5F 54 60 24 47 22 5A 7E 61 04 52 -52 43 58 00 84 12 FA 62 40 00 00 10 0E 63 06 52 -52 43 58 2E 41 00 84 12 FA 62 00 00 40 10 1E 63 -06 52 52 43 58 2E 42 00 84 12 FA 62 40 00 40 10 -30 63 04 52 52 55 58 00 84 12 FA 62 40 01 00 10 -42 63 06 52 52 55 58 2E 41 00 84 12 FA 62 00 01 -40 10 52 63 06 52 52 55 58 2E 42 00 84 12 FA 62 -40 01 40 10 64 63 05 53 57 50 42 58 84 12 FA 62 -40 00 80 10 76 63 07 53 57 50 42 58 2E 41 84 12 -FA 62 00 00 80 10 86 63 04 52 52 41 58 00 84 12 -FA 62 40 00 00 11 98 63 06 52 52 41 58 2E 41 00 -84 12 FA 62 00 00 40 11 A8 63 06 52 52 41 58 2E -42 00 84 12 FA 62 40 00 40 11 BA 63 04 53 58 54 -58 00 84 12 FA 62 40 00 80 11 CC 63 06 53 58 54 -58 2E 41 00 84 12 FA 62 00 00 80 11 16 5C 05 50 -55 53 48 58 84 12 FA 62 40 00 00 12 EE 63 07 50 -55 53 48 58 2E 41 84 12 FA 62 00 00 40 12 FE 63 -07 50 55 53 48 58 2E 42 84 12 FA 62 40 00 40 12 -DC 63 03 52 50 54 87 12 B0 45 AE 56 2E 64 29 4E -7E 40 20 00 79 90 52 00 06 20 B0 12 88 57 03 24 -3E D0 80 00 04 3C B0 12 10 57 3E F0 0F 00 82 4E -EE 1D 3E 4F 3D 41 30 4D +07 20 3C 40 10 02 92 53 C4 1D B0 12 9C 54 ED 3F +7A 90 40 00 16 20 3C 40 20 00 92 53 C4 1D B0 12 +E8 54 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 E8 54 +92 92 C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 0C 5E +DA 3F B0 12 E8 54 FA 23 3C 50 10 00 B0 12 D0 54 +EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 42 4B +74 48 E4 55 FE 90 26 00 00 00 3E 40 20 00 03 20 +3C 50 82 00 C8 3F B0 12 E8 54 E1 23 3C 50 80 00 +B0 12 D0 54 DC 3F D6 46 04 52 45 54 49 00 87 12 +14 48 00 13 B0 4A 2A 44 14 48 2C 00 12 55 DC 55 +22 56 09 4B 2E 4E 0E DC A4 3F FC 4E 03 4D 4F 56 +84 12 18 56 00 40 2C 56 05 4D 4F 56 2E 42 84 12 +18 56 40 40 00 00 03 41 44 44 84 12 18 56 00 50 +46 56 05 41 44 44 2E 42 84 12 18 56 40 50 52 56 +04 41 44 44 43 00 84 12 18 56 00 60 60 56 06 41 +44 44 43 2E 42 00 84 12 18 56 40 60 08 56 04 53 +55 42 43 00 84 12 18 56 00 70 7E 56 06 53 55 42 +43 2E 42 00 84 12 18 56 40 70 8C 56 03 53 55 42 +84 12 18 56 00 80 9C 56 05 53 55 42 2E 42 84 12 +18 56 40 80 DE 4E 03 43 4D 50 84 12 18 56 00 90 +B6 56 05 43 4D 50 2E 42 84 12 18 56 40 90 CC 4E +04 44 41 44 44 00 84 12 18 56 00 A0 D0 56 06 44 +41 44 44 2E 42 00 84 12 18 56 40 A0 C2 56 03 42 +49 54 84 12 18 56 00 B0 EE 56 05 42 49 54 2E 42 +84 12 18 56 40 B0 FA 56 03 42 49 43 84 12 18 56 +00 C0 08 57 05 42 49 43 2E 42 84 12 18 56 40 C0 +14 57 03 42 49 53 84 12 18 56 00 D0 22 57 05 42 +49 53 2E 42 84 12 18 56 40 D0 00 00 03 58 4F 52 +84 12 18 56 00 E0 3C 57 05 58 4F 52 2E 42 84 12 +18 56 40 E0 6E 56 03 41 4E 44 84 12 18 56 00 F0 +56 57 05 41 4E 44 2E 42 84 12 18 56 40 F0 42 4B +12 55 74 57 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 +0C DA 4F 3F A8 56 03 52 52 43 84 12 6E 57 00 10 +86 57 05 52 52 43 2E 42 84 12 6E 57 40 10 92 57 +04 53 57 50 42 00 84 12 6E 57 80 10 A0 57 03 52 +52 41 84 12 6E 57 00 11 AE 57 05 52 52 41 2E 42 +84 12 6E 57 40 11 BA 57 03 53 58 54 84 12 6E 57 +80 11 00 00 04 50 55 53 48 00 84 12 6E 57 00 12 +D4 57 06 50 55 53 48 2E 42 00 84 12 6E 57 40 12 +2E 57 04 43 41 4C 4C 00 84 12 6E 57 80 12 1A 53 +0E 4A 87 12 34 46 1E 48 0D 6F 75 74 20 6F 66 20 +62 6F 75 6E 64 73 4C 4C 42 4B 74 48 1E 58 92 53 +C4 1D 3E 40 2C 00 B0 12 2A 44 80 48 AA 49 40 46 +CE 4C D2 55 36 58 0A 4E 3E 4F 1A 83 E0 33 29 4E +59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 +10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 +8F 3F C8 57 04 52 52 43 4D 00 84 12 18 58 50 00 +64 58 04 52 52 41 4D 00 84 12 18 58 50 01 72 58 +04 52 4C 41 4D 00 84 12 18 58 50 02 80 58 04 52 +52 55 4D 00 84 12 18 58 50 03 E2 57 05 50 55 53 +48 4D 84 12 18 58 00 15 9C 58 04 50 4F 50 4D 00 +84 12 18 58 00 17 8E 58 03 53 3E 3D 85 12 00 38 +B8 58 02 53 3C 00 85 12 00 34 AA 58 03 30 3E 3D +85 12 00 30 CC 58 02 30 3C 00 85 12 00 30 00 00 +02 55 3C 00 85 12 00 2C E0 58 03 55 3E 3D 85 12 +00 28 D6 58 03 30 3C 3E 85 12 00 24 F4 58 02 30 +3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 C6 1D +8A 4E 00 00 A2 53 C6 1D 0E 4A 30 4D EA 58 04 54 +48 45 4E 00 1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 +0A 89 0A 11 3A 90 00 02 63 2F 88 DA 00 00 30 4D +DE 56 04 45 4C 53 45 00 1A 42 C6 1D BA 40 00 3C +00 00 A2 53 C6 1D 2F 83 8F 4A 00 00 E3 3F 1E 59 +05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D +2A 83 0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 FF 03 +08 DA 89 48 00 00 A2 53 C6 1D 30 4D 62 57 05 41 +47 41 49 4E 0A 4E 38 40 00 3C E7 3F 00 00 05 57 +48 49 4C 45 87 12 0C 59 76 44 2A 44 C2 58 06 52 +45 50 45 41 54 00 87 12 94 59 24 59 2A 44 C0 59 +3D 41 08 4E 3E 4F 2A 48 B2 92 C4 1D CD 2F 98 42 +C6 1D 00 00 30 4D F2 57 03 42 57 31 84 12 BE 59 +00 00 D8 59 03 42 57 32 84 12 BE 59 00 00 E4 59 +03 42 57 33 84 12 BE 59 00 00 FC 59 3D 41 1A 42 +C6 1D 28 4E B2 92 C4 1D 90 2B BA 4F 00 00 A2 53 +C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 +84 12 FA 59 00 00 1C 5A 03 46 57 32 84 12 FA 59 +00 00 28 5A 03 46 57 33 84 12 FA 59 00 00 00 00 +05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 +3E B0 00 10 02 24 3E E0 00 08 87 12 C0 4C DA 4A +2A 44 34 5A 04 47 4F 54 4F 00 2F 83 8F 4E 00 00 +3E 40 00 3C F2 3F 87 12 42 4B 74 48 7E 5A 69 4E +3E 4F 3C 4F 2C 4C 1B 42 C6 1D A2 53 C6 1D 79 90 +52 00 0A 20 B0 12 E8 54 5E 0E 5E 0E 0E DC 8B 4E +00 00 0E 4B 3D 41 30 4D 79 90 23 00 0D 20 3C C0 +40 00 92 53 C4 1D A2 53 C6 1D B0 12 9C 54 BB 4F +02 00 3E F0 0F 00 E8 3F 79 90 26 00 03 20 3C E0 +E0 00 EF 3F 3C C0 F0 00 79 90 40 00 12 20 92 53 +C4 1D B0 12 E8 54 D8 23 3C D0 10 00 3E 40 2B 00 +B0 12 E8 54 92 92 C0 1D C4 1D CE 27 92 53 C4 1D +CB 3F 3C D0 30 00 A2 53 C6 1D 3E 40 28 00 B0 12 +9C 54 BB 4F 02 00 3E 40 29 00 EA 3F 87 12 42 4B +74 48 24 5B 3B 4F 2C 4B 69 4E 7E 40 20 00 79 90 +52 00 03 20 B0 12 E8 54 B1 3F 3C C0 F0 00 A2 53 +C6 1D 79 90 26 00 09 20 3C D0 60 00 92 53 C4 1D +B0 12 9C 54 BB 4F 02 00 A1 3F 3C D0 70 00 3E 40 +28 00 B0 12 9C 54 BB 4F 02 00 3E 40 29 00 E2 3F +14 48 2C 00 76 5A 1C 5B 66 44 2A 44 38 56 04 4D +4F 56 41 00 84 12 70 5B C0 00 F0 59 04 43 4D 50 +41 00 84 12 70 5B D0 00 8E 59 04 41 44 44 41 00 +84 12 70 5B E0 00 AE 59 04 53 55 42 41 00 84 12 +70 5B F0 00 @FFFE -EE 55 +9C 52 q diff --git a/binaries/MSP_EXP430FR5969_1MHz.txt b/binaries/MSP_EXP430FR5969_1MHz.txt index fd906b3..1583874 100644 --- a/binaries/MSP_EXP430FR5969_1MHz.txt +++ b/binaries/MSP_EXP430FR5969_1MHz.txt @@ -1,524 +1,386 @@ @1800 -10 00 08 00 00 D6 E8 03 05 00 18 00 46 64 98 52 -2C 01 7F B0 00 48 12 48 +10 00 08 00 00 D6 E8 03 05 00 18 00 A2 5B D0 50 +2D 01 6B B4 B6 46 C8 46 @4400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 44 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 44 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 44 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 44 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 44 02 3E 52 00 -0E 12 3E 4F 30 4D 96 44 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 44 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 44 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 44 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 45 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 44 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 45 02 31 2D 00 -1E 83 30 4D D8 44 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 45 -02 30 3D 00 1E 83 0E 7E 30 4D 60 45 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 45 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 44 01 3E 3E 8F F4 3B EB 37 0E 45 02 42 4C 00 -85 12 20 00 AC 45 04 42 41 53 45 00 85 12 DC 1D -C8 44 05 53 54 41 54 45 85 12 BE 1D 96 45 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 45 06 55 4D 2F -4D 4F 44 00 30 12 62 44 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 44 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 45 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 45 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 46 -02 23 53 00 87 12 32 46 6A 46 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 46 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 45 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 45 -02 44 2E 00 87 12 D2 45 44 44 B0 44 4C 45 64 46 -BC 44 A2 46 7E 46 22 49 EA 48 2A 44 DC 45 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 44 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 46 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 44 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 46 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 46 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 46 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 45 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 47 03 4B 45 59 30 40 A0 47 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 00 48 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 12 48 30 4D 00 47 -06 41 43 43 45 50 54 00 30 40 CC 47 3C 40 6E 48 -3B 40 38 48 2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 -3C 40 20 00 3D 40 62 48 92 B3 DC 05 05 24 18 42 -CC 05 38 90 0A 00 04 20 21 53 39 40 26 48 4D 15 -A2 B3 DC 05 FD 27 B2 40 11 00 CE 05 E2 C3 23 02 -30 41 B2 40 13 00 CE 05 E2 D3 23 02 30 41 00 00 -05 53 4C 45 45 50 30 40 2A 48 12 D2 0A 18 FB 3F -21 52 3A 17 58 42 CC 05 48 9C 08 2C 48 9B E9 27 -78 92 11 20 2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 -CE 48 00 00 1E 53 A2 B3 DC 05 FD 27 82 48 CE 05 -30 4D 64 48 2D 83 92 B3 DC 05 E4 23 FC 27 82 93 -DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 -0A 18 30 4D B0 46 04 45 4D 49 54 00 30 40 90 48 -08 4E 3E 4F E0 3F 10 47 03 43 49 42 85 12 3C 1D -3F 80 06 00 8F 4E 04 00 3E 40 54 00 9F 42 9E 48 -00 00 AF 4F 02 00 88 3F 86 48 04 45 43 48 4F 00 -B2 40 82 48 5C 48 82 43 DE 1D 30 4D E0 46 06 4E -4F 45 43 48 4F 00 B2 40 30 4D 5C 48 92 43 DE 1D -30 4D 9C 46 05 53 50 41 43 45 2F 83 8F 4E 00 00 -3E 40 20 00 CB 3F E4 48 06 53 50 41 43 45 53 00 -0E 93 09 24 0D 12 3D 40 0C 49 EF 3F 0E 49 2D 83 -1E 83 EB 23 3D 41 3E 4F 30 4D 66 47 04 54 59 50 -45 00 0E 93 0F 24 1E 15 3D 40 38 49 28 4F 7E 48 -8F 48 00 00 2F 83 AA 3F 3A 49 2D 83 91 83 02 00 -F5 23 1D 17 2F 53 3E 4F 30 4D 98 48 02 43 52 00 -30 40 54 49 87 12 60 49 02 0D 0A 00 22 49 2A 44 -2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 -0D 63 30 4D F8 48 82 53 22 00 82 43 B4 1D 87 12 -34 44 60 49 D6 4B 34 44 22 00 C4 49 8E 49 3D 41 -B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D 3E 4F -92 B3 C6 1D A2 63 C6 1D 30 4D CE 48 82 2E 22 00 -87 12 7A 49 34 44 22 49 D6 4B 2A 44 00 00 04 57 -4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A 3A 5C -28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 60 00 -C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 -4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F -1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E CE 48 -00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 0C 4E -65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 1E 24 -58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E FE FF -0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C -FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 -0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C 00 00 -35 40 0E 44 34 40 00 44 30 4D A2 45 07 3E 4E 55 -4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D -6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 -7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 -82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 -09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 8F 48 -02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 2D 15 -3D 40 1E 4B 09 43 08 43 3F 82 8F 4E 06 00 0C 4E -7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 02 00 -E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 04 24 -3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F 20 4B -2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 7A 90 -F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 8F 49 -02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 79 90 -0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 09 9B -08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 45 2A 17 -E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A 4E 93 -2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 3F 50 -06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 BF 4F -00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 00 00 -9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 2F 53 -30 4D BA 48 07 45 58 45 43 55 54 45 0A 4E 3E 4F -00 4A 26 45 01 2C 1A 42 C6 1D A2 53 C6 1D 8A 4E -00 00 3E 4F 30 4D D4 4B 87 4C 49 54 45 52 41 4C -82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 -34 44 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 -00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 EB 3F -30 4D 4C 49 05 43 4F 55 4E 54 2F 83 1E 53 8F 4E -00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F C2 1D -3E 4F 82 43 C4 1D 30 4D 87 12 38 4C B0 45 C4 49 -52 4C 3D 40 5A 4C E2 22 5D 3E 5C 4C 0A 4E 3E 4F -3D 40 72 4C 39 27 3D 40 4C 4C 1A E2 BE 1D B3 27 -AD 23 74 4C 3E 4F 3D 40 4C 4C BA 23 DE 53 00 00 -68 4E 08 5E F8 40 3F 00 00 00 3D 40 3E 4F CD 3F -C4 4B 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D -3C 49 3B 49 3A 49 3D 15 B0 12 2A 44 48 4C B0 4C -B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D -6C 45 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C -B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 50 49 -A0 48 EA 48 48 4C DE 44 70 45 60 49 0C 73 74 61 -63 6B 20 65 6D 70 74 79 21 00 3C 4D 34 44 30 FF -F2 46 8A 45 60 49 0A 46 52 41 4D 20 66 75 6C 6C -21 00 3C 4D 24 47 DE 4C C0 47 05 41 42 4F 52 54 -3F 40 80 1C D1 3F 1A 4D 86 41 42 4F 52 54 22 00 -87 12 7A 49 34 44 3C 4D D6 4B 2A 44 8F 93 02 00 -03 20 2F 52 3E 4F 30 4D B0 12 FE 54 B0 12 00 48 -92 C3 DC 05 38 40 AA 0A 39 42 09 59 03 43 19 83 -FD 23 18 83 F9 23 92 B3 DC 05 F2 23 87 12 78 54 -34 44 DE 1D F2 44 C0 48 60 49 04 1B 5B 37 6D 00 -22 49 54 44 28 47 98 4D 50 49 60 49 05 6C 69 6E -65 3A 22 49 40 45 D2 46 22 49 60 49 04 1B 5B 30 -6D 00 22 49 20 4D 00 00 83 5B 27 5D 87 12 BE 4D -34 44 34 44 D6 4B D6 4B 2A 44 16 4A 01 27 87 12 -B0 45 C4 49 1C 4A 28 47 CC 4D 2A 44 7C 4C CE 45 -81 5C 92 42 C0 1D C4 1D 30 4D A8 4D 81 5B 82 43 -BE 1D 30 4D D0 4D 01 5D B2 43 BE 1D 30 4D BE 4F -02 00 3E 4F 30 4D 72 47 82 49 53 00 87 12 C8 45 -F2 44 28 47 10 4E AC 4D 34 44 EE 4D D6 4B 2A 44 -BE 4D EE 4D 2A 44 F8 4D 09 49 4D 4D 45 44 49 41 -54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D 76 49 -87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D -00 00 A2 53 C6 1D 30 4D C2 4C 88 50 4F 53 54 50 -4F 4E 45 00 87 12 B0 45 C4 49 1C 4A 54 44 28 47 -CC 4D 70 45 28 47 74 4E 34 44 34 44 D6 4B D6 4B -34 44 D6 4B D6 4B 2A 44 DC 4D 81 3B 82 93 BE 1D -A8 27 87 12 34 44 2A 44 D6 4B 12 4F DE 4D 2A 44 -7A 4E 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 -1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 -FE 4E BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D -82 4F BC 1D 30 4D 92 4E 01 3A 30 12 B2 4E 87 12 -A0 49 B0 45 C4 49 D8 4E 3D 41 08 4E 7A 4E 5A D3 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 44 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 44 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 44 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 44 02 3E 52 00 0E 12 3E 4F 30 4D 70 44 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 44 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 44 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 44 +01 21 BE 4F 00 00 3E 4F 30 4D CC 44 02 30 3D 00 +1E 83 0E 7E 30 4D FC 44 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 45 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 44 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 45 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 45 02 23 53 00 87 12 88 45 C0 45 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 45 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 44 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 45 34 44 86 44 D4 44 BA 45 +92 44 F8 45 D4 45 D6 47 42 4B 82 47 2A 44 22 45 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 45 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 46 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 46 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 46 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C3 23 02 30 41 B2 40 13 00 CE 05 E2 D3 +23 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 46 +B0 12 B6 46 12 D2 0A 18 F9 3F F0 44 06 41 43 43 +45 50 54 00 3C 40 64 47 3B 40 2E 47 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 47 +92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 CC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 +FD 27 82 48 CE 05 30 4D 5A 47 2D 83 92 B3 DC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 44 04 45 4D 49 +54 00 30 40 86 47 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C 47 04 45 43 48 4F 00 B2 40 82 48 +52 47 82 43 DE 1D 30 4D 32 46 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 47 92 43 DE 1D 30 4D 20 46 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 47 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 47 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 45 +02 43 52 00 30 40 08 48 87 12 1E 48 02 0D 0A 00 +D6 47 2A 44 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 45 82 53 22 00 82 43 B4 1D 87 12 14 48 +1E 48 B0 4A 14 48 22 00 80 48 4C 48 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA 47 82 2E 22 00 87 12 38 48 14 48 D6 47 +B0 4A 2A 44 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 +60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 +18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D +F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E +CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 +0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 +1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E +FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 +0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 +09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C +00 00 35 40 0E 44 34 40 00 44 30 4D 82 44 07 3E +4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 +DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 +07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 +D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 +E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 49 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 49 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 45 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 46 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 44 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC 46 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 47 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 4A 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 48 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 48 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 4B 42 4B 80 48 50 4B +3D 40 58 4B CC 22 82 3E 5A 4B 0A 4E 3E 4F 3D 40 +70 4B 23 27 3D 40 4A 4B 1A E2 BE 1D A1 27 B5 23 +72 4B 3E 4F 3D 40 4A 4B B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 4E CB 3F D2 4A +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 44 46 4B AE 4B B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 45 04 51 55 49 54 00 82 43 08 18 31 40 +E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 +04 48 8C 47 42 4B 82 47 46 4B A4 44 0C 45 1E 48 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 4C +14 48 30 FF A0 4A 26 45 1E 48 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 4C 3C 46 E0 4B C2 4A 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E 4C 86 41 42 4F +52 54 22 00 87 12 38 48 14 48 40 4C B0 4A 2A 44 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 51 +B0 12 B6 46 92 C3 DC 05 38 40 AA 0A 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 DC 05 F3 23 87 12 +42 51 14 48 DE 1D EA 44 AC 47 1E 48 04 1B 5B 37 +6D 00 D6 47 58 44 40 46 9A 4C 04 48 1E 48 05 6C +69 6E 65 3A D6 47 D0 44 24 46 D6 47 1E 48 04 1B +5B 30 6D 00 D6 47 24 4C 00 00 83 5B 27 5D 87 12 +C0 4C 14 48 14 48 B0 4A B0 4A 2A 44 E8 48 01 27 +87 12 42 4B 80 48 EE 48 40 46 CE 4C 2A 44 7A 4B +32 45 81 5C 92 42 C0 1D C4 1D 30 4D AA 4C 81 5B +82 43 BE 1D 30 4D D2 4C 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 4A 82 49 53 00 87 12 +BE 4B EA 44 40 46 12 4D AE 4C 14 48 F0 4C B0 4A +2A 44 C0 4C F0 4C 2A 44 FA 4C 09 49 4D 4D 45 44 +49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D +C4 4B 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 4B +80 48 EE 48 58 44 40 46 CE 4C 0C 45 40 46 5C 4D +14 48 14 48 B0 4A B0 4A 14 48 B0 4A B0 4A 2A 44 +DE 4C 81 3B 82 93 BE 1D B5 27 87 12 14 48 2A 44 +B0 4A FA 4D E0 4C 2A 44 62 4D 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 4D 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A 4D 01 3A 30 12 A0 4D 92 B3 C6 1D A2 63 C6 1D +87 12 42 4B 80 48 C8 4D 3D 41 08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E -3E 4F BA 40 30 40 00 00 BA 40 C4 4E 02 00 82 48 -B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D -30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D -A8 49 FE FF 89 48 00 00 30 4D 87 12 60 49 0F 73 -74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 48 4D -BE 49 08 56 41 52 49 41 42 4C 45 00 B0 12 CE 4E -BA 40 86 12 FC FF E4 3F 24 4C 08 43 4F 4E 53 54 -41 4E 54 00 B0 12 CE 4E BA 40 85 12 FC FF 8A 4E -FE FF 3E 4F D5 3F 5A 4F 06 43 52 45 41 54 45 00 -B0 12 CE 4E BA 40 85 12 FC FF 8A 4A FE FF C8 3F -92 4C 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 -00 00 8A 4D 02 00 3D 41 30 4D 92 4F 05 44 45 46 -45 52 30 12 20 4F 8B 3F 7C 4A 05 3E 42 4F 44 59 -2E 52 30 4D 78 4F 04 43 4F 44 45 00 B0 12 CE 4E -2A 82 82 4A C6 1D 87 12 C0 4E A2 52 74 52 2A 44 -C6 4F 07 43 4F 44 45 4E 4E 4D 87 12 9A 4E DE 4D -D0 4F 2A 44 00 00 07 45 4E 44 43 4F 44 45 87 12 -BC 52 12 4F 2A 44 28 4D 03 41 53 4D 92 42 DA 1D -EC 1D B2 40 78 52 DA 1D D9 3F F6 4F 06 45 4E 44 -41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 48 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 4C 90 4B 05 44 45 46 45 52 +B0 12 B8 4D BA 40 30 40 FC FF BA 40 AE 4D FE FF +E3 3F 1E 4B 06 43 52 45 41 54 45 00 B0 12 B8 4D +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 4E 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 49 05 3E 42 4F 44 59 2E 52 +30 4D 44 4E 04 43 4F 44 45 00 B0 12 B8 4D A2 82 +C6 1D 87 12 D2 50 AC 50 2A 44 84 4E 07 43 4F 44 +45 4E 4E 4D B0 12 86 4D F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 50 FA 4D 2A 44 2C 4C 03 41 +53 4D B2 40 B0 50 DA 1D E0 3F AC 4E 06 45 4E 44 +41 53 4D 00 87 12 B4 4E F4 50 2A 44 00 00 05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 -C6 1D B2 43 BE 1D 30 40 BC 52 00 00 05 4C 4F 32 +C6 1D B2 43 BE 1D 30 40 E0 50 00 00 05 4C 4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 44 -02 00 A2 52 C6 1D ED 3F 18 4E 85 48 49 32 4C 4F -87 12 F2 46 9A 50 D6 4B DE 4D A2 52 74 52 2A 44 -6A 50 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D -A2 52 C6 1D BE 40 28 47 00 00 2E 53 30 4D AC 4F +02 00 A2 52 C6 1D ED 3F 1A 4D 85 48 49 32 4C 4F +87 12 A0 4A 4A 4F B0 4A E0 4C D2 50 AC 50 2A 44 +1A 4F 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D +A2 52 C6 1D BE 40 40 46 00 00 2E 53 30 4D 5E 4E 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 -24 47 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 1C 49 +3C 46 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 47 84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D -E2 4F 85 42 45 47 49 4E 30 40 F2 46 C0 50 85 55 -4E 54 49 4C 39 40 28 47 A2 52 C6 1D 1A 42 C6 1D -8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D 08 50 85 41 -47 41 49 4E 39 40 24 47 EF 3F 42 4F 85 57 48 49 -4C 45 87 12 86 50 78 44 2A 44 30 4E 86 52 45 50 -45 41 54 00 87 12 04 51 C6 50 2A 44 A0 50 82 44 +9C 4E 85 42 45 47 49 4E 30 40 A0 4A 70 4F 85 55 +4E 54 49 4C 39 40 40 46 A2 52 C6 1D 1A 42 C6 1D +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 4E 85 41 +47 41 49 4E 39 40 3C 46 EF 3F 7A 48 85 57 48 49 +4C 45 87 12 36 4F 76 44 2A 44 34 48 86 52 45 50 +45 41 54 00 87 12 B4 4F 76 4F 2A 44 50 4F 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D -BE 40 3C 47 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 -00 00 30 4D E8 4B 84 4C 4F 4F 50 00 39 40 5E 47 +BE 40 54 46 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 +00 00 30 4D E2 4A 84 4C 4F 4F 50 00 39 40 76 46 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A -00 00 F6 3F 3E 4F 30 4D 98 47 85 2B 4C 4F 4F 50 -39 40 4C 47 E5 3F 56 51 85 4C 45 41 56 45 1A 42 -C6 1D BA 40 6E 47 00 00 BA 40 24 47 02 00 B2 50 -06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A -00 00 30 4D 98 51 04 4D 4F 56 45 00 0A 4E 38 4F -39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 -00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 -18 83 E8 49 00 00 1A 83 FA 23 30 4D 0C 51 0A 56 -4F 43 41 42 55 4C 41 52 59 00 87 12 80 4F 34 44 -10 00 34 44 00 00 3C 47 34 44 00 00 D6 4B 5E 47 -18 52 F2 46 34 44 C8 1D 44 44 F2 44 D6 4B FA 44 -98 4F 34 44 CA 1D FA 44 2A 44 BC 4D 05 46 4F 52 -54 48 84 12 32 52 9C 52 DC 55 DA 52 3C 52 82 50 -8A 51 06 54 CC 52 9C 54 E6 56 DE 50 4E 55 00 00 -DA 53 E6 4D BA 4F 00 00 FE 50 09 41 53 53 45 4D -42 4C 45 52 84 12 32 52 D8 62 70 62 D4 61 66 5D -0E 5C 8A 5D 9C 60 00 00 FE 63 10 64 66 5C A4 5C -A4 62 00 00 00 00 98 5D 66 52 6A 52 04 41 4C 53 -4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F -4A 4E 08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 -39 40 CC 1D 38 40 CA 1D 8A 3F AC 49 04 4F 4E 4C -59 00 82 43 CC 1D 30 4D 2E 51 0B 44 45 46 49 4E -49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D D2 50 -07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F -0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 -F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D -C8 4E 86 5B 54 48 45 4E 5D 00 30 4D 22 53 86 5B -45 4C 53 45 5D 00 87 12 34 44 00 00 36 45 B0 45 -C4 49 2A 4C 44 44 28 47 9C 53 8A 44 8A 44 60 49 -06 5B 54 48 45 4E 5D 00 F8 52 32 47 6A 53 44 49 -40 45 54 44 32 47 3E 53 2A 44 8A 44 8A 44 60 49 -06 5B 45 4C 53 45 5D 00 F8 52 32 47 8A 53 44 49 -40 45 54 44 32 47 3C 53 2A 44 60 49 04 5B 49 46 -5D 00 F8 52 32 47 3E 53 24 47 3C 53 44 49 60 49 -05 0D 0A 6B 6F 20 22 49 A0 48 38 4C 24 47 3E 53 -2E 53 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D -B2 53 89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 45 -C4 49 1C 4A 6C 44 2A 44 C2 53 8B 5B 55 4E 44 45 -46 49 4E 45 44 5D 87 12 B0 45 C4 49 1C 4A 6C 44 -64 45 2A 44 F6 53 3D 41 B2 4E 0E 18 A2 4E 0C 18 -3E 4F 44 3C C6 51 06 4D 41 52 4B 45 52 00 B0 12 -CE 4E BA 40 84 12 FC FF BA 40 F4 53 FE FF 9A 42 -C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 -18 4F 42 52 D2 52 E6 52 3A 54 3A 4E 82 4A C8 1D -2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 -18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 -2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D B2 52 09 50 -57 52 5F 53 54 41 54 45 84 12 32 54 98 52 46 64 -1C 51 09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 -7C 54 92 42 0C 18 7E 54 EF 3F 6E 54 08 50 57 52 -5F 48 45 52 45 00 92 42 C8 1D 7C 54 92 42 C6 1D -7E 54 30 4D 82 54 08 52 53 54 5F 48 45 52 45 00 -92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F FE 51 -04 57 49 50 45 00 39 40 10 00 29 83 B9 43 80 FF -FC 23 B2 40 2A 48 28 48 B2 40 58 55 56 55 B2 40 -98 52 0E 18 B2 40 46 64 0C 18 30 12 8C 54 B2 40 -90 48 8E 48 B2 40 54 49 52 49 B2 40 A0 47 9E 47 -B2 40 CC 47 CA 47 B2 40 3C 1D 9E 48 B2 40 18 00 -0A 18 37 40 1A 44 36 40 BC 44 35 40 0E 44 34 40 -00 44 39 40 10 00 29 83 89 43 E0 1D FC 23 B2 40 -0A 00 DC 1D B2 40 20 00 B4 1D 30 41 D0 54 04 57 -41 52 4D 00 30 40 58 55 3D 40 8C 55 92 C3 30 01 -1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 3E E3 -1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 AC 27 3E 90 -16 00 A9 2F 2E 93 78 27 81 2F 30 4D 60 49 06 0D -1B 5B 37 6D 23 00 22 49 E2 46 60 49 1F 46 61 73 -74 46 6F 72 74 68 20 56 33 30 30 20 28 43 29 4A -2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 22 49 34 44 -80 FF F2 46 28 45 D2 46 60 49 0B 62 79 74 65 73 -20 66 72 65 65 20 24 47 98 4D F0 52 04 43 4F 4C -44 00 92 B3 CA 05 FD 23 B2 40 04 A5 20 01 B2 40 -88 5A 5C 01 92 D3 04 02 B2 40 FE FF 02 02 92 C3 -06 02 B2 43 26 02 B2 43 22 02 E2 D3 25 02 F2 43 -22 03 F2 43 26 03 F2 40 A5 00 61 01 82 43 62 01 -82 43 66 01 39 40 10 00 B2 40 33 00 64 01 D2 43 -61 01 92 D2 9E 01 08 18 38 40 59 14 18 83 FE 23 -19 83 FA 23 B2 D2 B0 01 F2 D0 10 00 2A 03 F2 C0 -40 00 A1 04 39 40 00 FC 29 83 89 43 00 1C FC 23 -39 40 34 00 29 83 B9 40 EE 55 CC FF FB 23 B2 40 -30 48 F0 FF B2 40 81 00 C0 05 92 42 02 18 C6 05 -92 42 04 18 C8 05 92 C3 C0 05 92 D3 DA 05 3F 40 -80 1C 31 40 E0 1C 30 12 54 55 40 3F 38 40 C0 1D -39 48 2A 48 09 5A 1A 52 C4 1D 09 9A 03 24 7E 9A -FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D 30 4D B6 54 -09 32 43 4F 4E 53 54 41 4E 54 87 12 80 4F D6 4B -D6 4B 98 4F D6 56 2F 83 9F 4E 02 00 00 00 2E 4E -3D 41 30 4D C0 56 09 32 56 41 52 49 41 42 4C 45 -87 12 80 4F 34 44 04 00 06 47 98 4F 2A 44 1C 15 -B0 12 2A 44 C4 49 1C 4A 32 47 14 57 D8 4A 28 47 -CC 4D 4C 57 16 57 29 4E 39 90 86 12 02 20 2E 53 -15 3C 39 90 85 12 03 20 1E 4E 02 00 0F 3C 39 90 -84 12 0C 20 2E 52 B9 90 D4 56 02 00 04 24 B9 90 -FC 56 02 00 03 20 B0 12 D6 56 4C 57 1B 17 30 41 -32 B0 00 02 01 24 3E 4F 30 41 3E 40 28 00 B0 12 -FE 56 B0 12 50 57 19 42 C6 1D A2 53 C6 1D 89 4E +00 00 F6 3F 3E 4F 30 4D 90 46 85 2B 4C 4F 4F 50 +39 40 64 46 E5 3F 06 50 04 4D 4F 56 45 00 0A 4E +38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C +F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 48 +CA 1D F2 44 2A 44 84 12 7E 50 AE 4F 4A 53 DE 4F +BE 4C 32 4F 3A 50 5E 54 64 48 66 51 80 51 8E 4F +00 52 00 00 30 54 E8 4C 78 4E 00 00 84 12 7E 50 +88 5B 7A 5B 30 59 52 5A F6 58 00 00 6C 5B 00 00 +EC 58 96 5B 4E 59 8C 59 36 57 00 00 00 00 2E 5A +AA 50 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D C6 3F +3A 40 0E 00 39 40 CC 1D 38 40 CA 1D B9 3F 82 43 +CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D 86 50 EE 50 +F4 50 04 51 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 4D 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 50 D0 50 A2 5B CC 4F 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 51 92 42 0C 18 +48 51 EF 3F 38 51 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 1D 46 51 92 42 C6 1D 48 51 30 4D 4C 51 +08 52 53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 +92 42 C6 1D 0C 18 EC 3F BC 4F 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 46 +DE 46 B2 40 0A 52 08 52 B2 40 D0 50 0E 18 B2 40 +A2 5B 0C 18 30 12 56 51 B2 40 86 47 84 47 B2 40 +08 48 06 48 B2 40 98 46 96 46 B2 40 18 00 0A 18 +37 40 1A 44 36 40 92 44 35 40 0E 44 34 40 00 44 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 9A 51 +04 57 41 52 4D 00 30 40 0A 52 3D 40 3E 52 92 C3 +30 01 1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E 48 +06 0D 1B 5B 37 6D 23 00 D6 47 34 46 1E 48 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 47 14 48 30 FF A0 4A +B8 44 24 46 1E 48 0A 62 79 74 65 73 20 66 72 65 +65 00 3C 46 9A 4C 82 4F 04 43 4F 4C 44 00 92 B3 +CA 05 FD 23 B2 40 04 A5 20 01 3E 52 B2 40 88 5A +5C 01 B2 40 FE FF 02 02 B2 D3 06 02 B2 D3 26 02 +B2 40 FF BF 22 02 E2 D3 25 02 F2 43 22 03 F2 D3 +26 03 F2 40 A5 00 61 01 82 43 62 01 82 43 66 01 +39 40 10 00 B2 40 33 00 64 01 D2 43 61 01 92 D2 +9E 01 08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 +B2 D2 B0 01 F2 D0 10 00 2A 03 F2 C0 40 00 A1 04 +39 40 00 08 29 83 89 43 00 1C FC 23 39 40 34 00 +29 83 B9 40 9C 52 CC FF FB 23 B2 40 26 47 F0 FF +B2 40 81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 +C8 05 92 C3 C0 05 92 D3 DA 05 3F 40 80 1C 31 40 +E0 1C 30 12 06 52 49 3F 88 52 07 43 4F 4D 50 41 +52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 +1B 83 07 30 1C 83 07 30 19 53 F9 98 FF FF F5 27 +02 2C 3E 43 30 4D 1E 43 30 4D B2 4D 86 5B 54 48 +45 4E 5D 00 30 4D 7C 53 86 5B 45 4C 53 45 5D 00 +87 12 14 48 00 00 C6 44 42 4B 80 48 24 4B 34 44 +40 46 F2 53 44 44 1E 48 06 5B 54 48 45 4E 5D 00 +52 53 4A 46 C2 53 F8 47 D0 44 58 44 4A 46 98 53 +2A 44 44 44 1E 48 06 5B 45 4C 53 45 5D 00 52 53 +4A 46 E0 53 F8 47 D0 44 58 44 4A 46 96 53 2A 44 +1E 48 04 5B 49 46 5D 00 52 53 4A 46 98 53 3C 46 +96 53 F8 47 1E 48 05 0D 0A 6B 6F 20 D6 47 8C 47 +32 4B 3C 46 98 53 88 53 84 5B 49 46 5D 00 0E 93 +3E 4F BE 27 30 4D 08 54 89 5B 44 45 46 49 4E 45 +44 5D 87 12 42 4B 80 48 EE 48 6A 44 2A 44 18 54 +8B 5B 55 4E 44 45 46 49 4E 45 44 5D 87 12 42 4B +80 48 EE 48 6A 44 00 45 2A 44 4C 54 3D 41 B2 4E +0E 18 A2 4E 0C 18 3E 4F 30 40 56 51 48 50 06 4D +41 52 4B 45 52 00 B0 12 B8 4D BA 40 84 12 FC FF +BA 40 4A 54 FE FF 9A 42 C8 1D 00 00 28 83 8A 48 +02 00 A2 52 C6 1D 30 40 00 4E 1C 15 B0 12 2A 44 +80 48 EE 48 4A 46 A0 54 AA 49 40 46 CE 4C BA 54 +A2 54 39 4E 39 80 86 12 08 24 19 53 02 20 2E 4E +04 3C 2E 53 19 53 01 24 2E 82 1B 17 30 41 3E 40 +28 00 B0 12 8A 54 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D 92 53 C4 1D -B0 12 2A 44 C4 49 D8 4A 28 47 98 57 8E 57 21 53 -3E 90 10 00 87 2D DA 2B 9A 57 B2 41 C4 1D D6 3F -87 12 B0 45 9C 56 A8 57 0C 43 1B 42 C6 1D A2 53 -C6 1D 6A 4E 3E 4F 7A 90 23 00 2F 20 92 53 C4 1D -B0 12 FE 56 B0 12 50 57 0E 93 03 20 3C 40 00 03 -21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 -3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C -3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 -30 03 08 3C 3C 40 30 00 19 42 C6 1D A2 53 C6 1D -89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 09 20 -3C 40 10 02 92 53 C4 1D B0 12 FE 56 B0 12 50 57 -EB 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 C4 1D -B0 12 76 57 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 -76 57 92 92 C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 -0C 5E D8 3F B0 12 76 57 FA 23 3C 50 10 00 B0 12 -5A 57 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 -B0 45 9C 56 86 58 FE 90 26 00 00 00 3E 40 20 00 -03 20 3C 50 82 00 C6 3F B0 12 76 57 E1 23 3C 50 -80 00 B0 12 5A 57 DC 3F 20 48 04 52 45 54 49 00 -87 12 34 44 00 13 D6 4B 2A 44 34 44 2C 00 A0 57 -7E 58 C4 58 2E 4E 0E DC 09 4B A2 3F 4C 50 03 4D -4F 56 84 12 BA 58 00 40 CE 58 05 4D 4F 56 2E 42 -84 12 BA 58 40 40 00 00 03 41 44 44 84 12 BA 58 -00 50 E8 58 05 41 44 44 2E 42 84 12 BA 58 40 50 -F4 58 04 41 44 44 43 00 84 12 BA 58 00 60 02 59 -06 41 44 44 43 2E 42 00 84 12 BA 58 40 60 AA 58 -04 53 55 42 43 00 84 12 BA 58 00 70 20 59 06 53 -55 42 43 2E 42 00 84 12 BA 58 40 70 2E 59 03 53 -55 42 84 12 BA 58 00 80 3E 59 05 53 55 42 2E 42 -84 12 BA 58 40 80 2E 50 03 43 4D 50 84 12 BA 58 -00 90 58 59 05 43 4D 50 2E 42 84 12 BA 58 40 90 -1C 50 04 44 41 44 44 00 84 12 BA 58 00 A0 72 59 -06 44 41 44 44 2E 42 00 84 12 BA 58 40 A0 64 59 -03 42 49 54 84 12 BA 58 00 B0 90 59 05 42 49 54 -2E 42 84 12 BA 58 40 B0 9C 59 03 42 49 43 84 12 -BA 58 00 C0 AA 59 05 42 49 43 2E 42 84 12 BA 58 -40 C0 B6 59 03 42 49 53 84 12 BA 58 00 D0 C4 59 -05 42 49 53 2E 42 84 12 BA 58 40 D0 00 00 03 58 -4F 52 84 12 BA 58 00 E0 DE 59 05 58 4F 52 2E 42 -84 12 BA 58 40 E0 10 59 03 41 4E 44 84 12 BA 58 -00 F0 F8 59 05 41 4E 44 2E 42 84 12 BA 58 40 F0 -B0 45 A0 57 16 5A 0A 4C 3C F0 70 00 8A 10 3A F0 -0F 00 0C DA 4F 3F 4A 59 03 52 52 43 84 12 10 5A -00 10 28 5A 05 52 52 43 2E 42 84 12 10 5A 40 10 -34 5A 04 53 57 50 42 00 84 12 10 5A 80 10 42 5A -03 52 52 41 84 12 10 5A 00 11 50 5A 05 52 52 41 -2E 42 84 12 10 5A 40 11 5C 5A 03 53 58 54 84 12 -10 5A 80 11 00 00 04 50 55 53 48 00 84 12 10 5A -00 12 76 5A 06 50 55 53 48 2E 42 00 84 12 10 5A -40 12 D0 59 04 43 41 4C 4C 00 84 12 10 5A 80 12 -1A 53 0E 4A 87 12 E2 46 60 49 0D 6F 75 74 20 6F -66 20 62 6F 75 6E 64 73 48 4D B0 45 9C 56 C0 5A -92 53 C4 1D 3E 40 2C 00 B0 12 2A 44 C4 49 D8 4A -28 47 CC 4D 74 58 D8 5A 0A 4E 3E 4F 1A 83 E0 33 -29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A -38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 -5A 06 8F 3F 6A 5A 06 52 52 43 4D 2E 41 00 84 12 -BA 5A 40 00 06 5B 04 52 52 43 4D 00 84 12 BA 5A -50 00 16 5B 06 52 52 41 4D 2E 41 00 84 12 BA 5A -40 01 24 5B 04 52 52 41 4D 00 84 12 BA 5A 50 01 -34 5B 06 52 4C 41 4D 2E 41 00 84 12 BA 5A 40 02 -42 5B 04 52 4C 41 4D 00 84 12 BA 5A 50 02 52 5B -06 52 52 55 4D 2E 41 00 84 12 BA 5A 40 03 60 5B -04 52 52 55 4D 00 84 12 BA 5A 50 03 84 5A 07 50 -55 53 48 4D 2E 41 84 12 BA 5A 00 14 7E 5B 05 50 -55 53 48 4D 84 12 BA 5A 00 15 8E 5B 06 50 4F 50 -4D 2E 41 00 84 12 BA 5A 00 16 9C 5B 04 50 4F 50 -4D 00 84 12 BA 5A 00 17 85 12 00 3C 70 5B 03 53 -3E 3D 85 12 00 38 BE 5B 02 53 3C 00 85 12 00 34 -AC 5B 03 30 3E 3D 85 12 00 30 D2 5B 02 30 3C 00 -85 12 00 30 00 00 02 55 3C 00 85 12 00 2C E6 5B -03 55 3E 3D 85 12 00 28 DC 5B 03 30 3C 3E 85 12 -00 24 FA 5B 02 30 3D 00 85 12 00 20 00 00 02 49 -46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 0E 4A -30 4D F0 5B 04 54 48 45 4E 00 1A 42 C6 1D 08 4E -3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 31 2F -88 DA 00 00 30 4D 80 59 04 45 4C 53 45 00 1A 42 -C6 1D BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 8F 4A -00 00 E3 3F 24 5C 05 55 4E 54 49 4C 3A 4F 08 4E -3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE -10 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 1D -30 4D 04 5A 05 41 47 41 49 4E 87 12 B8 5B 6C 5C -2A 44 00 00 05 57 48 49 4C 45 87 12 12 5C 78 44 -2A 44 C8 5B 06 52 45 50 45 41 54 00 87 12 B8 5B -6C 5C 2A 5C 2A 44 C8 5C 3D 41 2E 4E 08 4E 3E 4F -2A 48 0A 93 88 43 00 00 CA 23 98 42 C6 1D 00 00 -30 4D 94 5A 03 42 57 31 84 12 C6 5C E0 1D E4 5C -03 42 57 32 84 12 C6 5C E2 1D F0 5C 03 42 57 33 -84 12 C6 5C E4 1D 08 5D 3D 41 1A 42 C6 1D 2E 4E -28 4E 08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 -C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 -84 12 06 5D E6 1D 2C 5D 03 46 57 32 84 12 06 5D -E8 1D 38 5D 03 46 57 33 84 12 06 5D EA 1D 3E 90 -00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 -00 08 30 4D 44 5D 04 47 4F 54 4F 00 87 12 B8 5B -BE 4D CC 4B 2A 44 00 00 05 3F 47 4F 54 4F 87 12 -4E 5D BE 4D CC 4B 2A 44 00 00 03 4A 4D 50 87 12 -BE 4D 9A 5C 2A 44 78 5D 04 3F 4A 4D 50 00 87 12 -4E 5D BE 4D 78 44 6C 5C 2A 44 87 12 B0 45 9C 56 -B2 5D 69 4E 3E 4F 3C 4F 2C 4C 1B 42 C6 1D A2 53 -C6 1D 79 90 52 00 0A 20 B0 12 76 57 5E 0E 5E 0E -0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D 79 90 23 00 -0D 20 3C C0 40 00 92 53 C4 1D A2 53 C6 1D B0 12 -FE 56 BB 4F 02 00 3E F0 0F 00 E8 3F 79 90 26 00 -03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 79 90 40 00 -12 20 92 53 C4 1D B0 12 76 57 D8 23 3C D0 10 00 -3E 40 2B 00 B0 12 76 57 92 92 C0 1D C4 1D CE 27 -92 53 C4 1D CB 3F 3C D0 30 00 A2 53 C6 1D 3E 40 -28 00 B0 12 FE 56 BB 4F 02 00 3E 40 29 00 EA 3F -87 12 B0 45 9C 56 58 5E 3B 4F 2C 4B 69 4E 7E 40 -20 00 79 90 52 00 03 20 B0 12 76 57 B1 3F 3C C0 -F0 00 A2 53 C6 1D 79 90 26 00 09 20 3C D0 60 00 -92 53 C4 1D B0 12 FE 56 BB 4F 02 00 A1 3F 3C D0 -70 00 3E 40 28 00 B0 12 FE 56 BB 4F 02 00 3E 40 -29 00 E2 3F 34 44 2C 00 AA 5D 50 5E 62 44 2A 44 -DA 58 04 4D 4F 56 41 00 84 12 A4 5E C0 00 FC 5C -04 43 4D 50 41 00 84 12 A4 5E D0 00 94 5C 04 41 -44 44 41 00 84 12 A4 5E E0 00 B4 5C 04 53 55 42 -41 00 84 12 A4 5E F0 00 C0 5E 05 43 41 4C 4C 41 -87 12 B0 45 9C 56 F8 5E 1B 42 C6 1D A2 53 C6 1D -6E 4E 3C 40 34 01 7E 90 52 00 0B 20 7E 40 20 00 -B0 12 76 57 5C 0E 0C DE 8B 4C 00 00 3E 4F 3D 41 -30 4D 2C 53 7E 90 40 00 0B 20 92 53 C4 1D 7E 40 -20 00 B0 12 76 57 EE 23 1C 53 3E 40 2B 00 E8 3F -A2 53 C6 1D 7E 90 23 00 09 20 3C 40 3B 01 92 53 -C4 1D B0 12 FE 56 BB 4F 02 00 DC 3F 7E 90 26 00 -02 20 2C 53 F4 3F 7E 40 28 00 1C 83 B0 12 FE 56 -BB 4F 02 00 3E 40 29 00 CB 3F 87 12 B0 45 9C 56 -82 5F 69 4E 3E 4F 3C 40 00 18 79 90 52 00 05 20 -B0 12 76 57 0E 4C 3D 41 30 4D 82 43 EE 1D 79 90 -23 00 0B 20 92 53 C4 1D B0 12 FE 56 2F 53 3E F0 -0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 26 00 F2 27 -79 90 40 00 12 20 92 53 C4 1D B0 12 76 57 E2 23 -3E 40 2B 00 92 53 C4 1D B0 12 76 57 92 92 C0 1D -C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 28 00 B0 12 -FE 56 8F 4E 00 00 3E 40 29 00 B0 12 76 57 3E 4F -3E F0 0F 00 0C DE EA 3F 87 12 B0 45 9C 56 10 60 -3C 4F 69 4E 3E 40 20 00 79 90 52 00 BB 27 82 43 -EE 1D 79 90 26 00 08 20 92 53 C4 1D B0 12 FE 56 -2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 B0 12 FE 56 -F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E 3E 4F 1C D2 -EE 1D 82 43 EE 1D 3C DE 8B 4C 00 00 B2 41 C4 1D -30 4D 34 44 C4 1D F2 44 B0 44 34 44 2C 00 7A 5F -08 60 42 60 24 47 BA 58 B2 5E 04 4D 4F 56 58 00 -84 12 62 60 40 00 00 40 7A 60 06 4D 4F 56 58 2E -41 00 84 12 62 60 00 00 40 40 8A 60 06 4D 4F 56 -58 2E 42 00 84 12 62 60 40 00 40 40 CE 5E 04 41 -44 44 58 00 84 12 62 60 40 00 00 50 AE 60 06 41 -44 44 58 2E 41 00 84 12 62 60 00 00 40 50 BE 60 -06 41 44 44 58 2E 42 00 84 12 62 60 40 00 40 50 -D0 60 05 41 44 44 43 58 84 12 62 60 40 00 00 60 -E2 60 07 41 44 44 43 58 2E 41 84 12 62 60 00 00 -40 60 F2 60 07 41 44 44 43 58 2E 42 84 12 62 60 -40 00 40 60 DC 5E 05 53 55 42 43 58 84 12 62 60 -40 00 00 70 16 61 07 53 55 42 43 58 2E 41 84 12 -62 60 00 00 40 70 26 61 07 53 55 42 43 58 2E 42 -84 12 62 60 40 00 40 70 38 61 04 53 55 42 58 00 -84 12 62 60 40 00 00 80 4A 61 06 53 55 42 58 2E -41 00 84 12 62 60 00 00 40 80 5A 61 06 53 55 42 -58 2E 42 00 84 12 62 60 40 00 40 80 EA 5E 04 43 -4D 50 58 00 84 12 62 60 40 00 00 90 7E 61 06 43 -4D 50 58 2E 41 00 84 12 62 60 00 00 40 90 8E 61 -06 43 4D 50 58 2E 42 00 84 12 62 60 40 00 40 90 -48 5C 05 44 41 44 44 58 84 12 62 60 40 00 00 A0 -B2 61 07 44 41 44 44 58 2E 41 84 12 62 60 00 00 -40 A0 C2 61 07 44 41 44 44 58 2E 42 84 12 62 60 -40 00 40 A0 A0 61 04 42 49 54 58 00 84 12 62 60 -40 00 00 B0 E6 61 06 42 49 54 58 2E 41 00 84 12 -62 60 00 00 40 B0 F6 61 06 42 49 54 58 2E 42 00 -84 12 62 60 40 00 40 B0 08 62 04 42 49 43 58 00 -84 12 62 60 40 00 00 C0 1A 62 06 42 49 43 58 2E -41 00 84 12 62 60 00 00 40 C0 2A 62 06 42 49 43 -58 2E 42 00 84 12 62 60 40 00 40 C0 3C 62 04 42 -49 53 58 00 84 12 62 60 40 00 00 D0 4E 62 06 42 -49 53 58 2E 41 00 84 12 62 60 00 00 40 D0 5E 62 -06 42 49 53 58 2E 42 00 84 12 62 60 40 00 40 D0 -EA 59 04 58 4F 52 58 00 84 12 62 60 40 00 00 E0 -82 62 06 58 4F 52 58 2E 41 00 84 12 62 60 00 00 -40 E0 92 62 06 58 4F 52 58 2E 42 00 84 12 62 60 -40 00 40 E0 04 61 04 41 4E 44 58 00 84 12 62 60 -40 00 00 F0 B6 62 06 41 4E 44 58 2E 41 00 84 12 -62 60 00 00 40 F0 C6 62 06 41 4E 44 58 2E 42 00 -84 12 62 60 40 00 40 F0 34 44 C4 1D F2 44 B0 44 -B0 45 7A 5F 42 60 24 47 10 5A 6C 61 04 52 52 43 -58 00 84 12 E8 62 40 00 00 10 FC 62 06 52 52 43 -58 2E 41 00 84 12 E8 62 00 00 40 10 0C 63 06 52 -52 43 58 2E 42 00 84 12 E8 62 40 00 40 10 1E 63 -04 52 52 55 58 00 84 12 E8 62 40 01 00 10 30 63 -06 52 52 55 58 2E 41 00 84 12 E8 62 00 01 40 10 -40 63 06 52 52 55 58 2E 42 00 84 12 E8 62 40 01 -40 10 52 63 05 53 57 50 42 58 84 12 E8 62 40 00 -80 10 64 63 07 53 57 50 42 58 2E 41 84 12 E8 62 -00 00 80 10 74 63 04 52 52 41 58 00 84 12 E8 62 -40 00 00 11 86 63 06 52 52 41 58 2E 41 00 84 12 -E8 62 00 00 40 11 96 63 06 52 52 41 58 2E 42 00 -84 12 E8 62 40 00 40 11 A8 63 04 53 58 54 58 00 -84 12 E8 62 40 00 80 11 BA 63 06 53 58 54 58 2E -41 00 84 12 E8 62 00 00 80 11 04 5C 05 50 55 53 -48 58 84 12 E8 62 40 00 00 12 DC 63 07 50 55 53 -48 58 2E 41 84 12 E8 62 00 00 40 12 EC 63 07 50 -55 53 48 58 2E 42 84 12 E8 62 40 00 40 12 CA 63 -03 52 50 54 87 12 B0 45 9C 56 1C 64 29 4E 7E 40 -20 00 79 90 52 00 06 20 B0 12 76 57 03 24 3E D0 -80 00 04 3C B0 12 FE 56 3E F0 0F 00 82 4E EE 1D -3E 4F 3D 41 30 4D +B0 12 2A 44 80 48 AA 49 40 46 F8 54 EE 54 21 53 +3E 90 10 00 7D 2D E1 2B FA 54 B2 41 C4 1D DD 3F +87 12 42 4B 74 48 08 55 0C 43 1B 42 C6 1D A2 53 +C6 1D 6A 4E 3E 4F 7A 90 23 00 27 20 92 53 C4 1D +B0 12 8A 54 3C 40 00 03 0E 93 1C 24 3C 40 10 03 +1E 93 18 24 3C 40 20 03 2E 93 14 24 3C 40 20 02 +2E 92 10 24 3C 40 30 02 3E 92 0C 24 3C 40 30 03 +3E 93 08 24 3C 40 30 00 19 42 C6 1D A2 53 C6 1D +89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 07 20 +3C 40 10 02 92 53 C4 1D B0 12 8A 54 ED 3F 7A 90 +40 00 16 20 3C 40 20 00 92 53 C4 1D B0 12 D6 54 +0C 20 3C 50 10 00 3E 40 2B 00 B0 12 D6 54 92 92 +C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 0C 5E DA 3F +B0 12 D6 54 FA 23 3C 50 10 00 B0 12 BE 54 EF 3F +0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 42 4B 74 48 +D2 55 FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 +82 00 C8 3F B0 12 D6 54 E1 23 3C 50 80 00 B0 12 +BE 54 DC 3F D6 46 04 52 45 54 49 00 87 12 14 48 +00 13 B0 4A 2A 44 14 48 2C 00 00 55 CA 55 10 56 +09 4B 2E 4E 0E DC A4 3F FC 4E 03 4D 4F 56 84 12 +06 56 00 40 1A 56 05 4D 4F 56 2E 42 84 12 06 56 +40 40 00 00 03 41 44 44 84 12 06 56 00 50 34 56 +05 41 44 44 2E 42 84 12 06 56 40 50 40 56 04 41 +44 44 43 00 84 12 06 56 00 60 4E 56 06 41 44 44 +43 2E 42 00 84 12 06 56 40 60 F6 55 04 53 55 42 +43 00 84 12 06 56 00 70 6C 56 06 53 55 42 43 2E +42 00 84 12 06 56 40 70 7A 56 03 53 55 42 84 12 +06 56 00 80 8A 56 05 53 55 42 2E 42 84 12 06 56 +40 80 DE 4E 03 43 4D 50 84 12 06 56 00 90 A4 56 +05 43 4D 50 2E 42 84 12 06 56 40 90 CC 4E 04 44 +41 44 44 00 84 12 06 56 00 A0 BE 56 06 44 41 44 +44 2E 42 00 84 12 06 56 40 A0 B0 56 03 42 49 54 +84 12 06 56 00 B0 DC 56 05 42 49 54 2E 42 84 12 +06 56 40 B0 E8 56 03 42 49 43 84 12 06 56 00 C0 +F6 56 05 42 49 43 2E 42 84 12 06 56 40 C0 02 57 +03 42 49 53 84 12 06 56 00 D0 10 57 05 42 49 53 +2E 42 84 12 06 56 40 D0 00 00 03 58 4F 52 84 12 +06 56 00 E0 2A 57 05 58 4F 52 2E 42 84 12 06 56 +40 E0 5C 56 03 41 4E 44 84 12 06 56 00 F0 44 57 +05 41 4E 44 2E 42 84 12 06 56 40 F0 42 4B 00 55 +62 57 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA +4F 3F 96 56 03 52 52 43 84 12 5C 57 00 10 74 57 +05 52 52 43 2E 42 84 12 5C 57 40 10 80 57 04 53 +57 50 42 00 84 12 5C 57 80 10 8E 57 03 52 52 41 +84 12 5C 57 00 11 9C 57 05 52 52 41 2E 42 84 12 +5C 57 40 11 A8 57 03 53 58 54 84 12 5C 57 80 11 +00 00 04 50 55 53 48 00 84 12 5C 57 00 12 C2 57 +06 50 55 53 48 2E 42 00 84 12 5C 57 40 12 1C 57 +04 43 41 4C 4C 00 84 12 5C 57 80 12 1A 53 0E 4A +87 12 34 46 1E 48 0D 6F 75 74 20 6F 66 20 62 6F +75 6E 64 73 4C 4C 42 4B 74 48 0C 58 92 53 C4 1D +3E 40 2C 00 B0 12 2A 44 80 48 AA 49 40 46 CE 4C +C0 55 24 58 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E +0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 +D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F +B6 57 04 52 52 43 4D 00 84 12 06 58 50 00 52 58 +04 52 52 41 4D 00 84 12 06 58 50 01 60 58 04 52 +4C 41 4D 00 84 12 06 58 50 02 6E 58 04 52 52 55 +4D 00 84 12 06 58 50 03 D0 57 05 50 55 53 48 4D +84 12 06 58 00 15 8A 58 04 50 4F 50 4D 00 84 12 +06 58 00 17 7C 58 03 53 3E 3D 85 12 00 38 A6 58 +02 53 3C 00 85 12 00 34 98 58 03 30 3E 3D 85 12 +00 30 BA 58 02 30 3C 00 85 12 00 30 00 00 02 55 +3C 00 85 12 00 2C CE 58 03 55 3E 3D 85 12 00 28 +C4 58 03 30 3C 3E 85 12 00 24 E2 58 02 30 3D 00 +85 12 00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E +00 00 A2 53 C6 1D 0E 4A 30 4D D8 58 04 54 48 45 +4E 00 1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 +0A 11 3A 90 00 02 63 2F 88 DA 00 00 30 4D CC 56 +04 45 4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 +A2 53 C6 1D 2F 83 8F 4A 00 00 E3 3F 0C 59 05 55 +4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 +0A 89 0A 11 3A 90 00 FE 42 3B 3A F0 FF 03 08 DA +89 48 00 00 A2 53 C6 1D 30 4D 50 57 05 41 47 41 +49 4E 0A 4E 38 40 00 3C E7 3F 00 00 05 57 48 49 +4C 45 87 12 FA 58 76 44 2A 44 B0 58 06 52 45 50 +45 41 54 00 87 12 82 59 12 59 2A 44 AE 59 3D 41 +08 4E 3E 4F 2A 48 B2 92 C4 1D CD 2F 98 42 C6 1D +00 00 30 4D E0 57 03 42 57 31 84 12 AC 59 00 00 +C6 59 03 42 57 32 84 12 AC 59 00 00 D2 59 03 42 +57 33 84 12 AC 59 00 00 EA 59 3D 41 1A 42 C6 1D +28 4E B2 92 C4 1D 90 2B BA 4F 00 00 A2 53 C6 1D +8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 +E8 59 00 00 0A 5A 03 46 57 32 84 12 E8 59 00 00 +16 5A 03 46 57 33 84 12 E8 59 00 00 00 00 05 3F +47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 3E B0 +00 10 02 24 3E E0 00 08 87 12 C0 4C DA 4A 2A 44 +22 5A 04 47 4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 +00 3C F2 3F 87 12 42 4B 74 48 6C 5A 69 4E 3E 4F +3C 4F 2C 4C 1B 42 C6 1D A2 53 C6 1D 79 90 52 00 +0A 20 B0 12 D6 54 5E 0E 5E 0E 0E DC 8B 4E 00 00 +0E 4B 3D 41 30 4D 79 90 23 00 0D 20 3C C0 40 00 +92 53 C4 1D A2 53 C6 1D B0 12 8A 54 BB 4F 02 00 +3E F0 0F 00 E8 3F 79 90 26 00 03 20 3C E0 E0 00 +EF 3F 3C C0 F0 00 79 90 40 00 12 20 92 53 C4 1D +B0 12 D6 54 D8 23 3C D0 10 00 3E 40 2B 00 B0 12 +D6 54 92 92 C0 1D C4 1D CE 27 92 53 C4 1D CB 3F +3C D0 30 00 A2 53 C6 1D 3E 40 28 00 B0 12 8A 54 +BB 4F 02 00 3E 40 29 00 EA 3F 87 12 42 4B 74 48 +12 5B 3B 4F 2C 4B 69 4E 7E 40 20 00 79 90 52 00 +03 20 B0 12 D6 54 B1 3F 3C C0 F0 00 A2 53 C6 1D +79 90 26 00 09 20 3C D0 60 00 92 53 C4 1D B0 12 +8A 54 BB 4F 02 00 A1 3F 3C D0 70 00 3E 40 28 00 +B0 12 8A 54 BB 4F 02 00 3E 40 29 00 E2 3F 14 48 +2C 00 64 5A 0A 5B 66 44 2A 44 26 56 04 4D 4F 56 +41 00 84 12 5E 5B C0 00 DE 59 04 43 4D 50 41 00 +84 12 5E 5B D0 00 7C 59 04 41 44 44 41 00 84 12 +5E 5B E0 00 9C 59 04 53 55 42 41 00 84 12 5E 5B +F0 00 @FFFE -EE 55 +9C 52 q diff --git a/binaries/MSP_EXP430FR5969_4MHz.txt b/binaries/MSP_EXP430FR5969_4MHz.txt deleted file mode 100644 index 9bd3cd0..0000000 --- a/binaries/MSP_EXP430FR5969_4MHz.txt +++ /dev/null @@ -1,524 +0,0 @@ -@1800 -10 00 02 00 21 BB A0 0F 05 00 18 00 48 64 98 52 -2C 01 7F B0 00 48 12 48 -@4400 -2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 -8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 44 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 44 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 44 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 44 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 44 02 3E 52 00 -0E 12 3E 4F 30 4D 96 44 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 44 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 44 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 44 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 45 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 44 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 45 02 31 2D 00 -1E 83 30 4D D8 44 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 45 -02 30 3D 00 1E 83 0E 7E 30 4D 60 45 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 45 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 44 01 3E 3E 8F F4 3B EB 37 0E 45 02 42 4C 00 -85 12 20 00 AC 45 04 42 41 53 45 00 85 12 DC 1D -C8 44 05 53 54 41 54 45 85 12 BE 1D 96 45 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 45 06 55 4D 2F -4D 4F 44 00 30 12 62 44 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 44 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 45 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 45 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 46 -02 23 53 00 87 12 32 46 6A 46 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 46 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 45 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 45 -02 44 2E 00 87 12 D2 45 44 44 B0 44 4C 45 64 46 -BC 44 A2 46 7E 46 22 49 EA 48 2A 44 DC 45 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 44 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 46 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 44 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 46 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 46 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 46 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 45 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 47 03 4B 45 59 30 40 A0 47 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 00 48 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 12 48 30 4D 00 47 -06 41 43 43 45 50 54 00 30 40 CC 47 3C 40 6E 48 -3B 40 38 48 2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 -3C 40 20 00 3D 40 62 48 92 B3 DC 05 05 24 18 42 -CC 05 38 90 0A 00 04 20 21 53 39 40 26 48 4D 15 -A2 B3 DC 05 FD 27 B2 40 11 00 CE 05 E2 C3 23 02 -30 41 B2 40 13 00 CE 05 E2 D3 23 02 30 41 00 00 -05 53 4C 45 45 50 30 40 2A 48 12 D2 0A 18 FB 3F -21 52 3A 17 58 42 CC 05 48 9C 08 2C 48 9B E9 27 -78 92 11 20 2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 -CE 48 00 00 1E 53 A2 B3 DC 05 FD 27 82 48 CE 05 -30 4D 64 48 2D 83 92 B3 DC 05 E4 23 FC 27 82 93 -DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 -0A 18 30 4D B0 46 04 45 4D 49 54 00 30 40 90 48 -08 4E 3E 4F E0 3F 10 47 03 43 49 42 85 12 3C 1D -3F 80 06 00 8F 4E 04 00 3E 40 54 00 9F 42 9E 48 -00 00 AF 4F 02 00 88 3F 86 48 04 45 43 48 4F 00 -B2 40 82 48 5C 48 82 43 DE 1D 30 4D E0 46 06 4E -4F 45 43 48 4F 00 B2 40 30 4D 5C 48 92 43 DE 1D -30 4D 9C 46 05 53 50 41 43 45 2F 83 8F 4E 00 00 -3E 40 20 00 CB 3F E4 48 06 53 50 41 43 45 53 00 -0E 93 09 24 0D 12 3D 40 0C 49 EF 3F 0E 49 2D 83 -1E 83 EB 23 3D 41 3E 4F 30 4D 66 47 04 54 59 50 -45 00 0E 93 0F 24 1E 15 3D 40 38 49 28 4F 7E 48 -8F 48 00 00 2F 83 AA 3F 3A 49 2D 83 91 83 02 00 -F5 23 1D 17 2F 53 3E 4F 30 4D 98 48 02 43 52 00 -30 40 54 49 87 12 60 49 02 0D 0A 00 22 49 2A 44 -2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 -0D 63 30 4D F8 48 82 53 22 00 82 43 B4 1D 87 12 -34 44 60 49 D6 4B 34 44 22 00 C4 49 8E 49 3D 41 -B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D 3E 4F -92 B3 C6 1D A2 63 C6 1D 30 4D CE 48 82 2E 22 00 -87 12 7A 49 34 44 22 49 D6 4B 2A 44 00 00 04 57 -4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A 3A 5C -28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 60 00 -C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 -4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F -1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E CE 48 -00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 0C 4E -65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 1E 24 -58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E FE FF -0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C -FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 -0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C 00 00 -35 40 0E 44 34 40 00 44 30 4D A2 45 07 3E 4E 55 -4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D -6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 -7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 -82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 -09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 8F 48 -02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 2D 15 -3D 40 1E 4B 09 43 08 43 3F 82 8F 4E 06 00 0C 4E -7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 02 00 -E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 04 24 -3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F 20 4B -2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 7A 90 -F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 8F 49 -02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 79 90 -0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 09 9B -08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 45 2A 17 -E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A 4E 93 -2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 3F 50 -06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 BF 4F -00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 00 00 -9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 2F 53 -30 4D BA 48 07 45 58 45 43 55 54 45 0A 4E 3E 4F -00 4A 26 45 01 2C 1A 42 C6 1D A2 53 C6 1D 8A 4E -00 00 3E 4F 30 4D D4 4B 87 4C 49 54 45 52 41 4C -82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 -34 44 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 -00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 EB 3F -30 4D 4C 49 05 43 4F 55 4E 54 2F 83 1E 53 8F 4E -00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F C2 1D -3E 4F 82 43 C4 1D 30 4D 87 12 38 4C B0 45 C4 49 -52 4C 3D 40 5A 4C E2 22 5D 3E 5C 4C 0A 4E 3E 4F -3D 40 72 4C 39 27 3D 40 4C 4C 1A E2 BE 1D B3 27 -AD 23 74 4C 3E 4F 3D 40 4C 4C BA 23 DE 53 00 00 -68 4E 08 5E F8 40 3F 00 00 00 3D 40 3E 4F CD 3F -C4 4B 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D -3C 49 3B 49 3A 49 3D 15 B0 12 2A 44 48 4C B0 4C -B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D -6C 45 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C -B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 50 49 -A0 48 EA 48 48 4C DE 44 70 45 60 49 0C 73 74 61 -63 6B 20 65 6D 70 74 79 21 00 3C 4D 34 44 30 FF -F2 46 8A 45 60 49 0A 46 52 41 4D 20 66 75 6C 6C -21 00 3C 4D 24 47 DE 4C C0 47 05 41 42 4F 52 54 -3F 40 80 1C D1 3F 1A 4D 86 41 42 4F 52 54 22 00 -87 12 7A 49 34 44 3C 4D D6 4B 2A 44 8F 93 02 00 -03 20 2F 52 3E 4F 30 4D B0 12 FE 54 B0 12 00 48 -92 C3 DC 05 38 40 A8 2A 39 42 09 59 03 43 19 83 -FD 23 18 83 F9 23 92 B3 DC 05 F2 23 87 12 78 54 -34 44 DE 1D F2 44 C0 48 60 49 04 1B 5B 37 6D 00 -22 49 54 44 28 47 98 4D 50 49 60 49 05 6C 69 6E -65 3A 22 49 40 45 D2 46 22 49 60 49 04 1B 5B 30 -6D 00 22 49 20 4D 00 00 83 5B 27 5D 87 12 BE 4D -34 44 34 44 D6 4B D6 4B 2A 44 16 4A 01 27 87 12 -B0 45 C4 49 1C 4A 28 47 CC 4D 2A 44 7C 4C CE 45 -81 5C 92 42 C0 1D C4 1D 30 4D A8 4D 81 5B 82 43 -BE 1D 30 4D D0 4D 01 5D B2 43 BE 1D 30 4D BE 4F -02 00 3E 4F 30 4D 72 47 82 49 53 00 87 12 C8 45 -F2 44 28 47 10 4E AC 4D 34 44 EE 4D D6 4B 2A 44 -BE 4D EE 4D 2A 44 F8 4D 09 49 4D 4D 45 44 49 41 -54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D 76 49 -87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D -00 00 A2 53 C6 1D 30 4D C2 4C 88 50 4F 53 54 50 -4F 4E 45 00 87 12 B0 45 C4 49 1C 4A 54 44 28 47 -CC 4D 70 45 28 47 74 4E 34 44 34 44 D6 4B D6 4B -34 44 D6 4B D6 4B 2A 44 DC 4D 81 3B 82 93 BE 1D -A8 27 87 12 34 44 2A 44 D6 4B 12 4F DE 4D 2A 44 -7A 4E 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 -1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 -FE 4E BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D -82 4F BC 1D 30 4D 92 4E 01 3A 30 12 B2 4E 87 12 -A0 49 B0 45 C4 49 D8 4E 3D 41 08 4E 7A 4E 5A D3 -5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E -3E 4F BA 40 30 40 00 00 BA 40 C4 4E 02 00 82 48 -B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D -30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D -A8 49 FE FF 89 48 00 00 30 4D 87 12 60 49 0F 73 -74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 48 4D -BE 49 08 56 41 52 49 41 42 4C 45 00 B0 12 CE 4E -BA 40 86 12 FC FF E4 3F 24 4C 08 43 4F 4E 53 54 -41 4E 54 00 B0 12 CE 4E BA 40 85 12 FC FF 8A 4E -FE FF 3E 4F D5 3F 5A 4F 06 43 52 45 41 54 45 00 -B0 12 CE 4E BA 40 85 12 FC FF 8A 4A FE FF C8 3F -92 4C 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 -00 00 8A 4D 02 00 3D 41 30 4D 92 4F 05 44 45 46 -45 52 30 12 20 4F 8B 3F 7C 4A 05 3E 42 4F 44 59 -2E 52 30 4D 78 4F 04 43 4F 44 45 00 B0 12 CE 4E -2A 82 82 4A C6 1D 87 12 C0 4E A2 52 74 52 2A 44 -C6 4F 07 43 4F 44 45 4E 4E 4D 87 12 9A 4E DE 4D -D0 4F 2A 44 00 00 07 45 4E 44 43 4F 44 45 87 12 -BC 52 12 4F 2A 44 28 4D 03 41 53 4D 92 42 DA 1D -EC 1D B2 40 78 52 DA 1D D9 3F F6 4F 06 45 4E 44 -41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 -4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 -C6 1D B2 43 BE 1D 30 40 BC 52 00 00 05 4C 4F 32 -48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 44 -02 00 A2 52 C6 1D ED 3F 18 4E 85 48 49 32 4C 4F -87 12 F2 46 9A 50 D6 4B DE 4D A2 52 74 52 2A 44 -6A 50 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D -A2 52 C6 1D BE 40 28 47 00 00 2E 53 30 4D AC 4F -84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 -24 47 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 1C 49 -84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D -E2 4F 85 42 45 47 49 4E 30 40 F2 46 C0 50 85 55 -4E 54 49 4C 39 40 28 47 A2 52 C6 1D 1A 42 C6 1D -8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D 08 50 85 41 -47 41 49 4E 39 40 24 47 EF 3F 42 4F 85 57 48 49 -4C 45 87 12 86 50 78 44 2A 44 30 4E 86 52 45 50 -45 41 54 00 87 12 04 51 C6 50 2A 44 A0 50 82 44 -4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D -BE 40 3C 47 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 -00 00 30 4D E8 4B 84 4C 4F 4F 50 00 39 40 5E 47 -A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF -1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A -00 00 F6 3F 3E 4F 30 4D 98 47 85 2B 4C 4F 4F 50 -39 40 4C 47 E5 3F 56 51 85 4C 45 41 56 45 1A 42 -C6 1D BA 40 6E 47 00 00 BA 40 24 47 02 00 B2 50 -06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A -00 00 30 4D 98 51 04 4D 4F 56 45 00 0A 4E 38 4F -39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 -00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 -18 83 E8 49 00 00 1A 83 FA 23 30 4D 0C 51 0A 56 -4F 43 41 42 55 4C 41 52 59 00 87 12 80 4F 34 44 -10 00 34 44 00 00 3C 47 34 44 00 00 D6 4B 5E 47 -18 52 F2 46 34 44 C8 1D 44 44 F2 44 D6 4B FA 44 -98 4F 34 44 CA 1D FA 44 2A 44 BC 4D 05 46 4F 52 -54 48 84 12 32 52 9C 52 DC 55 DA 52 3C 52 82 50 -8A 51 06 54 CC 52 9C 54 E8 56 DE 50 4E 55 00 00 -DA 53 E6 4D BA 4F 00 00 FE 50 09 41 53 53 45 4D -42 4C 45 52 84 12 32 52 DA 62 72 62 D6 61 68 5D -10 5C 8C 5D 9E 60 00 00 00 64 12 64 68 5C A6 5C -A6 62 00 00 00 00 9A 5D 66 52 6A 52 04 41 4C 53 -4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F -4A 4E 08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 -39 40 CC 1D 38 40 CA 1D 8A 3F AC 49 04 4F 4E 4C -59 00 82 43 CC 1D 30 4D 2E 51 0B 44 45 46 49 4E -49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D D2 50 -07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F -0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 -F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D -C8 4E 86 5B 54 48 45 4E 5D 00 30 4D 22 53 86 5B -45 4C 53 45 5D 00 87 12 34 44 00 00 36 45 B0 45 -C4 49 2A 4C 44 44 28 47 9C 53 8A 44 8A 44 60 49 -06 5B 54 48 45 4E 5D 00 F8 52 32 47 6A 53 44 49 -40 45 54 44 32 47 3E 53 2A 44 8A 44 8A 44 60 49 -06 5B 45 4C 53 45 5D 00 F8 52 32 47 8A 53 44 49 -40 45 54 44 32 47 3C 53 2A 44 60 49 04 5B 49 46 -5D 00 F8 52 32 47 3E 53 24 47 3C 53 44 49 60 49 -05 0D 0A 6B 6F 20 22 49 A0 48 38 4C 24 47 3E 53 -2E 53 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D -B2 53 89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 45 -C4 49 1C 4A 6C 44 2A 44 C2 53 8B 5B 55 4E 44 45 -46 49 4E 45 44 5D 87 12 B0 45 C4 49 1C 4A 6C 44 -64 45 2A 44 F6 53 3D 41 B2 4E 0E 18 A2 4E 0C 18 -3E 4F 44 3C C6 51 06 4D 41 52 4B 45 52 00 B0 12 -CE 4E BA 40 84 12 FC FF BA 40 F4 53 FE FF 9A 42 -C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 -18 4F 42 52 D2 52 E6 52 3A 54 3A 4E 82 4A C8 1D -2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 -18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 -2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D B2 52 09 50 -57 52 5F 53 54 41 54 45 84 12 32 54 98 52 48 64 -1C 51 09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 -7C 54 92 42 0C 18 7E 54 EF 3F 6E 54 08 50 57 52 -5F 48 45 52 45 00 92 42 C8 1D 7C 54 92 42 C6 1D -7E 54 30 4D 82 54 08 52 53 54 5F 48 45 52 45 00 -92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F FE 51 -04 57 49 50 45 00 39 40 10 00 29 83 B9 43 80 FF -FC 23 B2 40 2A 48 28 48 B2 40 58 55 56 55 B2 40 -98 52 0E 18 B2 40 48 64 0C 18 30 12 8C 54 B2 40 -90 48 8E 48 B2 40 54 49 52 49 B2 40 A0 47 9E 47 -B2 40 CC 47 CA 47 B2 40 3C 1D 9E 48 B2 40 18 00 -0A 18 37 40 1A 44 36 40 BC 44 35 40 0E 44 34 40 -00 44 39 40 10 00 29 83 89 43 E0 1D FC 23 B2 40 -0A 00 DC 1D B2 40 20 00 B4 1D 30 41 D0 54 04 57 -41 52 4D 00 30 40 58 55 3D 40 8C 55 92 C3 30 01 -1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 3E E3 -1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 AC 27 3E 90 -16 00 A9 2F 2E 93 78 27 81 2F 30 4D 60 49 06 0D -1B 5B 37 6D 23 00 22 49 E2 46 60 49 1F 46 61 73 -74 46 6F 72 74 68 20 56 33 30 30 20 28 43 29 4A -2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 22 49 34 44 -80 FF F2 46 28 45 D2 46 60 49 0B 62 79 74 65 73 -20 66 72 65 65 20 24 47 98 4D F0 52 04 43 4F 4C -44 00 92 B3 CA 05 FD 23 B2 40 04 A5 20 01 B2 40 -88 5A 5C 01 92 D3 04 02 B2 40 FE FF 02 02 92 C3 -06 02 B2 43 26 02 B2 43 22 02 E2 D3 25 02 F2 43 -22 03 F2 43 26 03 F2 40 A5 00 61 01 B2 40 06 00 -62 01 82 43 66 01 39 40 40 00 B2 40 33 00 64 01 -D2 43 61 01 92 D2 9E 01 08 18 38 40 59 14 18 83 -FE 23 19 83 FA 23 B2 D2 B0 01 F2 D0 10 00 2A 03 -F2 C0 40 00 A1 04 39 40 00 FC 29 83 89 43 00 1C -FC 23 39 40 34 00 29 83 B9 40 EE 55 CC FF FB 23 -B2 40 30 48 F0 FF B2 40 81 00 C0 05 92 42 02 18 -C6 05 92 42 04 18 C8 05 92 C3 C0 05 92 D3 DA 05 -3F 40 80 1C 31 40 E0 1C 30 12 54 55 3F 3F 38 40 -C0 1D 39 48 2A 48 09 5A 1A 52 C4 1D 09 9A 03 24 -7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D 30 4D -B6 54 09 32 43 4F 4E 53 54 41 4E 54 87 12 80 4F -D6 4B D6 4B 98 4F D8 56 2F 83 9F 4E 02 00 00 00 -2E 4E 3D 41 30 4D C2 56 09 32 56 41 52 49 41 42 -4C 45 87 12 80 4F 34 44 04 00 06 47 98 4F 2A 44 -1C 15 B0 12 2A 44 C4 49 1C 4A 32 47 16 57 D8 4A -28 47 CC 4D 4E 57 18 57 29 4E 39 90 86 12 02 20 -2E 53 15 3C 39 90 85 12 03 20 1E 4E 02 00 0F 3C -39 90 84 12 0C 20 2E 52 B9 90 D6 56 02 00 04 24 -B9 90 FE 56 02 00 03 20 B0 12 D8 56 4E 57 1B 17 -30 41 32 B0 00 02 01 24 3E 4F 30 41 3E 40 28 00 -B0 12 00 57 B0 12 52 57 19 42 C6 1D A2 53 C6 1D -89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D 92 53 -C4 1D B0 12 2A 44 C4 49 D8 4A 28 47 9A 57 90 57 -21 53 3E 90 10 00 87 2D DA 2B 9C 57 B2 41 C4 1D -D6 3F 87 12 B0 45 9E 56 AA 57 0C 43 1B 42 C6 1D -A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 2F 20 92 53 -C4 1D B0 12 00 57 B0 12 52 57 0E 93 03 20 3C 40 -00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 -03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 -12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 -3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 1D A2 53 -C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 -09 20 3C 40 10 02 92 53 C4 1D B0 12 00 57 B0 12 -52 57 EB 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 -C4 1D B0 12 78 57 0C 20 3C 50 10 00 3E 40 2B 00 -B0 12 78 57 92 92 C0 1D C4 1D 02 24 92 53 C4 1D -8E 10 0C 5E D8 3F B0 12 78 57 FA 23 3C 50 10 00 -B0 12 5C 57 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D -87 12 B0 45 9E 56 88 58 FE 90 26 00 00 00 3E 40 -20 00 03 20 3C 50 82 00 C6 3F B0 12 78 57 E1 23 -3C 50 80 00 B0 12 5C 57 DC 3F 20 48 04 52 45 54 -49 00 87 12 34 44 00 13 D6 4B 2A 44 34 44 2C 00 -A2 57 80 58 C6 58 2E 4E 0E DC 09 4B A2 3F 4C 50 -03 4D 4F 56 84 12 BC 58 00 40 D0 58 05 4D 4F 56 -2E 42 84 12 BC 58 40 40 00 00 03 41 44 44 84 12 -BC 58 00 50 EA 58 05 41 44 44 2E 42 84 12 BC 58 -40 50 F6 58 04 41 44 44 43 00 84 12 BC 58 00 60 -04 59 06 41 44 44 43 2E 42 00 84 12 BC 58 40 60 -AC 58 04 53 55 42 43 00 84 12 BC 58 00 70 22 59 -06 53 55 42 43 2E 42 00 84 12 BC 58 40 70 30 59 -03 53 55 42 84 12 BC 58 00 80 40 59 05 53 55 42 -2E 42 84 12 BC 58 40 80 2E 50 03 43 4D 50 84 12 -BC 58 00 90 5A 59 05 43 4D 50 2E 42 84 12 BC 58 -40 90 1C 50 04 44 41 44 44 00 84 12 BC 58 00 A0 -74 59 06 44 41 44 44 2E 42 00 84 12 BC 58 40 A0 -66 59 03 42 49 54 84 12 BC 58 00 B0 92 59 05 42 -49 54 2E 42 84 12 BC 58 40 B0 9E 59 03 42 49 43 -84 12 BC 58 00 C0 AC 59 05 42 49 43 2E 42 84 12 -BC 58 40 C0 B8 59 03 42 49 53 84 12 BC 58 00 D0 -C6 59 05 42 49 53 2E 42 84 12 BC 58 40 D0 00 00 -03 58 4F 52 84 12 BC 58 00 E0 E0 59 05 58 4F 52 -2E 42 84 12 BC 58 40 E0 12 59 03 41 4E 44 84 12 -BC 58 00 F0 FA 59 05 41 4E 44 2E 42 84 12 BC 58 -40 F0 B0 45 A2 57 18 5A 0A 4C 3C F0 70 00 8A 10 -3A F0 0F 00 0C DA 4F 3F 4C 59 03 52 52 43 84 12 -12 5A 00 10 2A 5A 05 52 52 43 2E 42 84 12 12 5A -40 10 36 5A 04 53 57 50 42 00 84 12 12 5A 80 10 -44 5A 03 52 52 41 84 12 12 5A 00 11 52 5A 05 52 -52 41 2E 42 84 12 12 5A 40 11 5E 5A 03 53 58 54 -84 12 12 5A 80 11 00 00 04 50 55 53 48 00 84 12 -12 5A 00 12 78 5A 06 50 55 53 48 2E 42 00 84 12 -12 5A 40 12 D2 59 04 43 41 4C 4C 00 84 12 12 5A -80 12 1A 53 0E 4A 87 12 E2 46 60 49 0D 6F 75 74 -20 6F 66 20 62 6F 75 6E 64 73 48 4D B0 45 9E 56 -C2 5A 92 53 C4 1D 3E 40 2C 00 B0 12 2A 44 C4 49 -D8 4A 28 47 CC 4D 76 58 DA 5A 0A 4E 3E 4F 1A 83 -E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A -08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F -8A 10 5A 06 8F 3F 6C 5A 06 52 52 43 4D 2E 41 00 -84 12 BC 5A 40 00 08 5B 04 52 52 43 4D 00 84 12 -BC 5A 50 00 18 5B 06 52 52 41 4D 2E 41 00 84 12 -BC 5A 40 01 26 5B 04 52 52 41 4D 00 84 12 BC 5A -50 01 36 5B 06 52 4C 41 4D 2E 41 00 84 12 BC 5A -40 02 44 5B 04 52 4C 41 4D 00 84 12 BC 5A 50 02 -54 5B 06 52 52 55 4D 2E 41 00 84 12 BC 5A 40 03 -62 5B 04 52 52 55 4D 00 84 12 BC 5A 50 03 86 5A -07 50 55 53 48 4D 2E 41 84 12 BC 5A 00 14 80 5B -05 50 55 53 48 4D 84 12 BC 5A 00 15 90 5B 06 50 -4F 50 4D 2E 41 00 84 12 BC 5A 00 16 9E 5B 04 50 -4F 50 4D 00 84 12 BC 5A 00 17 85 12 00 3C 72 5B -03 53 3E 3D 85 12 00 38 C0 5B 02 53 3C 00 85 12 -00 34 AE 5B 03 30 3E 3D 85 12 00 30 D4 5B 02 30 -3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 00 2C -E8 5B 03 55 3E 3D 85 12 00 28 DE 5B 03 30 3C 3E -85 12 00 24 FC 5B 02 30 3D 00 85 12 00 20 00 00 -02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D -0E 4A 30 4D F2 5B 04 54 48 45 4E 00 1A 42 C6 1D -08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 -31 2F 88 DA 00 00 30 4D 82 59 04 45 4C 53 45 00 -1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 -8F 4A 00 00 E3 3F 26 5C 05 55 4E 54 49 4C 3A 4F -08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 -00 FE 10 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 -C6 1D 30 4D 06 5A 05 41 47 41 49 4E 87 12 BA 5B -6E 5C 2A 44 00 00 05 57 48 49 4C 45 87 12 14 5C -78 44 2A 44 CA 5B 06 52 45 50 45 41 54 00 87 12 -BA 5B 6E 5C 2C 5C 2A 44 CA 5C 3D 41 2E 4E 08 4E -3E 4F 2A 48 0A 93 88 43 00 00 CA 23 98 42 C6 1D -00 00 30 4D 96 5A 03 42 57 31 84 12 C8 5C E0 1D -E6 5C 03 42 57 32 84 12 C8 5C E2 1D F2 5C 03 42 -57 33 84 12 C8 5C E4 1D 0A 5D 3D 41 1A 42 C6 1D -2E 4E 28 4E 08 93 8E 43 00 00 8B 23 BA 4F 00 00 -A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 -57 31 84 12 08 5D E6 1D 2E 5D 03 46 57 32 84 12 -08 5D E8 1D 3A 5D 03 46 57 33 84 12 08 5D EA 1D -3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 -3E E0 00 08 30 4D 46 5D 04 47 4F 54 4F 00 87 12 -BA 5B BE 4D CC 4B 2A 44 00 00 05 3F 47 4F 54 4F -87 12 50 5D BE 4D CC 4B 2A 44 00 00 03 4A 4D 50 -87 12 BE 4D 9C 5C 2A 44 7A 5D 04 3F 4A 4D 50 00 -87 12 50 5D BE 4D 78 44 6E 5C 2A 44 87 12 B0 45 -9E 56 B4 5D 69 4E 3E 4F 3C 4F 2C 4C 1B 42 C6 1D -A2 53 C6 1D 79 90 52 00 0A 20 B0 12 78 57 5E 0E -5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D 79 90 -23 00 0D 20 3C C0 40 00 92 53 C4 1D A2 53 C6 1D -B0 12 00 57 BB 4F 02 00 3E F0 0F 00 E8 3F 79 90 -26 00 03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 79 90 -40 00 12 20 92 53 C4 1D B0 12 78 57 D8 23 3C D0 -10 00 3E 40 2B 00 B0 12 78 57 92 92 C0 1D C4 1D -CE 27 92 53 C4 1D CB 3F 3C D0 30 00 A2 53 C6 1D -3E 40 28 00 B0 12 00 57 BB 4F 02 00 3E 40 29 00 -EA 3F 87 12 B0 45 9E 56 5A 5E 3B 4F 2C 4B 69 4E -7E 40 20 00 79 90 52 00 03 20 B0 12 78 57 B1 3F -3C C0 F0 00 A2 53 C6 1D 79 90 26 00 09 20 3C D0 -60 00 92 53 C4 1D B0 12 00 57 BB 4F 02 00 A1 3F -3C D0 70 00 3E 40 28 00 B0 12 00 57 BB 4F 02 00 -3E 40 29 00 E2 3F 34 44 2C 00 AC 5D 52 5E 62 44 -2A 44 DC 58 04 4D 4F 56 41 00 84 12 A6 5E C0 00 -FE 5C 04 43 4D 50 41 00 84 12 A6 5E D0 00 96 5C -04 41 44 44 41 00 84 12 A6 5E E0 00 B6 5C 04 53 -55 42 41 00 84 12 A6 5E F0 00 C2 5E 05 43 41 4C -4C 41 87 12 B0 45 9E 56 FA 5E 1B 42 C6 1D A2 53 -C6 1D 6E 4E 3C 40 34 01 7E 90 52 00 0B 20 7E 40 -20 00 B0 12 78 57 5C 0E 0C DE 8B 4C 00 00 3E 4F -3D 41 30 4D 2C 53 7E 90 40 00 0B 20 92 53 C4 1D -7E 40 20 00 B0 12 78 57 EE 23 1C 53 3E 40 2B 00 -E8 3F A2 53 C6 1D 7E 90 23 00 09 20 3C 40 3B 01 -92 53 C4 1D B0 12 00 57 BB 4F 02 00 DC 3F 7E 90 -26 00 02 20 2C 53 F4 3F 7E 40 28 00 1C 83 B0 12 -00 57 BB 4F 02 00 3E 40 29 00 CB 3F 87 12 B0 45 -9E 56 84 5F 69 4E 3E 4F 3C 40 00 18 79 90 52 00 -05 20 B0 12 78 57 0E 4C 3D 41 30 4D 82 43 EE 1D -79 90 23 00 0B 20 92 53 C4 1D B0 12 00 57 2F 53 -3E F0 0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 26 00 -F2 27 79 90 40 00 12 20 92 53 C4 1D B0 12 78 57 -E2 23 3E 40 2B 00 92 53 C4 1D B0 12 78 57 92 92 -C0 1D C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 28 00 -B0 12 00 57 8F 4E 00 00 3E 40 29 00 B0 12 78 57 -3E 4F 3E F0 0F 00 0C DE EA 3F 87 12 B0 45 9E 56 -12 60 3C 4F 69 4E 3E 40 20 00 79 90 52 00 BB 27 -82 43 EE 1D 79 90 26 00 08 20 92 53 C4 1D B0 12 -00 57 2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 B0 12 -00 57 F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E 3E 4F -1C D2 EE 1D 82 43 EE 1D 3C DE 8B 4C 00 00 B2 41 -C4 1D 30 4D 34 44 C4 1D F2 44 B0 44 34 44 2C 00 -7C 5F 0A 60 44 60 24 47 BC 58 B4 5E 04 4D 4F 56 -58 00 84 12 64 60 40 00 00 40 7C 60 06 4D 4F 56 -58 2E 41 00 84 12 64 60 00 00 40 40 8C 60 06 4D -4F 56 58 2E 42 00 84 12 64 60 40 00 40 40 D0 5E -04 41 44 44 58 00 84 12 64 60 40 00 00 50 B0 60 -06 41 44 44 58 2E 41 00 84 12 64 60 00 00 40 50 -C0 60 06 41 44 44 58 2E 42 00 84 12 64 60 40 00 -40 50 D2 60 05 41 44 44 43 58 84 12 64 60 40 00 -00 60 E4 60 07 41 44 44 43 58 2E 41 84 12 64 60 -00 00 40 60 F4 60 07 41 44 44 43 58 2E 42 84 12 -64 60 40 00 40 60 DE 5E 05 53 55 42 43 58 84 12 -64 60 40 00 00 70 18 61 07 53 55 42 43 58 2E 41 -84 12 64 60 00 00 40 70 28 61 07 53 55 42 43 58 -2E 42 84 12 64 60 40 00 40 70 3A 61 04 53 55 42 -58 00 84 12 64 60 40 00 00 80 4C 61 06 53 55 42 -58 2E 41 00 84 12 64 60 00 00 40 80 5C 61 06 53 -55 42 58 2E 42 00 84 12 64 60 40 00 40 80 EC 5E -04 43 4D 50 58 00 84 12 64 60 40 00 00 90 80 61 -06 43 4D 50 58 2E 41 00 84 12 64 60 00 00 40 90 -90 61 06 43 4D 50 58 2E 42 00 84 12 64 60 40 00 -40 90 4A 5C 05 44 41 44 44 58 84 12 64 60 40 00 -00 A0 B4 61 07 44 41 44 44 58 2E 41 84 12 64 60 -00 00 40 A0 C4 61 07 44 41 44 44 58 2E 42 84 12 -64 60 40 00 40 A0 A2 61 04 42 49 54 58 00 84 12 -64 60 40 00 00 B0 E8 61 06 42 49 54 58 2E 41 00 -84 12 64 60 00 00 40 B0 F8 61 06 42 49 54 58 2E -42 00 84 12 64 60 40 00 40 B0 0A 62 04 42 49 43 -58 00 84 12 64 60 40 00 00 C0 1C 62 06 42 49 43 -58 2E 41 00 84 12 64 60 00 00 40 C0 2C 62 06 42 -49 43 58 2E 42 00 84 12 64 60 40 00 40 C0 3E 62 -04 42 49 53 58 00 84 12 64 60 40 00 00 D0 50 62 -06 42 49 53 58 2E 41 00 84 12 64 60 00 00 40 D0 -60 62 06 42 49 53 58 2E 42 00 84 12 64 60 40 00 -40 D0 EC 59 04 58 4F 52 58 00 84 12 64 60 40 00 -00 E0 84 62 06 58 4F 52 58 2E 41 00 84 12 64 60 -00 00 40 E0 94 62 06 58 4F 52 58 2E 42 00 84 12 -64 60 40 00 40 E0 06 61 04 41 4E 44 58 00 84 12 -64 60 40 00 00 F0 B8 62 06 41 4E 44 58 2E 41 00 -84 12 64 60 00 00 40 F0 C8 62 06 41 4E 44 58 2E -42 00 84 12 64 60 40 00 40 F0 34 44 C4 1D F2 44 -B0 44 B0 45 7C 5F 44 60 24 47 12 5A 6E 61 04 52 -52 43 58 00 84 12 EA 62 40 00 00 10 FE 62 06 52 -52 43 58 2E 41 00 84 12 EA 62 00 00 40 10 0E 63 -06 52 52 43 58 2E 42 00 84 12 EA 62 40 00 40 10 -20 63 04 52 52 55 58 00 84 12 EA 62 40 01 00 10 -32 63 06 52 52 55 58 2E 41 00 84 12 EA 62 00 01 -40 10 42 63 06 52 52 55 58 2E 42 00 84 12 EA 62 -40 01 40 10 54 63 05 53 57 50 42 58 84 12 EA 62 -40 00 80 10 66 63 07 53 57 50 42 58 2E 41 84 12 -EA 62 00 00 80 10 76 63 04 52 52 41 58 00 84 12 -EA 62 40 00 00 11 88 63 06 52 52 41 58 2E 41 00 -84 12 EA 62 00 00 40 11 98 63 06 52 52 41 58 2E -42 00 84 12 EA 62 40 00 40 11 AA 63 04 53 58 54 -58 00 84 12 EA 62 40 00 80 11 BC 63 06 53 58 54 -58 2E 41 00 84 12 EA 62 00 00 80 11 06 5C 05 50 -55 53 48 58 84 12 EA 62 40 00 00 12 DE 63 07 50 -55 53 48 58 2E 41 84 12 EA 62 00 00 40 12 EE 63 -07 50 55 53 48 58 2E 42 84 12 EA 62 40 00 40 12 -CC 63 03 52 50 54 87 12 B0 45 9E 56 1E 64 29 4E -7E 40 20 00 79 90 52 00 06 20 B0 12 78 57 03 24 -3E D0 80 00 04 3C B0 12 00 57 3E F0 0F 00 82 4E -EE 1D 3E 4F 3D 41 30 4D -@FFFE -EE 55 -q diff --git a/binaries/MSP_EXP430FR5969_8MHz.txt b/binaries/MSP_EXP430FR5969_8MHz.txt index cf474bb..3229eac 100644 --- a/binaries/MSP_EXP430FR5969_8MHz.txt +++ b/binaries/MSP_EXP430FR5969_8MHz.txt @@ -1,524 +1,385 @@ @1800 -10 00 04 00 51 55 40 1F 05 00 18 00 42 64 98 52 -2C 01 7F B0 00 48 12 48 +10 00 04 00 51 55 40 1F 05 00 18 00 9E 5B D0 50 +2D 01 6B B4 B6 46 C8 46 @4400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 44 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 44 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 44 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 44 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 44 02 3E 52 00 -0E 12 3E 4F 30 4D 96 44 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 44 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 44 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 44 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 45 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 44 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 45 02 31 2D 00 -1E 83 30 4D D8 44 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 45 -02 30 3D 00 1E 83 0E 7E 30 4D 60 45 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 45 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 44 01 3E 3E 8F F4 3B EB 37 0E 45 02 42 4C 00 -85 12 20 00 AC 45 04 42 41 53 45 00 85 12 DC 1D -C8 44 05 53 54 41 54 45 85 12 BE 1D 96 45 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 45 06 55 4D 2F -4D 4F 44 00 30 12 62 44 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 44 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 45 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 45 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 46 -02 23 53 00 87 12 32 46 6A 46 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 46 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 45 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 45 -02 44 2E 00 87 12 D2 45 44 44 B0 44 4C 45 64 46 -BC 44 A2 46 7E 46 22 49 EA 48 2A 44 DC 45 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 44 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 46 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 44 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 46 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 46 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 46 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 45 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 47 03 4B 45 59 30 40 A0 47 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 00 48 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 12 48 30 4D 00 47 -06 41 43 43 45 50 54 00 30 40 CC 47 3C 40 6E 48 -3B 40 38 48 2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 -3C 40 20 00 3D 40 62 48 92 B3 DC 05 05 24 18 42 -CC 05 38 90 0A 00 04 20 21 53 39 40 26 48 4D 15 -A2 B3 DC 05 FD 27 B2 40 11 00 CE 05 E2 C3 23 02 -30 41 B2 40 13 00 CE 05 E2 D3 23 02 30 41 00 00 -05 53 4C 45 45 50 30 40 2A 48 12 D2 0A 18 FB 3F -21 52 3A 17 58 42 CC 05 48 9C 08 2C 48 9B E9 27 -78 92 11 20 2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 -CE 48 00 00 1E 53 A2 B3 DC 05 FD 27 82 48 CE 05 -30 4D 64 48 2D 83 92 B3 DC 05 E4 23 FC 27 82 93 -DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 -0A 18 30 4D B0 46 04 45 4D 49 54 00 30 40 90 48 -08 4E 3E 4F E0 3F 10 47 03 43 49 42 85 12 3C 1D -3F 80 06 00 8F 4E 04 00 3E 40 54 00 9F 42 9E 48 -00 00 AF 4F 02 00 88 3F 86 48 04 45 43 48 4F 00 -B2 40 82 48 5C 48 82 43 DE 1D 30 4D E0 46 06 4E -4F 45 43 48 4F 00 B2 40 30 4D 5C 48 92 43 DE 1D -30 4D 9C 46 05 53 50 41 43 45 2F 83 8F 4E 00 00 -3E 40 20 00 CB 3F E4 48 06 53 50 41 43 45 53 00 -0E 93 09 24 0D 12 3D 40 0C 49 EF 3F 0E 49 2D 83 -1E 83 EB 23 3D 41 3E 4F 30 4D 66 47 04 54 59 50 -45 00 0E 93 0F 24 1E 15 3D 40 38 49 28 4F 7E 48 -8F 48 00 00 2F 83 AA 3F 3A 49 2D 83 91 83 02 00 -F5 23 1D 17 2F 53 3E 4F 30 4D 98 48 02 43 52 00 -30 40 54 49 87 12 60 49 02 0D 0A 00 22 49 2A 44 -2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 -0D 63 30 4D F8 48 82 53 22 00 82 43 B4 1D 87 12 -34 44 60 49 D6 4B 34 44 22 00 C4 49 8E 49 3D 41 -B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D 3E 4F -92 B3 C6 1D A2 63 C6 1D 30 4D CE 48 82 2E 22 00 -87 12 7A 49 34 44 22 49 D6 4B 2A 44 00 00 04 57 -4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A 3A 5C -28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 60 00 -C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 -4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F -1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E CE 48 -00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 0C 4E -65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 1E 24 -58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E FE FF -0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C -FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 -0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C 00 00 -35 40 0E 44 34 40 00 44 30 4D A2 45 07 3E 4E 55 -4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D -6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 -7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 -82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 -09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 8F 48 -02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 2D 15 -3D 40 1E 4B 09 43 08 43 3F 82 8F 4E 06 00 0C 4E -7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 02 00 -E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 04 24 -3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F 20 4B -2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 7A 90 -F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 8F 49 -02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 79 90 -0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 09 9B -08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 45 2A 17 -E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A 4E 93 -2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 3F 50 -06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 BF 4F -00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 00 00 -9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 2F 53 -30 4D BA 48 07 45 58 45 43 55 54 45 0A 4E 3E 4F -00 4A 26 45 01 2C 1A 42 C6 1D A2 53 C6 1D 8A 4E -00 00 3E 4F 30 4D D4 4B 87 4C 49 54 45 52 41 4C -82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 -34 44 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 -00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 EB 3F -30 4D 4C 49 05 43 4F 55 4E 54 2F 83 1E 53 8F 4E -00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F C2 1D -3E 4F 82 43 C4 1D 30 4D 87 12 38 4C B0 45 C4 49 -52 4C 3D 40 5A 4C E2 22 5D 3E 5C 4C 0A 4E 3E 4F -3D 40 72 4C 39 27 3D 40 4C 4C 1A E2 BE 1D B3 27 -AD 23 74 4C 3E 4F 3D 40 4C 4C BA 23 DE 53 00 00 -68 4E 08 5E F8 40 3F 00 00 00 3D 40 3E 4F CD 3F -C4 4B 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D -3C 49 3B 49 3A 49 3D 15 B0 12 2A 44 48 4C B0 4C -B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D -6C 45 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C -B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 50 49 -A0 48 EA 48 48 4C DE 44 70 45 60 49 0C 73 74 61 -63 6B 20 65 6D 70 74 79 21 00 3C 4D 34 44 30 FF -F2 46 8A 45 60 49 0A 46 52 41 4D 20 66 75 6C 6C -21 00 3C 4D 24 47 DE 4C C0 47 05 41 42 4F 52 54 -3F 40 80 1C D1 3F 1A 4D 86 41 42 4F 52 54 22 00 -87 12 7A 49 34 44 3C 4D D6 4B 2A 44 8F 93 02 00 -03 20 2F 52 3E 4F 30 4D B0 12 FE 54 B0 12 00 48 -92 C3 DC 05 38 40 50 55 39 42 09 59 03 43 19 83 -FD 23 18 83 F9 23 92 B3 DC 05 F2 23 87 12 78 54 -34 44 DE 1D F2 44 C0 48 60 49 04 1B 5B 37 6D 00 -22 49 54 44 28 47 98 4D 50 49 60 49 05 6C 69 6E -65 3A 22 49 40 45 D2 46 22 49 60 49 04 1B 5B 30 -6D 00 22 49 20 4D 00 00 83 5B 27 5D 87 12 BE 4D -34 44 34 44 D6 4B D6 4B 2A 44 16 4A 01 27 87 12 -B0 45 C4 49 1C 4A 28 47 CC 4D 2A 44 7C 4C CE 45 -81 5C 92 42 C0 1D C4 1D 30 4D A8 4D 81 5B 82 43 -BE 1D 30 4D D0 4D 01 5D B2 43 BE 1D 30 4D BE 4F -02 00 3E 4F 30 4D 72 47 82 49 53 00 87 12 C8 45 -F2 44 28 47 10 4E AC 4D 34 44 EE 4D D6 4B 2A 44 -BE 4D EE 4D 2A 44 F8 4D 09 49 4D 4D 45 44 49 41 -54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D 76 49 -87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D -00 00 A2 53 C6 1D 30 4D C2 4C 88 50 4F 53 54 50 -4F 4E 45 00 87 12 B0 45 C4 49 1C 4A 54 44 28 47 -CC 4D 70 45 28 47 74 4E 34 44 34 44 D6 4B D6 4B -34 44 D6 4B D6 4B 2A 44 DC 4D 81 3B 82 93 BE 1D -A8 27 87 12 34 44 2A 44 D6 4B 12 4F DE 4D 2A 44 -7A 4E 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 -1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 -FE 4E BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D -82 4F BC 1D 30 4D 92 4E 01 3A 30 12 B2 4E 87 12 -A0 49 B0 45 C4 49 D8 4E 3D 41 08 4E 7A 4E 5A D3 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 44 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 44 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 44 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 44 02 3E 52 00 0E 12 3E 4F 30 4D 70 44 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 44 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 44 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 44 +01 21 BE 4F 00 00 3E 4F 30 4D CC 44 02 30 3D 00 +1E 83 0E 7E 30 4D FC 44 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 45 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 44 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 45 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 45 02 23 53 00 87 12 88 45 C0 45 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 45 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 44 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 45 34 44 86 44 D4 44 BA 45 +92 44 F8 45 D4 45 D6 47 42 4B 82 47 2A 44 22 45 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 45 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 46 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 46 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 46 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C3 23 02 30 41 B2 40 13 00 CE 05 E2 D3 +23 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 46 +B0 12 B6 46 12 D2 0A 18 F9 3F F0 44 06 41 43 43 +45 50 54 00 3C 40 64 47 3B 40 2E 47 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 47 +92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 CC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 +FD 27 82 48 CE 05 30 4D 5A 47 2D 83 92 B3 DC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 44 04 45 4D 49 +54 00 30 40 86 47 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C 47 04 45 43 48 4F 00 B2 40 82 48 +52 47 82 43 DE 1D 30 4D 32 46 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 47 92 43 DE 1D 30 4D 20 46 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 47 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 47 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 45 +02 43 52 00 30 40 08 48 87 12 1E 48 02 0D 0A 00 +D6 47 2A 44 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 45 82 53 22 00 82 43 B4 1D 87 12 14 48 +1E 48 B0 4A 14 48 22 00 80 48 4C 48 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA 47 82 2E 22 00 87 12 38 48 14 48 D6 47 +B0 4A 2A 44 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 +60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 +18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D +F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E +CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 +0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 +1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E +FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 +0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 +09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C +00 00 35 40 0E 44 34 40 00 44 30 4D 82 44 07 3E +4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 +DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 +07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 +D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 +E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 49 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 49 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 45 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 46 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 44 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC 46 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 47 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 4A 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 48 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 48 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 4B 42 4B 80 48 50 4B +3D 40 58 4B CC 22 82 3E 5A 4B 0A 4E 3E 4F 3D 40 +70 4B 23 27 3D 40 4A 4B 1A E2 BE 1D A1 27 B5 23 +72 4B 3E 4F 3D 40 4A 4B B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 4E CB 3F D2 4A +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 44 46 4B AE 4B B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 45 04 51 55 49 54 00 82 43 08 18 31 40 +E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 +04 48 8C 47 42 4B 82 47 46 4B A4 44 0C 45 1E 48 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 4C +14 48 30 FF A0 4A 26 45 1E 48 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 4C 3C 46 E0 4B C2 4A 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E 4C 86 41 42 4F +52 54 22 00 87 12 38 48 14 48 40 4C B0 4A 2A 44 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 C8 51 +B0 12 B6 46 92 C3 DC 05 38 40 50 55 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 DC 05 F3 23 87 12 +42 51 14 48 DE 1D EA 44 AC 47 1E 48 04 1B 5B 37 +6D 00 D6 47 58 44 40 46 9A 4C 04 48 1E 48 05 6C +69 6E 65 3A D6 47 D0 44 24 46 D6 47 1E 48 04 1B +5B 30 6D 00 D6 47 24 4C 00 00 83 5B 27 5D 87 12 +C0 4C 14 48 14 48 B0 4A B0 4A 2A 44 E8 48 01 27 +87 12 42 4B 80 48 EE 48 40 46 CE 4C 2A 44 7A 4B +32 45 81 5C 92 42 C0 1D C4 1D 30 4D AA 4C 81 5B +82 43 BE 1D 30 4D D2 4C 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 4A 82 49 53 00 87 12 +BE 4B EA 44 40 46 12 4D AE 4C 14 48 F0 4C B0 4A +2A 44 C0 4C F0 4C 2A 44 FA 4C 09 49 4D 4D 45 44 +49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D +C4 4B 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 4B +80 48 EE 48 58 44 40 46 CE 4C 0C 45 40 46 5C 4D +14 48 14 48 B0 4A B0 4A 14 48 B0 4A B0 4A 2A 44 +DE 4C 81 3B 82 93 BE 1D B5 27 87 12 14 48 2A 44 +B0 4A FA 4D E0 4C 2A 44 62 4D 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 4D 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A 4D 01 3A 30 12 A0 4D 92 B3 C6 1D A2 63 C6 1D +87 12 42 4B 80 48 C8 4D 3D 41 08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E -3E 4F BA 40 30 40 00 00 BA 40 C4 4E 02 00 82 48 -B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D -30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D -A8 49 FE FF 89 48 00 00 30 4D 87 12 60 49 0F 73 -74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 48 4D -BE 49 08 56 41 52 49 41 42 4C 45 00 B0 12 CE 4E -BA 40 86 12 FC FF E4 3F 24 4C 08 43 4F 4E 53 54 -41 4E 54 00 B0 12 CE 4E BA 40 85 12 FC FF 8A 4E -FE FF 3E 4F D5 3F 5A 4F 06 43 52 45 41 54 45 00 -B0 12 CE 4E BA 40 85 12 FC FF 8A 4A FE FF C8 3F -92 4C 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 -00 00 8A 4D 02 00 3D 41 30 4D 92 4F 05 44 45 46 -45 52 30 12 20 4F 8B 3F 7C 4A 05 3E 42 4F 44 59 -2E 52 30 4D 78 4F 04 43 4F 44 45 00 B0 12 CE 4E -2A 82 82 4A C6 1D 87 12 C0 4E A2 52 74 52 2A 44 -C6 4F 07 43 4F 44 45 4E 4E 4D 87 12 9A 4E DE 4D -D0 4F 2A 44 00 00 07 45 4E 44 43 4F 44 45 87 12 -BC 52 12 4F 2A 44 28 4D 03 41 53 4D 92 42 DA 1D -EC 1D B2 40 78 52 DA 1D D9 3F F6 4F 06 45 4E 44 -41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 48 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 4C 90 4B 05 44 45 46 45 52 +B0 12 B8 4D BA 40 30 40 FC FF BA 40 AE 4D FE FF +E3 3F 1E 4B 06 43 52 45 41 54 45 00 B0 12 B8 4D +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 4E 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 49 05 3E 42 4F 44 59 2E 52 +30 4D 44 4E 04 43 4F 44 45 00 B0 12 B8 4D A2 82 +C6 1D 87 12 D2 50 AC 50 2A 44 84 4E 07 43 4F 44 +45 4E 4E 4D B0 12 86 4D F2 3F 00 00 07 45 4E 44 +43 4F 44 45 87 12 E0 50 FA 4D 2A 44 2C 4C 03 41 +53 4D B2 40 B0 50 DA 1D E0 3F AC 4E 06 45 4E 44 +41 53 4D 00 87 12 B4 4E F4 50 2A 44 00 00 05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 -C6 1D B2 43 BE 1D 30 40 BC 52 00 00 05 4C 4F 32 +C6 1D B2 43 BE 1D 30 40 E0 50 00 00 05 4C 4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 44 -02 00 A2 52 C6 1D ED 3F 18 4E 85 48 49 32 4C 4F -87 12 F2 46 9A 50 D6 4B DE 4D A2 52 74 52 2A 44 -6A 50 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D -A2 52 C6 1D BE 40 28 47 00 00 2E 53 30 4D AC 4F +02 00 A2 52 C6 1D ED 3F 1A 4D 85 48 49 32 4C 4F +87 12 A0 4A 4A 4F B0 4A E0 4C D2 50 AC 50 2A 44 +1A 4F 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D +A2 52 C6 1D BE 40 40 46 00 00 2E 53 30 4D 5E 4E 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 -24 47 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 1C 49 +3C 46 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D D0 47 84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D -E2 4F 85 42 45 47 49 4E 30 40 F2 46 C0 50 85 55 -4E 54 49 4C 39 40 28 47 A2 52 C6 1D 1A 42 C6 1D -8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D 08 50 85 41 -47 41 49 4E 39 40 24 47 EF 3F 42 4F 85 57 48 49 -4C 45 87 12 86 50 78 44 2A 44 30 4E 86 52 45 50 -45 41 54 00 87 12 04 51 C6 50 2A 44 A0 50 82 44 +9C 4E 85 42 45 47 49 4E 30 40 A0 4A 70 4F 85 55 +4E 54 49 4C 39 40 40 46 A2 52 C6 1D 1A 42 C6 1D +8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D BE 4E 85 41 +47 41 49 4E 39 40 3C 46 EF 3F 7A 48 85 57 48 49 +4C 45 87 12 36 4F 76 44 2A 44 34 48 86 52 45 50 +45 41 54 00 87 12 B4 4F 76 4F 2A 44 50 4F 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D -BE 40 3C 47 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 -00 00 30 4D E8 4B 84 4C 4F 4F 50 00 39 40 5E 47 +BE 40 54 46 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 +00 00 30 4D E2 4A 84 4C 4F 4F 50 00 39 40 76 46 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A -00 00 F6 3F 3E 4F 30 4D 98 47 85 2B 4C 4F 4F 50 -39 40 4C 47 E5 3F 56 51 85 4C 45 41 56 45 1A 42 -C6 1D BA 40 6E 47 00 00 BA 40 24 47 02 00 B2 50 -06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A -00 00 30 4D 98 51 04 4D 4F 56 45 00 0A 4E 38 4F -39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 -00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 -18 83 E8 49 00 00 1A 83 FA 23 30 4D 0C 51 0A 56 -4F 43 41 42 55 4C 41 52 59 00 87 12 80 4F 34 44 -10 00 34 44 00 00 3C 47 34 44 00 00 D6 4B 5E 47 -18 52 F2 46 34 44 C8 1D 44 44 F2 44 D6 4B FA 44 -98 4F 34 44 CA 1D FA 44 2A 44 BC 4D 05 46 4F 52 -54 48 84 12 32 52 9C 52 DC 55 DA 52 3C 52 82 50 -8A 51 06 54 CC 52 9C 54 E2 56 DE 50 4E 55 00 00 -DA 53 E6 4D BA 4F 00 00 FE 50 09 41 53 53 45 4D -42 4C 45 52 84 12 32 52 D4 62 6C 62 D0 61 62 5D -0A 5C 86 5D 98 60 00 00 FA 63 0C 64 62 5C A0 5C -A0 62 00 00 00 00 94 5D 66 52 6A 52 04 41 4C 53 -4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F -4A 4E 08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 -39 40 CC 1D 38 40 CA 1D 8A 3F AC 49 04 4F 4E 4C -59 00 82 43 CC 1D 30 4D 2E 51 0B 44 45 46 49 4E -49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D D2 50 -07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F -0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 -F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D -C8 4E 86 5B 54 48 45 4E 5D 00 30 4D 22 53 86 5B -45 4C 53 45 5D 00 87 12 34 44 00 00 36 45 B0 45 -C4 49 2A 4C 44 44 28 47 9C 53 8A 44 8A 44 60 49 -06 5B 54 48 45 4E 5D 00 F8 52 32 47 6A 53 44 49 -40 45 54 44 32 47 3E 53 2A 44 8A 44 8A 44 60 49 -06 5B 45 4C 53 45 5D 00 F8 52 32 47 8A 53 44 49 -40 45 54 44 32 47 3C 53 2A 44 60 49 04 5B 49 46 -5D 00 F8 52 32 47 3E 53 24 47 3C 53 44 49 60 49 -05 0D 0A 6B 6F 20 22 49 A0 48 38 4C 24 47 3E 53 -2E 53 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D -B2 53 89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 45 -C4 49 1C 4A 6C 44 2A 44 C2 53 8B 5B 55 4E 44 45 -46 49 4E 45 44 5D 87 12 B0 45 C4 49 1C 4A 6C 44 -64 45 2A 44 F6 53 3D 41 B2 4E 0E 18 A2 4E 0C 18 -3E 4F 44 3C C6 51 06 4D 41 52 4B 45 52 00 B0 12 -CE 4E BA 40 84 12 FC FF BA 40 F4 53 FE FF 9A 42 -C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 -18 4F 42 52 D2 52 E6 52 3A 54 3A 4E 82 4A C8 1D -2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 -18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 -2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D B2 52 09 50 -57 52 5F 53 54 41 54 45 84 12 32 54 98 52 42 64 -1C 51 09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 -7C 54 92 42 0C 18 7E 54 EF 3F 6E 54 08 50 57 52 -5F 48 45 52 45 00 92 42 C8 1D 7C 54 92 42 C6 1D -7E 54 30 4D 82 54 08 52 53 54 5F 48 45 52 45 00 -92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F FE 51 -04 57 49 50 45 00 39 40 10 00 29 83 B9 43 80 FF -FC 23 B2 40 2A 48 28 48 B2 40 58 55 56 55 B2 40 -98 52 0E 18 B2 40 42 64 0C 18 30 12 8C 54 B2 40 -90 48 8E 48 B2 40 54 49 52 49 B2 40 A0 47 9E 47 -B2 40 CC 47 CA 47 B2 40 3C 1D 9E 48 B2 40 18 00 -0A 18 37 40 1A 44 36 40 BC 44 35 40 0E 44 34 40 -00 44 39 40 10 00 29 83 89 43 E0 1D FC 23 B2 40 -0A 00 DC 1D B2 40 20 00 B4 1D 30 41 D0 54 04 57 -41 52 4D 00 30 40 58 55 3D 40 8C 55 92 C3 30 01 -1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 3E E3 -1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 AC 27 3E 90 -16 00 A9 2F 2E 93 78 27 81 2F 30 4D 60 49 06 0D -1B 5B 37 6D 23 00 22 49 E2 46 60 49 1F 46 61 73 -74 46 6F 72 74 68 20 56 33 30 30 20 28 43 29 4A -2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 22 49 34 44 -80 FF F2 46 28 45 D2 46 60 49 0B 62 79 74 65 73 -20 66 72 65 65 20 24 47 98 4D F0 52 04 43 4F 4C -44 00 92 B3 CA 05 FD 23 B2 40 04 A5 20 01 B2 40 -88 5A 5C 01 92 D3 04 02 B2 40 FE FF 02 02 92 C3 -06 02 B2 43 26 02 B2 43 22 02 E2 D3 25 02 F2 43 -22 03 F2 43 26 03 F2 40 A5 00 61 01 82 43 66 01 -39 40 80 00 B2 40 33 00 64 01 D2 43 61 01 92 D2 -9E 01 08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 -B2 D2 B0 01 F2 D0 10 00 2A 03 F2 C0 40 00 A1 04 -39 40 00 FC 29 83 89 43 00 1C FC 23 39 40 34 00 -29 83 B9 40 EE 55 CC FF FB 23 B2 40 30 48 F0 FF -B2 40 81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 -C8 05 92 C3 C0 05 92 D3 DA 05 3F 40 80 1C 31 40 -E0 1C 30 12 54 55 42 3F 38 40 C0 1D 39 48 2A 48 -09 5A 1A 52 C4 1D 09 9A 03 24 7E 9A FC 27 1A 83 -0E 4A 2A 88 82 4A C4 1D 30 4D B6 54 09 32 43 4F -4E 53 54 41 4E 54 87 12 80 4F D6 4B D6 4B 98 4F -D2 56 2F 83 9F 4E 02 00 00 00 2E 4E 3D 41 30 4D -BC 56 09 32 56 41 52 49 41 42 4C 45 87 12 80 4F -34 44 04 00 06 47 98 4F 2A 44 1C 15 B0 12 2A 44 -C4 49 1C 4A 32 47 10 57 D8 4A 28 47 CC 4D 48 57 -12 57 29 4E 39 90 86 12 02 20 2E 53 15 3C 39 90 -85 12 03 20 1E 4E 02 00 0F 3C 39 90 84 12 0C 20 -2E 52 B9 90 D0 56 02 00 04 24 B9 90 F8 56 02 00 -03 20 B0 12 D2 56 48 57 1B 17 30 41 32 B0 00 02 -01 24 3E 4F 30 41 3E 40 28 00 B0 12 FA 56 B0 12 -4C 57 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 +00 00 F6 3F 3E 4F 30 4D 90 46 85 2B 4C 4F 4F 50 +39 40 64 46 E5 3F 06 50 04 4D 4F 56 45 00 0A 4E +38 4F 39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C +F8 49 00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A +19 83 18 83 E8 49 00 00 1A 83 FA 23 30 4D 14 48 +CA 1D F2 44 2A 44 84 12 7E 50 AE 4F 46 53 DE 4F +BE 4C 32 4F 3A 50 5A 54 64 48 66 51 80 51 8E 4F +00 52 00 00 2C 54 E8 4C 78 4E 00 00 84 12 7E 50 +84 5B 76 5B 2C 59 4E 5A F2 58 00 00 68 5B 00 00 +E8 58 92 5B 4A 59 88 59 32 57 00 00 00 00 2A 5A +AA 50 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D C6 3F +3A 40 0E 00 39 40 CC 1D 38 40 CA 1D B9 3F 82 43 +CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D 86 50 EE 50 +F4 50 04 51 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D +3D 40 10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 +FC 2B 89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 +3E 4F 3D 41 30 4D 32 4D 09 50 57 52 5F 53 54 41 +54 45 84 12 FC 50 D0 50 9E 5B CC 4F 09 52 53 54 +5F 53 54 41 54 45 92 42 0E 18 46 51 92 42 0C 18 +48 51 EF 3F 38 51 08 50 57 52 5F 48 45 52 45 00 +92 42 C8 1D 46 51 92 42 C6 1D 48 51 30 4D 4C 51 +08 52 53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 +92 42 C6 1D 0C 18 EC 3F BC 4F 04 57 49 50 45 00 +39 40 10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 46 +DE 46 B2 40 0A 52 08 52 B2 40 D0 50 0E 18 B2 40 +9E 5B 0C 18 30 12 56 51 B2 40 86 47 84 47 B2 40 +08 48 06 48 B2 40 98 46 96 46 B2 40 18 00 0A 18 +37 40 1A 44 36 40 92 44 35 40 0E 44 34 40 00 44 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 9A 51 +04 57 41 52 4D 00 30 40 0A 52 3D 40 3E 52 92 C3 +30 01 1E 42 08 18 0E 93 11 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 3E 90 0A 00 B8 27 +3E 90 16 00 B5 2F 2E 93 84 27 8D 2F 30 4D 1E 48 +06 0D 1B 5B 37 6D 23 00 D6 47 34 46 1E 48 19 46 +61 73 74 46 6F 72 74 68 20 C2 A9 4A 2E 4D 2E 54 +68 6F 6F 72 65 6E 73 20 D6 47 14 48 30 FF A0 4A +B8 44 24 46 1E 48 0A 62 79 74 65 73 20 66 72 65 +65 00 3C 46 9A 4C 82 4F 04 43 4F 4C 44 00 92 B3 +CA 05 FD 23 B2 40 04 A5 20 01 3E 52 B2 40 88 5A +5C 01 B2 40 FE FF 02 02 B2 D3 06 02 B2 D3 26 02 +B2 40 FF BF 22 02 E2 D3 25 02 F2 43 22 03 F2 D3 +26 03 F2 40 A5 00 61 01 82 43 66 01 39 40 80 00 +B2 40 33 00 64 01 D2 43 61 01 92 D2 9E 01 08 18 +38 40 59 14 18 83 FE 23 19 83 FA 23 B2 D2 B0 01 +F2 D0 10 00 2A 03 F2 C0 40 00 A1 04 39 40 00 08 +29 83 89 43 00 1C FC 23 39 40 34 00 29 83 B9 40 +9C 52 CC FF FB 23 B2 40 26 47 F0 FF B2 40 81 00 +C0 05 92 42 02 18 C6 05 92 42 04 18 C8 05 92 C3 +C0 05 92 D3 DA 05 3F 40 80 1C 31 40 E0 1C 30 12 +06 52 4B 3F 88 52 07 43 4F 4D 50 41 52 45 0C 4E +38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 +1C 83 07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 +30 4D 1E 43 30 4D B2 4D 86 5B 54 48 45 4E 5D 00 +30 4D 78 53 86 5B 45 4C 53 45 5D 00 87 12 14 48 +00 00 C6 44 42 4B 80 48 24 4B 34 44 40 46 EE 53 +44 44 1E 48 06 5B 54 48 45 4E 5D 00 4E 53 4A 46 +BE 53 F8 47 D0 44 58 44 4A 46 94 53 2A 44 44 44 +1E 48 06 5B 45 4C 53 45 5D 00 4E 53 4A 46 DC 53 +F8 47 D0 44 58 44 4A 46 92 53 2A 44 1E 48 04 5B +49 46 5D 00 4E 53 4A 46 94 53 3C 46 92 53 F8 47 +1E 48 05 0D 0A 6B 6F 20 D6 47 8C 47 32 4B 3C 46 +94 53 84 53 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 +30 4D 04 54 89 5B 44 45 46 49 4E 45 44 5D 87 12 +42 4B 80 48 EE 48 6A 44 2A 44 14 54 8B 5B 55 4E +44 45 46 49 4E 45 44 5D 87 12 42 4B 80 48 EE 48 +6A 44 00 45 2A 44 48 54 3D 41 B2 4E 0E 18 A2 4E +0C 18 3E 4F 30 40 56 51 48 50 06 4D 41 52 4B 45 +52 00 B0 12 B8 4D BA 40 84 12 FC FF BA 40 46 54 +FE FF 9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 +C6 1D 30 40 00 4E 1C 15 B0 12 2A 44 80 48 EE 48 +4A 46 9C 54 AA 49 40 46 CE 4C B6 54 9E 54 39 4E +39 80 86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 +19 53 01 24 2E 82 1B 17 30 41 3E 40 28 00 B0 12 +86 54 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D 92 53 C4 1D B0 12 2A 44 -C4 49 D8 4A 28 47 94 57 8A 57 21 53 3E 90 10 00 -87 2D DA 2B 96 57 B2 41 C4 1D D6 3F 87 12 B0 45 -98 56 A4 57 0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E -3E 4F 7A 90 23 00 2F 20 92 53 C4 1D B0 12 FA 56 -B0 12 4C 57 0E 93 03 20 3C 40 00 03 21 3C 1E 93 -03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 20 03 -17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 03 20 -3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 08 3C +80 48 AA 49 40 46 F4 54 EA 54 21 53 3E 90 10 00 +7D 2D E1 2B F6 54 B2 41 C4 1D DD 3F 87 12 42 4B +74 48 04 55 0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E +3E 4F 7A 90 23 00 27 20 92 53 C4 1D B0 12 86 54 +3C 40 00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 +3C 40 20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 +3C 40 30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 3C 40 30 00 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 -3E 4F 3D 41 30 4D 7A 90 26 00 09 20 3C 40 10 02 -92 53 C4 1D B0 12 FA 56 B0 12 4C 57 EB 3F 7A 90 -40 00 16 20 3C 40 20 00 92 53 C4 1D B0 12 72 57 -0C 20 3C 50 10 00 3E 40 2B 00 B0 12 72 57 92 92 -C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 0C 5E D8 3F -B0 12 72 57 FA 23 3C 50 10 00 B0 12 56 57 EF 3F -0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 B0 45 98 56 -82 58 FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 -82 00 C6 3F B0 12 72 57 E1 23 3C 50 80 00 B0 12 -56 57 DC 3F 20 48 04 52 45 54 49 00 87 12 34 44 -00 13 D6 4B 2A 44 34 44 2C 00 9C 57 7A 58 C0 58 -2E 4E 0E DC 09 4B A2 3F 4C 50 03 4D 4F 56 84 12 -B6 58 00 40 CA 58 05 4D 4F 56 2E 42 84 12 B6 58 -40 40 00 00 03 41 44 44 84 12 B6 58 00 50 E4 58 -05 41 44 44 2E 42 84 12 B6 58 40 50 F0 58 04 41 -44 44 43 00 84 12 B6 58 00 60 FE 58 06 41 44 44 -43 2E 42 00 84 12 B6 58 40 60 A6 58 04 53 55 42 -43 00 84 12 B6 58 00 70 1C 59 06 53 55 42 43 2E -42 00 84 12 B6 58 40 70 2A 59 03 53 55 42 84 12 -B6 58 00 80 3A 59 05 53 55 42 2E 42 84 12 B6 58 -40 80 2E 50 03 43 4D 50 84 12 B6 58 00 90 54 59 -05 43 4D 50 2E 42 84 12 B6 58 40 90 1C 50 04 44 -41 44 44 00 84 12 B6 58 00 A0 6E 59 06 44 41 44 -44 2E 42 00 84 12 B6 58 40 A0 60 59 03 42 49 54 -84 12 B6 58 00 B0 8C 59 05 42 49 54 2E 42 84 12 -B6 58 40 B0 98 59 03 42 49 43 84 12 B6 58 00 C0 -A6 59 05 42 49 43 2E 42 84 12 B6 58 40 C0 B2 59 -03 42 49 53 84 12 B6 58 00 D0 C0 59 05 42 49 53 -2E 42 84 12 B6 58 40 D0 00 00 03 58 4F 52 84 12 -B6 58 00 E0 DA 59 05 58 4F 52 2E 42 84 12 B6 58 -40 E0 0C 59 03 41 4E 44 84 12 B6 58 00 F0 F4 59 -05 41 4E 44 2E 42 84 12 B6 58 40 F0 B0 45 9C 57 -12 5A 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA -4F 3F 46 59 03 52 52 43 84 12 0C 5A 00 10 24 5A -05 52 52 43 2E 42 84 12 0C 5A 40 10 30 5A 04 53 -57 50 42 00 84 12 0C 5A 80 10 3E 5A 03 52 52 41 -84 12 0C 5A 00 11 4C 5A 05 52 52 41 2E 42 84 12 -0C 5A 40 11 58 5A 03 53 58 54 84 12 0C 5A 80 11 -00 00 04 50 55 53 48 00 84 12 0C 5A 00 12 72 5A -06 50 55 53 48 2E 42 00 84 12 0C 5A 40 12 CC 59 -04 43 41 4C 4C 00 84 12 0C 5A 80 12 1A 53 0E 4A -87 12 E2 46 60 49 0D 6F 75 74 20 6F 66 20 62 6F -75 6E 64 73 48 4D B0 45 98 56 BC 5A 92 53 C4 1D -3E 40 2C 00 B0 12 2A 44 C4 49 D8 4A 28 47 CC 4D -70 58 D4 5A 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E -0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 -D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F -66 5A 06 52 52 43 4D 2E 41 00 84 12 B6 5A 40 00 -02 5B 04 52 52 43 4D 00 84 12 B6 5A 50 00 12 5B -06 52 52 41 4D 2E 41 00 84 12 B6 5A 40 01 20 5B -04 52 52 41 4D 00 84 12 B6 5A 50 01 30 5B 06 52 -4C 41 4D 2E 41 00 84 12 B6 5A 40 02 3E 5B 04 52 -4C 41 4D 00 84 12 B6 5A 50 02 4E 5B 06 52 52 55 -4D 2E 41 00 84 12 B6 5A 40 03 5C 5B 04 52 52 55 -4D 00 84 12 B6 5A 50 03 80 5A 07 50 55 53 48 4D -2E 41 84 12 B6 5A 00 14 7A 5B 05 50 55 53 48 4D -84 12 B6 5A 00 15 8A 5B 06 50 4F 50 4D 2E 41 00 -84 12 B6 5A 00 16 98 5B 04 50 4F 50 4D 00 84 12 -B6 5A 00 17 85 12 00 3C 6C 5B 03 53 3E 3D 85 12 -00 38 BA 5B 02 53 3C 00 85 12 00 34 A8 5B 03 30 -3E 3D 85 12 00 30 CE 5B 02 30 3C 00 85 12 00 30 -00 00 02 55 3C 00 85 12 00 2C E2 5B 03 55 3E 3D -85 12 00 28 D8 5B 03 30 3C 3E 85 12 00 24 F6 5B -02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 -C6 1D 8A 4E 00 00 A2 53 C6 1D 0E 4A 30 4D EC 5B -04 54 48 45 4E 00 1A 42 C6 1D 08 4E 3E 4F 09 48 -29 53 0A 89 0A 11 3A 90 00 02 31 2F 88 DA 00 00 -30 4D 7C 59 04 45 4C 53 45 00 1A 42 C6 1D BA 40 -00 3C 00 00 A2 53 C6 1D 2F 83 8F 4A 00 00 E3 3F -20 5C 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 -C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE 10 3B 3A F0 -FF 03 08 DA 89 48 00 00 A2 53 C6 1D 30 4D 00 5A -05 41 47 41 49 4E 87 12 B4 5B 68 5C 2A 44 00 00 -05 57 48 49 4C 45 87 12 0E 5C 78 44 2A 44 C4 5B -06 52 45 50 45 41 54 00 87 12 B4 5B 68 5C 26 5C -2A 44 C4 5C 3D 41 2E 4E 08 4E 3E 4F 2A 48 0A 93 -88 43 00 00 CA 23 98 42 C6 1D 00 00 30 4D 90 5A -03 42 57 31 84 12 C2 5C E0 1D E0 5C 03 42 57 32 -84 12 C2 5C E2 1D EC 5C 03 42 57 33 84 12 C2 5C -E4 1D 04 5D 3D 41 1A 42 C6 1D 2E 4E 28 4E 08 93 -8E 43 00 00 8B 23 BA 4F 00 00 A2 53 C6 1D 8E 4A -00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 02 5D -E6 1D 28 5D 03 46 57 32 84 12 02 5D E8 1D 34 5D -03 46 57 33 84 12 02 5D EA 1D 3E 90 00 30 07 24 -3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 30 4D -40 5D 04 47 4F 54 4F 00 87 12 B4 5B BE 4D CC 4B -2A 44 00 00 05 3F 47 4F 54 4F 87 12 4A 5D BE 4D -CC 4B 2A 44 00 00 03 4A 4D 50 87 12 BE 4D 96 5C -2A 44 74 5D 04 3F 4A 4D 50 00 87 12 4A 5D BE 4D -78 44 68 5C 2A 44 87 12 B0 45 98 56 AE 5D 69 4E -3E 4F 3C 4F 2C 4C 1B 42 C6 1D A2 53 C6 1D 79 90 -52 00 0A 20 B0 12 72 57 5E 0E 5E 0E 0E DC 8B 4E -00 00 0E 4B 3D 41 30 4D 79 90 23 00 0D 20 3C C0 -40 00 92 53 C4 1D A2 53 C6 1D B0 12 FA 56 BB 4F -02 00 3E F0 0F 00 E8 3F 79 90 26 00 03 20 3C E0 -E0 00 EF 3F 3C C0 F0 00 79 90 40 00 12 20 92 53 -C4 1D B0 12 72 57 D8 23 3C D0 10 00 3E 40 2B 00 -B0 12 72 57 92 92 C0 1D C4 1D CE 27 92 53 C4 1D -CB 3F 3C D0 30 00 A2 53 C6 1D 3E 40 28 00 B0 12 -FA 56 BB 4F 02 00 3E 40 29 00 EA 3F 87 12 B0 45 -98 56 54 5E 3B 4F 2C 4B 69 4E 7E 40 20 00 79 90 -52 00 03 20 B0 12 72 57 B1 3F 3C C0 F0 00 A2 53 -C6 1D 79 90 26 00 09 20 3C D0 60 00 92 53 C4 1D -B0 12 FA 56 BB 4F 02 00 A1 3F 3C D0 70 00 3E 40 -28 00 B0 12 FA 56 BB 4F 02 00 3E 40 29 00 E2 3F -34 44 2C 00 A6 5D 4C 5E 62 44 2A 44 D6 58 04 4D -4F 56 41 00 84 12 A0 5E C0 00 F8 5C 04 43 4D 50 -41 00 84 12 A0 5E D0 00 90 5C 04 41 44 44 41 00 -84 12 A0 5E E0 00 B0 5C 04 53 55 42 41 00 84 12 -A0 5E F0 00 BC 5E 05 43 41 4C 4C 41 87 12 B0 45 -98 56 F4 5E 1B 42 C6 1D A2 53 C6 1D 6E 4E 3C 40 -34 01 7E 90 52 00 0B 20 7E 40 20 00 B0 12 72 57 -5C 0E 0C DE 8B 4C 00 00 3E 4F 3D 41 30 4D 2C 53 -7E 90 40 00 0B 20 92 53 C4 1D 7E 40 20 00 B0 12 -72 57 EE 23 1C 53 3E 40 2B 00 E8 3F A2 53 C6 1D -7E 90 23 00 09 20 3C 40 3B 01 92 53 C4 1D B0 12 -FA 56 BB 4F 02 00 DC 3F 7E 90 26 00 02 20 2C 53 -F4 3F 7E 40 28 00 1C 83 B0 12 FA 56 BB 4F 02 00 -3E 40 29 00 CB 3F 87 12 B0 45 98 56 7E 5F 69 4E -3E 4F 3C 40 00 18 79 90 52 00 05 20 B0 12 72 57 -0E 4C 3D 41 30 4D 82 43 EE 1D 79 90 23 00 0B 20 -92 53 C4 1D B0 12 FA 56 2F 53 3E F0 0F 00 5E 0A -5E 0E 0C DE ED 3F 79 90 26 00 F2 27 79 90 40 00 -12 20 92 53 C4 1D B0 12 72 57 E2 23 3E 40 2B 00 -92 53 C4 1D B0 12 72 57 92 92 C0 1D C4 1D D8 27 -92 53 C4 1D D5 3F 3E 40 28 00 B0 12 FA 56 8F 4E -00 00 3E 40 29 00 B0 12 72 57 3E 4F 3E F0 0F 00 -0C DE EA 3F 87 12 B0 45 98 56 0C 60 3C 4F 69 4E -3E 40 20 00 79 90 52 00 BB 27 82 43 EE 1D 79 90 -26 00 08 20 92 53 C4 1D B0 12 FA 56 2F 53 3E F0 -0F 00 BF 3F 3E 40 28 00 B0 12 FA 56 F7 3F 1B 42 -C6 1D A2 53 C6 1D 0C 4E 3E 4F 1C D2 EE 1D 82 43 -EE 1D 3C DE 8B 4C 00 00 B2 41 C4 1D 30 4D 34 44 -C4 1D F2 44 B0 44 34 44 2C 00 76 5F 04 60 3E 60 -24 47 B6 58 AE 5E 04 4D 4F 56 58 00 84 12 5E 60 -40 00 00 40 76 60 06 4D 4F 56 58 2E 41 00 84 12 -5E 60 00 00 40 40 86 60 06 4D 4F 56 58 2E 42 00 -84 12 5E 60 40 00 40 40 CA 5E 04 41 44 44 58 00 -84 12 5E 60 40 00 00 50 AA 60 06 41 44 44 58 2E -41 00 84 12 5E 60 00 00 40 50 BA 60 06 41 44 44 -58 2E 42 00 84 12 5E 60 40 00 40 50 CC 60 05 41 -44 44 43 58 84 12 5E 60 40 00 00 60 DE 60 07 41 -44 44 43 58 2E 41 84 12 5E 60 00 00 40 60 EE 60 -07 41 44 44 43 58 2E 42 84 12 5E 60 40 00 40 60 -D8 5E 05 53 55 42 43 58 84 12 5E 60 40 00 00 70 -12 61 07 53 55 42 43 58 2E 41 84 12 5E 60 00 00 -40 70 22 61 07 53 55 42 43 58 2E 42 84 12 5E 60 -40 00 40 70 34 61 04 53 55 42 58 00 84 12 5E 60 -40 00 00 80 46 61 06 53 55 42 58 2E 41 00 84 12 -5E 60 00 00 40 80 56 61 06 53 55 42 58 2E 42 00 -84 12 5E 60 40 00 40 80 E6 5E 04 43 4D 50 58 00 -84 12 5E 60 40 00 00 90 7A 61 06 43 4D 50 58 2E -41 00 84 12 5E 60 00 00 40 90 8A 61 06 43 4D 50 -58 2E 42 00 84 12 5E 60 40 00 40 90 44 5C 05 44 -41 44 44 58 84 12 5E 60 40 00 00 A0 AE 61 07 44 -41 44 44 58 2E 41 84 12 5E 60 00 00 40 A0 BE 61 -07 44 41 44 44 58 2E 42 84 12 5E 60 40 00 40 A0 -9C 61 04 42 49 54 58 00 84 12 5E 60 40 00 00 B0 -E2 61 06 42 49 54 58 2E 41 00 84 12 5E 60 00 00 -40 B0 F2 61 06 42 49 54 58 2E 42 00 84 12 5E 60 -40 00 40 B0 04 62 04 42 49 43 58 00 84 12 5E 60 -40 00 00 C0 16 62 06 42 49 43 58 2E 41 00 84 12 -5E 60 00 00 40 C0 26 62 06 42 49 43 58 2E 42 00 -84 12 5E 60 40 00 40 C0 38 62 04 42 49 53 58 00 -84 12 5E 60 40 00 00 D0 4A 62 06 42 49 53 58 2E -41 00 84 12 5E 60 00 00 40 D0 5A 62 06 42 49 53 -58 2E 42 00 84 12 5E 60 40 00 40 D0 E6 59 04 58 -4F 52 58 00 84 12 5E 60 40 00 00 E0 7E 62 06 58 -4F 52 58 2E 41 00 84 12 5E 60 00 00 40 E0 8E 62 -06 58 4F 52 58 2E 42 00 84 12 5E 60 40 00 40 E0 -00 61 04 41 4E 44 58 00 84 12 5E 60 40 00 00 F0 -B2 62 06 41 4E 44 58 2E 41 00 84 12 5E 60 00 00 -40 F0 C2 62 06 41 4E 44 58 2E 42 00 84 12 5E 60 -40 00 40 F0 34 44 C4 1D F2 44 B0 44 B0 45 76 5F -3E 60 24 47 0C 5A 68 61 04 52 52 43 58 00 84 12 -E4 62 40 00 00 10 F8 62 06 52 52 43 58 2E 41 00 -84 12 E4 62 00 00 40 10 08 63 06 52 52 43 58 2E -42 00 84 12 E4 62 40 00 40 10 1A 63 04 52 52 55 -58 00 84 12 E4 62 40 01 00 10 2C 63 06 52 52 55 -58 2E 41 00 84 12 E4 62 00 01 40 10 3C 63 06 52 -52 55 58 2E 42 00 84 12 E4 62 40 01 40 10 4E 63 -05 53 57 50 42 58 84 12 E4 62 40 00 80 10 60 63 -07 53 57 50 42 58 2E 41 84 12 E4 62 00 00 80 10 -70 63 04 52 52 41 58 00 84 12 E4 62 40 00 00 11 -82 63 06 52 52 41 58 2E 41 00 84 12 E4 62 00 00 -40 11 92 63 06 52 52 41 58 2E 42 00 84 12 E4 62 -40 00 40 11 A4 63 04 53 58 54 58 00 84 12 E4 62 -40 00 80 11 B6 63 06 53 58 54 58 2E 41 00 84 12 -E4 62 00 00 80 11 00 5C 05 50 55 53 48 58 84 12 -E4 62 40 00 00 12 D8 63 07 50 55 53 48 58 2E 41 -84 12 E4 62 00 00 40 12 E8 63 07 50 55 53 48 58 -2E 42 84 12 E4 62 40 00 40 12 C6 63 03 52 50 54 -87 12 B0 45 98 56 18 64 29 4E 7E 40 20 00 79 90 -52 00 06 20 B0 12 72 57 03 24 3E D0 80 00 04 3C -B0 12 FA 56 3E F0 0F 00 82 4E EE 1D 3E 4F 3D 41 -30 4D +3E 4F 3D 41 30 4D 7A 90 26 00 07 20 3C 40 10 02 +92 53 C4 1D B0 12 86 54 ED 3F 7A 90 40 00 16 20 +3C 40 20 00 92 53 C4 1D B0 12 D2 54 0C 20 3C 50 +10 00 3E 40 2B 00 B0 12 D2 54 92 92 C0 1D C4 1D +02 24 92 53 C4 1D 8E 10 0C 5E DA 3F B0 12 D2 54 +FA 23 3C 50 10 00 B0 12 BA 54 EF 3F 0C 43 1B 42 +C6 1D A2 53 C6 1D 87 12 42 4B 74 48 CE 55 FE 90 +26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 C8 3F +B0 12 D2 54 E1 23 3C 50 80 00 B0 12 BA 54 DC 3F +D6 46 04 52 45 54 49 00 87 12 14 48 00 13 B0 4A +2A 44 14 48 2C 00 FC 54 C6 55 0C 56 09 4B 2E 4E +0E DC A4 3F FC 4E 03 4D 4F 56 84 12 02 56 00 40 +16 56 05 4D 4F 56 2E 42 84 12 02 56 40 40 00 00 +03 41 44 44 84 12 02 56 00 50 30 56 05 41 44 44 +2E 42 84 12 02 56 40 50 3C 56 04 41 44 44 43 00 +84 12 02 56 00 60 4A 56 06 41 44 44 43 2E 42 00 +84 12 02 56 40 60 F2 55 04 53 55 42 43 00 84 12 +02 56 00 70 68 56 06 53 55 42 43 2E 42 00 84 12 +02 56 40 70 76 56 03 53 55 42 84 12 02 56 00 80 +86 56 05 53 55 42 2E 42 84 12 02 56 40 80 DE 4E +03 43 4D 50 84 12 02 56 00 90 A0 56 05 43 4D 50 +2E 42 84 12 02 56 40 90 CC 4E 04 44 41 44 44 00 +84 12 02 56 00 A0 BA 56 06 44 41 44 44 2E 42 00 +84 12 02 56 40 A0 AC 56 03 42 49 54 84 12 02 56 +00 B0 D8 56 05 42 49 54 2E 42 84 12 02 56 40 B0 +E4 56 03 42 49 43 84 12 02 56 00 C0 F2 56 05 42 +49 43 2E 42 84 12 02 56 40 C0 FE 56 03 42 49 53 +84 12 02 56 00 D0 0C 57 05 42 49 53 2E 42 84 12 +02 56 40 D0 00 00 03 58 4F 52 84 12 02 56 00 E0 +26 57 05 58 4F 52 2E 42 84 12 02 56 40 E0 58 56 +03 41 4E 44 84 12 02 56 00 F0 40 57 05 41 4E 44 +2E 42 84 12 02 56 40 F0 42 4B FC 54 5E 57 0A 4C +3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F 92 56 +03 52 52 43 84 12 58 57 00 10 70 57 05 52 52 43 +2E 42 84 12 58 57 40 10 7C 57 04 53 57 50 42 00 +84 12 58 57 80 10 8A 57 03 52 52 41 84 12 58 57 +00 11 98 57 05 52 52 41 2E 42 84 12 58 57 40 11 +A4 57 03 53 58 54 84 12 58 57 80 11 00 00 04 50 +55 53 48 00 84 12 58 57 00 12 BE 57 06 50 55 53 +48 2E 42 00 84 12 58 57 40 12 18 57 04 43 41 4C +4C 00 84 12 58 57 80 12 1A 53 0E 4A 87 12 34 46 +1E 48 0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 +4C 4C 42 4B 74 48 08 58 92 53 C4 1D 3E 40 2C 00 +B0 12 2A 44 80 48 AA 49 40 46 CE 4C BC 55 20 58 +0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C +59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E +94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F B2 57 04 52 +52 43 4D 00 84 12 02 58 50 00 4E 58 04 52 52 41 +4D 00 84 12 02 58 50 01 5C 58 04 52 4C 41 4D 00 +84 12 02 58 50 02 6A 58 04 52 52 55 4D 00 84 12 +02 58 50 03 CC 57 05 50 55 53 48 4D 84 12 02 58 +00 15 86 58 04 50 4F 50 4D 00 84 12 02 58 00 17 +78 58 03 53 3E 3D 85 12 00 38 A2 58 02 53 3C 00 +85 12 00 34 94 58 03 30 3E 3D 85 12 00 30 B6 58 +02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 +00 2C CA 58 03 55 3E 3D 85 12 00 28 C0 58 03 30 +3C 3E 85 12 00 24 DE 58 02 30 3D 00 85 12 00 20 +00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 +C6 1D 0E 4A 30 4D D4 58 04 54 48 45 4E 00 1A 42 +C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 +00 02 63 2F 88 DA 00 00 30 4D C8 56 04 45 4C 53 +45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D +2F 83 8F 4A 00 00 E3 3F 08 59 05 55 4E 54 49 4C +3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 +3A 90 00 FE 42 3B 3A F0 FF 03 08 DA 89 48 00 00 +A2 53 C6 1D 30 4D 4C 57 05 41 47 41 49 4E 0A 4E +38 40 00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 +F6 58 76 44 2A 44 AC 58 06 52 45 50 45 41 54 00 +87 12 7E 59 0E 59 2A 44 AA 59 3D 41 08 4E 3E 4F +2A 48 B2 92 C4 1D CD 2F 98 42 C6 1D 00 00 30 4D +DC 57 03 42 57 31 84 12 A8 59 00 00 C2 59 03 42 +57 32 84 12 A8 59 00 00 CE 59 03 42 57 33 84 12 +A8 59 00 00 E6 59 3D 41 1A 42 C6 1D 28 4E B2 92 +C4 1D 90 2B BA 4F 00 00 A2 53 C6 1D 8E 4A 00 00 +3E 4F 30 4D 00 00 03 46 57 31 84 12 E4 59 00 00 +06 5A 03 46 57 32 84 12 E4 59 00 00 12 5A 03 46 +57 33 84 12 E4 59 00 00 00 00 05 3F 47 4F 54 4F +3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 +3E E0 00 08 87 12 C0 4C DA 4A 2A 44 1E 5A 04 47 +4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F +87 12 42 4B 74 48 68 5A 69 4E 3E 4F 3C 4F 2C 4C +1B 42 C6 1D A2 53 C6 1D 79 90 52 00 0A 20 B0 12 +D2 54 5E 0E 5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 +30 4D 79 90 23 00 0D 20 3C C0 40 00 92 53 C4 1D +A2 53 C6 1D B0 12 86 54 BB 4F 02 00 3E F0 0F 00 +E8 3F 79 90 26 00 03 20 3C E0 E0 00 EF 3F 3C C0 +F0 00 79 90 40 00 12 20 92 53 C4 1D B0 12 D2 54 +D8 23 3C D0 10 00 3E 40 2B 00 B0 12 D2 54 92 92 +C0 1D C4 1D CE 27 92 53 C4 1D CB 3F 3C D0 30 00 +A2 53 C6 1D 3E 40 28 00 B0 12 86 54 BB 4F 02 00 +3E 40 29 00 EA 3F 87 12 42 4B 74 48 0E 5B 3B 4F +2C 4B 69 4E 7E 40 20 00 79 90 52 00 03 20 B0 12 +D2 54 B1 3F 3C C0 F0 00 A2 53 C6 1D 79 90 26 00 +09 20 3C D0 60 00 92 53 C4 1D B0 12 86 54 BB 4F +02 00 A1 3F 3C D0 70 00 3E 40 28 00 B0 12 86 54 +BB 4F 02 00 3E 40 29 00 E2 3F 14 48 2C 00 60 5A +06 5B 66 44 2A 44 22 56 04 4D 4F 56 41 00 84 12 +5A 5B C0 00 DA 59 04 43 4D 50 41 00 84 12 5A 5B +D0 00 78 59 04 41 44 44 41 00 84 12 5A 5B E0 00 +98 59 04 53 55 42 41 00 84 12 5A 5B F0 00 @FFFE -EE 55 +9C 52 q diff --git a/binaries/MSP_EXP430FR5994.txt b/binaries/MSP_EXP430FR5994.txt new file mode 100644 index 0000000..5dc8192 --- /dev/null +++ b/binaries/MSP_EXP430FR5994.txt @@ -0,0 +1,671 @@ +@1800 +10 00 08 00 A1 F7 80 3E 05 00 18 00 7A 69 C4 4D +2D 01 FF B3 B6 42 C8 42 C6 60 02 61 +@4000 +2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 +8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 40 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 40 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 40 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 40 02 3E 52 00 0E 12 3E 4F 30 4D 70 40 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 40 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 40 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 40 +01 21 BE 4F 00 00 3E 4F 30 4D CC 40 02 30 3D 00 +1E 83 0E 7E 30 4D FC 40 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 41 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 40 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 41 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 41 02 23 53 00 87 12 88 41 C0 41 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 41 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 40 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 41 34 40 86 40 D4 40 BA 41 +92 40 F8 41 D4 41 38 44 A4 47 E0 43 2A 40 22 41 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 41 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 42 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 42 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 42 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C2 23 02 30 41 B2 40 13 00 CE 05 E2 D2 +23 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 42 +B0 12 B6 42 12 D2 0A 18 F9 3F 0D 12 3D 40 0A 43 +1B 42 32 20 9B 42 1E 20 16 00 3A 4F 09 4E 0E 43 +1C 42 1E 20 1B 42 20 20 02 3C 0C 43 2D 83 0C 9B +14 2C 58 4C 00 1E 1C 53 78 90 20 00 07 2C 78 90 +0A 00 F5 23 82 4C 1E 20 3D 41 30 4D 0E 99 3D 24 +CA 48 00 00 1A 53 1E 53 38 3C 1A 15 B0 12 0C 62 +19 17 DE 3F F0 40 06 41 43 43 45 50 54 00 30 40 +52 43 3C 40 C2 43 3B 40 8C 43 2D 15 0A 4E 2E 4F +0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 B6 43 92 B3 +DC 05 05 24 18 42 CC 05 38 90 0A 00 9C 23 21 53 +3D 15 AC 3F 21 52 3A 17 58 42 CC 05 48 9C 08 2C +48 9B 9A 27 78 92 11 20 2E 9F 0F 24 1E 83 05 3C +0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 FD 27 +82 48 CE 05 30 4D B8 43 2D 83 92 B3 DC 05 E4 23 +FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 +B2 40 18 00 0A 18 30 4D 9E 40 04 45 4D 49 54 00 +30 40 E4 43 08 4E 3E 4F E0 3F 85 12 3C 1D 3F 80 +06 00 8F 4E 04 00 3E 40 54 00 9F 42 EC 43 00 00 +AF 4F 02 00 A4 3F DA 43 04 45 43 48 4F 00 B2 40 +82 48 B0 43 82 43 DE 1D 30 4D 32 42 06 4E 4F 45 +43 48 4F 00 B2 40 30 4D B0 43 92 43 DE 1D 30 4D +20 42 04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 +4E 44 28 4F 7E 48 8F 48 00 00 2F 83 C9 3F 50 44 +2D 83 91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D +D0 41 02 43 52 00 30 40 6A 44 87 12 80 44 02 0D +0A 00 38 44 2A 40 2F 83 8F 4E 00 00 3E 4D 30 4D +2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 +0D 63 30 4D F2 41 82 53 22 00 82 43 B4 1D 87 12 +76 44 80 44 12 47 76 44 22 00 E2 44 AE 44 B2 40 +20 00 B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 +3E 4F 30 4D 1C 44 82 2E 22 00 87 12 9A 44 76 44 +38 44 12 47 2A 40 48 43 05 3C 00 00 04 57 4F 52 +44 00 48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 +C4 1D 09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 +0E 4A 1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D +3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C +09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 +B4 1D F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D +08 8E CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 +2F 83 0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B +0E 93 1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 +1E 4E FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 +F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 +19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 +8F 4C 00 00 35 40 0E 40 34 40 00 40 30 4D 82 40 +07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 +1B 42 DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 +7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C +82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 +18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C +00 00 8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 +1B 42 DC 1D 0C 43 2D 15 3D 40 56 46 09 43 08 43 +3F 82 8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 +04 28 C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 +07 24 3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 +1C 53 1E 83 EA 3F 58 46 2F 24 2D 83 7A 90 28 00 +CB 27 32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 +23 20 0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C +69 49 79 80 30 00 79 90 0A 00 05 28 79 80 07 00 +79 90 0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B +2C 15 B0 12 3E 41 2A 17 E6 3F 9F 4F 04 00 02 00 +AF 4F 04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D +06 24 32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 +9F 4F 02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 +BF E3 02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 +32 B0 00 02 01 20 2F 53 30 4D 7E 42 04 48 45 52 +45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 40 +01 2C 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F +30 4D 46 43 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F +30 4D 08 44 07 45 58 45 43 55 54 45 0A 4E 3E 4F +00 4A 10 47 87 4C 49 54 45 52 41 4C 82 93 BE 1D +0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 76 44 00 00 +8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 +19 4A 02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 62 44 +05 43 4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E +FF FF 30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 +C4 1D 30 4D 85 12 20 00 87 12 94 47 A4 47 E2 44 +B2 47 3D 40 BA 47 CC 22 82 3E BC 47 0A 4E 3E 4F +3D 40 D2 47 23 27 3D 40 AC 47 1A E2 BE 1D A1 27 +B5 23 D4 47 3E 4F 3D 40 AC 47 B8 23 DE 53 00 00 +68 4E 08 5E F8 40 3F 00 00 00 3D 40 CC 4A CB 3F +34 47 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D +3C 49 3B 49 3A 49 3D 15 B0 12 2A 40 A8 47 10 48 +B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D +85 12 BE 1D 82 43 08 18 31 40 E0 1C B2 40 00 1C +00 1C 82 43 BE 1D 30 4D 80 47 04 42 4F 4F 54 00 +82 93 08 18 1D 24 E2 B2 60 02 1A 20 2F 83 8F 4E +00 00 1E 42 08 18 B0 12 2A 40 24 44 24 48 80 44 +0F 4C 4F 41 44 22 20 42 4F 4F 54 2E 34 54 48 22 +3C 42 8E 48 08 41 04 51 55 49 54 00 30 40 80 48 +B0 12 2A 40 24 48 66 44 EE 43 A4 47 E0 43 A8 47 +A4 40 0C 41 80 44 0C 73 74 61 63 6B 20 65 6D 70 +74 79 21 00 E6 48 76 44 30 FF 02 47 26 41 80 44 +0A 46 52 41 4D 20 66 75 6C 6C 21 00 E6 48 3C 42 +86 48 24 47 05 41 42 4F 52 54 3F 40 80 1C D6 3F +C4 48 86 41 42 4F 52 54 22 00 87 12 9A 44 76 44 +E6 48 12 47 2A 40 8F 93 02 00 03 20 2F 52 3E 4F +30 4D B0 12 EC 4E B0 12 B6 42 92 C3 DC 05 38 40 +A0 AA 39 42 03 43 19 83 FD 23 18 83 FA 23 92 B3 +DC 05 F3 23 87 12 60 4E 76 44 DE 1D EA 40 0E 44 +80 44 04 1B 5B 37 6D 00 38 44 58 40 40 42 40 49 +66 44 80 44 05 6C 69 6E 65 3A 38 44 D0 40 24 42 +38 44 80 44 04 1B 5B 30 6D 00 38 44 CA 48 00 00 +83 5B 27 5D 87 12 66 49 76 44 76 44 12 47 12 47 +2A 40 4A 45 01 27 87 12 A4 47 E2 44 50 45 40 42 +74 49 2A 40 DC 47 32 41 81 5C 92 42 C0 1D C4 1D +30 4D 50 49 81 5B 82 43 BE 1D 30 4D 78 49 01 5D +B2 43 BE 1D 30 4D BE 4F 02 00 3E 4F 30 4D FC 46 +82 49 53 00 87 12 20 48 EA 40 40 42 B8 49 54 49 +76 44 96 49 12 47 2A 40 66 49 96 49 2A 40 A0 49 +09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 1D FA D0 +80 00 00 00 30 4D 76 48 88 50 4F 53 54 50 4F 4E +45 00 87 12 A4 47 E2 44 50 45 58 40 40 42 74 49 +0C 41 40 42 02 4A 76 44 76 44 12 47 12 47 76 44 +12 47 12 47 2A 40 84 49 81 3B 82 93 BE 1D B5 27 +87 12 76 44 2A 40 12 47 A0 4A 86 49 2A 40 08 4A +07 3A 4E 4F 4E 41 4D 45 30 12 46 4A 2F 83 8F 4E +00 00 1E 42 C6 1D 1E B3 0E 63 0A 4E 39 40 00 02 +38 40 02 02 21 3C BA 40 87 12 FC FF A2 83 C6 1D +B2 43 BE 1D 30 4D 20 4A 01 3A 30 12 46 4A 92 B3 +C6 1D A2 63 C6 1D 87 12 A4 47 E2 44 6E 4A 3D 41 +08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E +3E F0 1E 00 09 5E 3E 4F 82 48 B6 1D 82 49 B8 1D +82 4A BA 1D 82 4F BC 1D 2A 52 82 4A C6 1D 30 41 +82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D A8 49 +FE FF 89 48 00 00 30 4D 87 12 80 44 0F 73 74 61 +63 6B 20 6D 69 73 6D 61 74 63 68 21 F2 48 F2 47 +05 44 45 46 45 52 B0 12 5E 4A BA 40 30 40 FC FF +BA 40 54 4A FE FF E3 3F 3A 48 06 43 52 45 41 54 +45 00 B0 12 5E 4A BA 40 85 12 FC FF 8A 4A FE FF +D6 3F D0 4A 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 +84 12 00 00 8A 4D 02 00 3D 41 30 4D B0 45 05 3E +42 4F 44 59 2E 52 30 4D EA 4A 04 43 4F 44 45 00 +B0 12 5E 4A 82 43 D8 5F A2 82 C6 1D 87 12 CE 4D +A0 4D 2A 40 2A 4B 07 43 4F 44 45 4E 4E 4D B0 12 +2C 4A F0 3F 00 00 07 45 4E 44 43 4F 44 45 87 12 +E8 4D A0 4A 2A 40 D2 48 03 41 53 4D B2 40 A4 4D +DA 1D DE 3F 56 4B 06 45 4E 44 41 53 4D 00 87 12 +5E 4B 12 4E 2A 40 00 00 05 43 4F 4C 4F 4E 1A 42 +C6 1D BA 40 87 12 00 00 A2 53 C6 1D B2 43 BE 1D +30 40 E8 4D 00 00 05 4C 4F 32 48 49 1A 42 C6 1D +BA 40 B0 12 00 00 BA 40 2A 40 02 00 A2 52 C6 1D +ED 3F C0 49 85 48 49 32 4C 4F 87 12 02 47 F4 4B +12 47 86 49 CE 4D A0 4D 2A 40 C4 4B 82 49 46 00 +2F 83 8F 4E 00 00 1E 42 C6 1D A2 52 C6 1D BE 40 +40 42 00 00 2E 53 30 4D 04 4B 84 45 4C 53 45 00 +A2 52 C6 1D 1A 42 C6 1D BA 40 3C 42 FC FF 8E 4A +00 00 2A 83 0E 4A 30 4D 32 44 84 54 48 45 4E 00 +9E 42 C6 1D 00 00 3E 4F 30 4D 46 4B 85 42 45 47 +49 4E 30 40 02 47 1A 4C 85 55 4E 54 49 4C 39 40 +40 42 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E +FE FF 3E 4F 30 4D 68 4B 85 41 47 41 49 4E 39 40 +3C 42 EF 3F DC 44 85 57 48 49 4C 45 87 12 E0 4B +76 40 2A 40 96 44 86 52 45 50 45 41 54 00 87 12 +5E 4C 20 4C 2A 40 FA 4B 82 44 4F 00 2F 83 8F 4E +00 00 A2 53 C6 1D 1E 42 C6 1D BE 40 54 42 FE FF +A2 53 00 1C 1A 42 00 1C 8A 43 00 00 30 4D 44 47 +84 4C 4F 4F 50 00 39 40 76 42 A2 52 C6 1D 1A 42 +C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 00 1C A2 83 +00 1C 2E 4E 0E 93 03 24 8E 4A 00 00 F6 3F 3E 4F +30 4D 90 42 85 2B 4C 4F 4F 50 39 40 64 42 E5 3F +B0 4C 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F +0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 +1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 E8 49 +00 00 1A 83 FA 23 30 4D 66 4C 0A 56 4F 43 41 42 +55 4C 41 52 59 00 87 12 F2 4A 76 44 10 00 76 44 +00 00 54 42 76 44 00 00 12 47 76 42 44 4D 02 47 +76 44 C8 1D 34 40 EA 40 12 47 F2 40 0A 4B 76 44 +CA 1D F2 40 2A 40 64 49 05 46 4F 52 54 48 84 12 +5E 4D C8 4D DA 63 CE 63 68 4D DC 4B E4 4C E8 63 +F8 4D 84 4E 8E 65 1E 69 40 68 00 00 CA 52 8E 49 +1E 4B 00 00 58 4C 09 41 53 53 45 4D 42 4C 45 52 +84 12 5E 4D A2 5E 3A 5E 9E 5D 62 59 06 58 00 00 +66 5C 00 00 C8 5F DC 5F 5E 58 9C 58 6E 5E 00 00 +00 00 3E 59 92 4D 96 4D 04 41 4C 53 4F 00 3A 40 +0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F D8 49 08 50 +52 45 56 49 4F 55 53 00 3A 40 0E 00 39 40 CC 1D +38 40 CA 1D 8A 3F C6 44 04 4F 4E 4C 59 00 82 43 +CC 1D 30 4D 88 4C 0B 44 45 46 49 4E 49 54 49 4F +4E 53 92 42 CA 1D DA 1D 30 4D 6E 4D FE 4D 12 4E +22 4E 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D 3D 40 +10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 FC 2B +89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F +3D 41 30 4D DE 4D 09 50 57 52 5F 53 54 41 54 45 +84 12 1A 4E C4 4D 7A 69 76 4C 09 52 53 54 5F 53 +54 41 54 45 92 42 0E 18 64 4E 92 42 0C 18 66 4E +EF 3F 56 4E 08 50 57 52 5F 48 45 52 45 00 92 42 +C8 1D 64 4E 92 42 C6 1D 66 4E 30 4D 6A 4E 08 52 +53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 92 42 +C6 1D 0C 18 EC 3F 2A 4D 04 57 49 50 45 00 39 40 +10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 42 DE 42 +B2 40 4A 4F 48 4F B2 40 80 48 7E 48 B2 40 C4 4D +0E 18 B2 40 7A 69 0C 18 30 12 74 4E B2 40 E4 43 +E2 43 B2 40 6A 44 68 44 B2 40 98 42 96 42 B2 40 +52 43 50 43 B2 40 3C 1D EC 43 1B 42 32 20 0B 93 +04 24 CB 43 02 00 2B 4B FA 3F B2 40 18 00 0A 18 +37 40 1A 40 36 40 92 40 35 40 0E 40 34 40 00 40 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 B8 4E +04 57 41 52 4D 00 30 40 4A 4F 3D 40 98 50 92 C3 +30 01 1E 42 08 18 0E 93 9E 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 E2 B2 60 02 8A 20 +39 42 B0 12 9E 60 D2 C3 23 02 2C 42 B2 40 95 00 +14 20 B2 40 00 40 18 20 B0 12 14 60 02 24 30 40 +3A 61 B0 12 9C 60 7A 93 FC 23 B2 40 87 AA 14 20 +92 43 16 20 B2 40 00 48 18 20 B0 12 14 60 29 42 +B0 12 9E 60 92 43 14 20 82 43 16 20 78 43 3C 42 +B2 40 00 77 18 20 B0 12 14 60 B2 40 40 69 18 20 +B0 12 5A 60 03 24 58 83 F3 23 D9 3F 0C 5C A2 43 +16 20 B2 40 00 50 18 20 B0 12 5A 60 D0 23 92 D3 +40 06 82 43 46 06 92 C3 40 06 B0 12 C4 60 38 40 +00 1E 92 48 C6 01 04 20 92 48 C8 01 06 20 5A 48 +C2 01 92 43 02 20 7A 80 06 00 0F 24 7A 82 0D 24 +A2 43 02 20 6A 53 09 24 5A 53 07 24 6A 52 05 24 +3A 50 0B 20 0C 4A 30 40 40 61 B0 12 C4 60 D2 48 +0D 00 12 20 19 48 0E 00 82 49 08 20 1A 48 16 00 +0A 93 02 20 1A 48 24 00 82 4A 0A 20 09 5A 82 49 +0C 20 09 5A A2 93 02 20 04 24 82 49 0E 20 39 50 +20 00 19 82 12 20 19 82 12 20 82 49 10 20 92 42 +02 20 2C 20 3E 90 0A 00 1A 27 3E 90 16 00 17 2F +2E 93 E6 26 EF 2E 30 4D 80 44 06 0D 1B 5B 37 6D +23 00 38 44 34 42 80 44 19 46 61 73 74 46 6F 72 +74 68 20 C2 A9 4A 2E 4D 2E 54 68 6F 6F 72 65 6E +73 20 38 44 76 44 30 FF 02 47 B8 40 24 42 80 44 +0A 62 79 74 65 73 20 66 72 65 65 00 3C 42 40 49 +2C 4C 04 43 4F 4C 44 00 92 B3 CA 05 FD 23 B2 40 +04 A5 20 01 98 50 B2 40 88 5A 5C 01 B2 D3 06 02 +B2 40 FC FF 02 02 B2 43 26 02 B2 D3 22 02 E2 D2 +25 02 B2 43 42 02 B2 D3 46 02 B2 43 62 02 B2 D3 +66 02 F2 43 26 03 F2 D3 22 03 F2 40 A5 00 41 01 +F2 40 10 00 40 01 D2 43 41 01 F2 40 A5 00 61 01 +B2 40 48 00 62 01 82 43 66 01 39 40 00 01 B2 40 +33 00 64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 +59 14 18 83 FE 23 19 83 FA 23 F2 D0 10 00 2A 03 +F2 40 A5 00 A1 04 F2 C0 40 00 A2 04 B2 42 B0 01 +39 40 00 10 29 83 89 43 00 1C FC 23 39 40 4C 00 +29 83 B9 40 F6 50 B4 FF FB 23 B2 40 84 43 F0 FF +B2 40 81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 +C8 05 92 C3 C0 05 92 D3 DA 05 B2 40 81 A9 40 06 +B2 40 30 00 46 06 D2 D3 25 02 B2 D0 C0 04 0C 02 +92 C3 40 06 3F 40 80 1C 31 40 E0 1C 30 12 46 4F +9C 3E E2 50 07 43 4F 4D 50 41 52 45 0C 4E 38 4F +3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 +07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D +1E 43 30 4D 58 4A 86 5B 54 48 45 4E 5D 00 30 4D +16 52 86 5B 45 4C 53 45 5D 00 87 12 76 44 00 00 +C6 40 A4 47 E2 44 86 47 34 40 40 42 8C 52 44 40 +80 44 06 5B 54 48 45 4E 5D 00 EC 51 4A 42 5C 52 +5A 44 D0 40 58 40 4A 42 32 52 2A 40 44 40 80 44 +06 5B 45 4C 53 45 5D 00 EC 51 4A 42 7A 52 5A 44 +D0 40 58 40 4A 42 30 52 2A 40 80 44 04 5B 49 46 +5D 00 EC 51 4A 42 32 52 3C 42 30 52 5A 44 80 44 +05 0D 0A 6B 6F 20 38 44 EE 43 94 47 3C 42 32 52 +22 52 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D +A2 52 89 5B 44 45 46 49 4E 45 44 5D 87 12 A4 47 +E2 44 50 45 6A 40 2A 40 B2 52 8B 5B 55 4E 44 45 +46 49 4E 45 44 5D 87 12 A4 47 E2 44 50 45 6A 40 +00 41 2A 40 E6 52 3D 41 B2 4E 0E 18 A2 4E 0C 18 +3E 4F 30 40 74 4E F2 4C 06 4D 41 52 4B 45 52 00 +B0 12 5E 4A BA 40 84 12 FC FF BA 40 E4 52 FE FF +9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D +30 40 A6 4A 1C 15 B0 12 2A 40 E2 44 50 45 4A 42 +3A 53 0C 46 40 42 74 49 54 53 3C 53 39 4E 39 80 +86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 +01 24 2E 82 1B 17 30 41 32 B0 00 02 01 24 3E 4F +30 41 3E 40 28 00 B0 12 24 53 B0 12 58 53 19 42 +C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 +12 12 C4 1D 92 53 C4 1D B0 12 2A 40 E2 44 0C 46 +40 42 A0 53 96 53 21 53 3E 90 10 00 81 2D DA 2B +A2 53 B2 41 C4 1D D6 3F 87 12 A4 47 D6 44 B0 53 +0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 +23 00 29 20 92 53 C4 1D B0 12 24 53 B0 12 58 53 +3C 40 00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 +3C 40 20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 +3C 40 30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 +3C 40 30 00 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 +3E 4F 3D 41 30 4D 7A 90 26 00 09 20 3C 40 10 02 +92 53 C4 1D B0 12 24 53 B0 12 58 53 EB 3F 7A 90 +40 00 16 20 3C 40 20 00 92 53 C4 1D B0 12 7E 53 +0C 20 3C 50 10 00 3E 40 2B 00 B0 12 7E 53 92 92 +C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 0C 5E D8 3F +B0 12 7E 53 FA 23 3C 50 10 00 B0 12 62 53 EF 3F +0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 A4 47 D6 44 +82 54 FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 +82 00 C6 3F B0 12 7E 53 E1 23 3C 50 80 00 B0 12 +62 53 DC 3F D6 42 04 52 45 54 49 00 87 12 76 44 +00 13 12 47 2A 40 76 44 2C 00 A8 53 7A 54 C0 54 +09 4B 2E 4E 0E DC A2 3F A6 4B 03 4D 4F 56 84 12 +B6 54 00 40 CA 54 05 4D 4F 56 2E 42 84 12 B6 54 +40 40 00 00 03 41 44 44 84 12 B6 54 00 50 E4 54 +05 41 44 44 2E 42 84 12 B6 54 40 50 F0 54 04 41 +44 44 43 00 84 12 B6 54 00 60 FE 54 06 41 44 44 +43 2E 42 00 84 12 B6 54 40 60 A6 54 04 53 55 42 +43 00 84 12 B6 54 00 70 1C 55 06 53 55 42 43 2E +42 00 84 12 B6 54 40 70 2A 55 03 53 55 42 84 12 +B6 54 00 80 3A 55 05 53 55 42 2E 42 84 12 B6 54 +40 80 88 4B 03 43 4D 50 84 12 B6 54 00 90 54 55 +05 43 4D 50 2E 42 84 12 B6 54 40 90 76 4B 04 44 +41 44 44 00 84 12 B6 54 00 A0 6E 55 06 44 41 44 +44 2E 42 00 84 12 B6 54 40 A0 60 55 03 42 49 54 +84 12 B6 54 00 B0 8C 55 05 42 49 54 2E 42 84 12 +B6 54 40 B0 98 55 03 42 49 43 84 12 B6 54 00 C0 +A6 55 05 42 49 43 2E 42 84 12 B6 54 40 C0 B2 55 +03 42 49 53 84 12 B6 54 00 D0 C0 55 05 42 49 53 +2E 42 84 12 B6 54 40 D0 00 00 03 58 4F 52 84 12 +B6 54 00 E0 DA 55 05 58 4F 52 2E 42 84 12 B6 54 +40 E0 0C 55 03 41 4E 44 84 12 B6 54 00 F0 F4 55 +05 41 4E 44 2E 42 84 12 B6 54 40 F0 A4 47 A8 53 +12 56 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA +4F 3F 46 55 03 52 52 43 84 12 0C 56 00 10 24 56 +05 52 52 43 2E 42 84 12 0C 56 40 10 30 56 04 53 +57 50 42 00 84 12 0C 56 80 10 3E 56 03 52 52 41 +84 12 0C 56 00 11 4C 56 05 52 52 41 2E 42 84 12 +0C 56 40 11 58 56 03 53 58 54 84 12 0C 56 80 11 +00 00 04 50 55 53 48 00 84 12 0C 56 00 12 72 56 +06 50 55 53 48 2E 42 00 84 12 0C 56 40 12 CC 55 +04 43 41 4C 4C 00 84 12 0C 56 80 12 1A 53 0E 4A +87 12 34 42 80 44 0D 6F 75 74 20 6F 66 20 62 6F +75 6E 64 73 F2 48 A4 47 D6 44 BC 56 92 53 C4 1D +3E 40 2C 00 B0 12 2A 40 E2 44 0C 46 40 42 74 49 +70 54 D4 56 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E +0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 +D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F +66 56 06 52 52 43 4D 2E 41 00 84 12 B6 56 40 00 +02 57 04 52 52 43 4D 00 84 12 B6 56 50 00 12 57 +06 52 52 41 4D 2E 41 00 84 12 B6 56 40 01 20 57 +04 52 52 41 4D 00 84 12 B6 56 50 01 30 57 06 52 +4C 41 4D 2E 41 00 84 12 B6 56 40 02 3E 57 04 52 +4C 41 4D 00 84 12 B6 56 50 02 4E 57 06 52 52 55 +4D 2E 41 00 84 12 B6 56 40 03 5C 57 04 52 52 55 +4D 00 84 12 B6 56 50 03 80 56 07 50 55 53 48 4D +2E 41 84 12 B6 56 00 14 7A 57 05 50 55 53 48 4D +84 12 B6 56 00 15 8A 57 06 50 4F 50 4D 2E 41 00 +84 12 B6 56 00 16 98 57 04 50 4F 50 4D 00 84 12 +B6 56 00 17 6C 57 03 53 3E 3D 85 12 00 38 B6 57 +02 53 3C 00 85 12 00 34 A8 57 03 30 3E 3D 85 12 +00 30 CA 57 02 30 3C 00 85 12 00 30 00 00 02 55 +3C 00 85 12 00 2C DE 57 03 55 3E 3D 85 12 00 28 +D4 57 03 30 3C 3E 85 12 00 24 F2 57 02 30 3D 00 +85 12 00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E +00 00 A2 53 C6 1D 0E 4A 30 4D E8 57 04 54 48 45 +4E 00 1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 +0A 11 3A 90 00 02 33 2F 88 DA 00 00 30 4D 7C 55 +04 45 4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 +A2 53 C6 1D 2F 83 8F 4A 00 00 E3 3F 1C 58 05 55 +4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 +0A 89 0A 11 3A 90 00 FE 12 3B 3A F0 FF 03 08 DA +89 48 00 00 A2 53 C6 1D 30 4D 00 56 05 41 47 41 +49 4E 0A 4E 38 40 00 3C E7 3F 00 00 05 57 48 49 +4C 45 87 12 0A 58 76 40 2A 40 C0 57 06 52 45 50 +45 41 54 00 87 12 92 58 22 58 2A 40 BE 58 3D 41 +08 4E 3E 4F 2A 48 B2 92 C4 1D CD 2F 98 42 C6 1D +00 00 30 4D 90 56 03 42 57 31 84 12 BC 58 00 00 +D6 58 03 42 57 32 84 12 BC 58 00 00 E2 58 03 42 +57 33 84 12 BC 58 00 00 FA 58 3D 41 1A 42 C6 1D +28 4E B2 92 C4 1D 90 2B BA 4F 00 00 A2 53 C6 1D +8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 +F8 58 00 00 1A 59 03 46 57 32 84 12 F8 58 00 00 +26 59 03 46 57 33 84 12 F8 58 00 00 00 00 05 3F +47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 3E B0 +00 10 02 24 3E E0 00 08 87 12 66 49 3C 47 2A 40 +32 59 04 47 4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 +00 3C F2 3F 87 12 A4 47 D6 44 7C 59 69 4E 3E 4F +3C 4F 2C 4C 1B 42 C6 1D A2 53 C6 1D 79 90 52 00 +0A 20 B0 12 7E 53 5E 0E 5E 0E 0E DC 8B 4E 00 00 +0E 4B 3D 41 30 4D 79 90 23 00 0D 20 3C C0 40 00 +92 53 C4 1D A2 53 C6 1D B0 12 24 53 BB 4F 02 00 +3E F0 0F 00 E8 3F 79 90 26 00 03 20 3C E0 E0 00 +EF 3F 3C C0 F0 00 79 90 40 00 12 20 92 53 C4 1D +B0 12 7E 53 D8 23 3C D0 10 00 3E 40 2B 00 B0 12 +7E 53 92 92 C0 1D C4 1D CE 27 92 53 C4 1D CB 3F +3C D0 30 00 A2 53 C6 1D 3E 40 28 00 B0 12 24 53 +BB 4F 02 00 3E 40 29 00 EA 3F 87 12 A4 47 D6 44 +22 5A 3B 4F 2C 4B 69 4E 7E 40 20 00 79 90 52 00 +03 20 B0 12 7E 53 B1 3F 3C C0 F0 00 A2 53 C6 1D +79 90 26 00 09 20 3C D0 60 00 92 53 C4 1D B0 12 +24 53 BB 4F 02 00 A1 3F 3C D0 70 00 3E 40 28 00 +B0 12 24 53 BB 4F 02 00 3E 40 29 00 E2 3F 76 44 +2C 00 74 59 1A 5A 66 40 2A 40 D6 54 04 4D 4F 56 +41 00 84 12 6E 5A C0 00 EE 58 04 43 4D 50 41 00 +84 12 6E 5A D0 00 8C 58 04 41 44 44 41 00 84 12 +6E 5A E0 00 AC 58 04 53 55 42 41 00 84 12 6E 5A +F0 00 8A 5A 05 43 41 4C 4C 41 87 12 A4 47 D6 44 +C2 5A 1B 42 C6 1D A2 53 C6 1D 6E 4E 3C 40 34 01 +7E 90 52 00 0B 20 7E 40 20 00 B0 12 7E 53 5C 0E +0C DE 8B 4C 00 00 3E 4F 3D 41 30 4D 2C 53 7E 90 +40 00 0B 20 92 53 C4 1D 7E 40 20 00 B0 12 7E 53 +EE 23 1C 53 3E 40 2B 00 E8 3F A2 53 C6 1D 7E 90 +23 00 09 20 3C 40 3B 01 92 53 C4 1D B0 12 24 53 +BB 4F 02 00 DC 3F 7E 90 26 00 02 20 2C 53 F4 3F +7E 40 28 00 1C 83 B0 12 24 53 BB 4F 02 00 3E 40 +29 00 CB 3F 87 12 A4 47 D6 44 4C 5B 69 4E 3E 4F +3C 40 00 18 79 90 52 00 05 20 B0 12 7E 53 0E 4C +3D 41 30 4D 82 43 D8 5F 79 90 23 00 0B 20 92 53 +C4 1D B0 12 24 53 2F 53 3E F0 0F 00 5E 0A 5E 0E +0C DE ED 3F 79 90 26 00 F2 27 79 90 40 00 12 20 +92 53 C4 1D B0 12 7E 53 E2 23 3E 40 2B 00 92 53 +C4 1D B0 12 7E 53 92 92 C0 1D C4 1D D8 27 92 53 +C4 1D D5 3F 3E 40 28 00 B0 12 24 53 8F 4E 00 00 +3E 40 29 00 B0 12 7E 53 3E 4F 3E F0 0F 00 0C DE +EA 3F 87 12 A4 47 D6 44 DA 5B 3C 4F 69 4E 3E 40 +20 00 79 90 52 00 BB 27 82 43 D8 5F 79 90 26 00 +08 20 92 53 C4 1D B0 12 24 53 2F 53 3E F0 0F 00 +BF 3F 3E 40 28 00 B0 12 24 53 F7 3F 1B 42 C6 1D +A2 53 C6 1D 0C 4E 3E 4F 1C D2 D8 5F 82 43 D8 5F +3C DE 8B 4C 00 00 B2 41 C4 1D 30 4D 76 44 C4 1D +EA 40 86 40 76 44 2C 00 44 5B D2 5B 0C 5C 3C 42 +B6 54 7C 5A 04 4D 4F 56 58 00 84 12 2C 5C 40 00 +00 40 44 5C 06 4D 4F 56 58 2E 41 00 84 12 2C 5C +00 00 40 40 54 5C 06 4D 4F 56 58 2E 42 00 84 12 +2C 5C 40 00 40 40 98 5A 04 41 44 44 58 00 84 12 +2C 5C 40 00 00 50 78 5C 06 41 44 44 58 2E 41 00 +84 12 2C 5C 00 00 40 50 88 5C 06 41 44 44 58 2E +42 00 84 12 2C 5C 40 00 40 50 9A 5C 05 41 44 44 +43 58 84 12 2C 5C 40 00 00 60 AC 5C 07 41 44 44 +43 58 2E 41 84 12 2C 5C 00 00 40 60 BC 5C 07 41 +44 44 43 58 2E 42 84 12 2C 5C 40 00 40 60 A6 5A +05 53 55 42 43 58 84 12 2C 5C 40 00 00 70 E0 5C +07 53 55 42 43 58 2E 41 84 12 2C 5C 00 00 40 70 +F0 5C 07 53 55 42 43 58 2E 42 84 12 2C 5C 40 00 +40 70 02 5D 04 53 55 42 58 00 84 12 2C 5C 40 00 +00 80 14 5D 06 53 55 42 58 2E 41 00 84 12 2C 5C +00 00 40 80 24 5D 06 53 55 42 58 2E 42 00 84 12 +2C 5C 40 00 40 80 B4 5A 04 43 4D 50 58 00 84 12 +2C 5C 40 00 00 90 48 5D 06 43 4D 50 58 2E 41 00 +84 12 2C 5C 00 00 40 90 58 5D 06 43 4D 50 58 2E +42 00 84 12 2C 5C 40 00 40 90 40 58 05 44 41 44 +44 58 84 12 2C 5C 40 00 00 A0 7C 5D 07 44 41 44 +44 58 2E 41 84 12 2C 5C 00 00 40 A0 8C 5D 07 44 +41 44 44 58 2E 42 84 12 2C 5C 40 00 40 A0 6A 5D +04 42 49 54 58 00 84 12 2C 5C 40 00 00 B0 B0 5D +06 42 49 54 58 2E 41 00 84 12 2C 5C 00 00 40 B0 +C0 5D 06 42 49 54 58 2E 42 00 84 12 2C 5C 40 00 +40 B0 D2 5D 04 42 49 43 58 00 84 12 2C 5C 40 00 +00 C0 E4 5D 06 42 49 43 58 2E 41 00 84 12 2C 5C +00 00 40 C0 F4 5D 06 42 49 43 58 2E 42 00 84 12 +2C 5C 40 00 40 C0 06 5E 04 42 49 53 58 00 84 12 +2C 5C 40 00 00 D0 18 5E 06 42 49 53 58 2E 41 00 +84 12 2C 5C 00 00 40 D0 28 5E 06 42 49 53 58 2E +42 00 84 12 2C 5C 40 00 40 D0 E6 55 04 58 4F 52 +58 00 84 12 2C 5C 40 00 00 E0 4C 5E 06 58 4F 52 +58 2E 41 00 84 12 2C 5C 00 00 40 E0 5C 5E 06 58 +4F 52 58 2E 42 00 84 12 2C 5C 40 00 40 E0 CE 5C +04 41 4E 44 58 00 84 12 2C 5C 40 00 00 F0 80 5E +06 41 4E 44 58 2E 41 00 84 12 2C 5C 00 00 40 F0 +90 5E 06 41 4E 44 58 2E 42 00 84 12 2C 5C 40 00 +40 F0 76 44 C4 1D EA 40 86 40 A4 47 44 5B 0C 5C +3C 42 0C 56 36 5D 04 52 52 43 58 00 84 12 B2 5E +40 00 00 10 C6 5E 06 52 52 43 58 2E 41 00 84 12 +B2 5E 00 00 40 10 D6 5E 06 52 52 43 58 2E 42 00 +84 12 B2 5E 40 00 40 10 E8 5E 04 52 52 55 58 00 +84 12 B2 5E 40 01 00 10 FA 5E 06 52 52 55 58 2E +41 00 84 12 B2 5E 00 01 40 10 0A 5F 06 52 52 55 +58 2E 42 00 84 12 B2 5E 40 01 40 10 1C 5F 05 53 +57 50 42 58 84 12 B2 5E 40 00 80 10 2E 5F 07 53 +57 50 42 58 2E 41 84 12 B2 5E 00 00 80 10 3E 5F +04 52 52 41 58 00 84 12 B2 5E 40 00 00 11 50 5F +06 52 52 41 58 2E 41 00 84 12 B2 5E 00 00 40 11 +60 5F 06 52 52 41 58 2E 42 00 84 12 B2 5E 40 00 +40 11 72 5F 04 53 58 54 58 00 84 12 B2 5E 40 00 +80 11 84 5F 06 53 58 54 58 2E 41 00 84 12 B2 5E +00 00 80 11 FC 57 05 50 55 53 48 58 84 12 B2 5E +40 00 00 12 A6 5F 07 50 55 53 48 58 2E 41 84 12 +B2 5E 00 00 40 12 B6 5F 07 50 55 53 48 58 2E 42 +84 12 B2 5E 40 00 40 12 00 00 94 5F 03 52 50 54 +87 12 A4 47 D6 44 E8 5F 29 4E 7E 40 20 00 79 90 +52 00 06 20 B0 12 7E 53 03 24 3E D0 80 00 05 3C +B0 12 24 53 1E 83 3E F0 0F 00 82 4E D8 5F 3E 4F +3D 41 30 4D 1A 43 25 3C D2 C3 23 02 E2 B2 60 02 +02 24 30 40 E8 50 1A 52 04 20 19 62 06 20 92 43 +14 20 A2 93 02 20 07 24 0A 5A 49 69 82 4A 16 20 +C2 49 18 20 0A 3C C2 4A 15 20 8A 10 C2 4A 16 20 +C2 49 17 20 89 10 C2 49 18 20 B0 12 9C 60 5A 53 +FC 23 39 40 05 00 D2 49 14 20 4E 06 82 93 46 06 +05 24 92 B3 6C 06 FD 27 C2 93 4C 06 59 83 F3 2F +19 83 0B 30 F2 43 4E 06 82 93 46 06 03 24 92 B3 +6C 06 FD 27 5A 92 4C 06 F3 23 30 41 19 43 3A 43 +8A 10 C2 4A 4E 06 82 93 46 06 05 24 92 B3 6C 06 +FD 27 C2 93 4C 06 19 83 F3 23 5A 42 4C 06 30 41 +1A 52 08 20 09 43 1C D3 F2 40 51 00 19 20 B0 12 +18 60 33 20 B0 12 9C 60 6A 53 04 24 FB 23 D9 42 +4C 06 FF 1D F2 43 4E 06 03 43 19 53 39 90 01 02 +F6 23 F2 43 4E 06 3C C0 03 00 D2 D3 23 02 30 41 +09 43 2C D3 F0 40 58 00 11 BF B0 12 18 60 15 20 +3A 40 FE FF 29 43 B0 12 A0 60 D2 49 00 1E 4E 06 +03 43 19 53 39 90 00 02 F8 23 39 40 03 00 B0 12 +9E 60 7A C0 E1 00 6A 92 DE 27 8C 10 1C 52 4C 06 +D2 D3 23 02 87 12 80 44 0B 3C 20 53 44 20 45 72 +72 6F 72 21 56 61 2F 83 8F 4E 00 00 B2 40 10 00 +DC 1D 0E 4C B0 12 2A 40 24 42 F2 48 92 4B 0E 00 +22 20 92 4B 10 00 24 20 5A 42 23 20 58 42 22 20 +92 93 02 20 08 24 59 42 24 20 89 10 0A 59 88 10 +08 58 0A 6A 88 10 08 58 30 41 82 43 1C 20 92 42 +0E 20 1A 20 C2 93 24 20 03 20 92 93 22 20 14 24 +92 42 22 20 D0 04 92 42 24 20 D2 04 92 42 12 20 +C8 04 92 42 E4 04 1A 20 92 42 E6 04 1C 20 92 52 +10 20 1A 20 82 63 1C 20 30 41 92 4B 0E 00 22 20 +92 4B 10 00 24 20 B0 12 9A 61 5A 4B 03 00 82 5A +1A 20 82 63 1C 20 30 41 09 93 07 24 F8 90 20 00 +00 1E 03 20 18 53 19 83 F9 23 30 41 1B 42 32 20 +82 43 1E 20 B2 90 00 02 20 20 A8 20 BB 80 00 02 +12 00 8B 73 14 00 DB 53 03 00 DB 92 12 20 03 00 +11 28 CB 43 03 00 B0 12 6C 61 B0 12 C0 60 8B 43 +10 00 9B 48 00 1E 0E 00 92 93 02 20 03 24 9B 48 +02 1E 10 00 B2 40 00 02 20 20 8B 93 14 00 0B 20 +92 9B 12 00 1E 20 82 2C BB 90 00 02 12 00 03 2C +92 4B 12 00 20 20 B0 12 DA 61 1A 42 1A 20 19 42 +1C 20 21 3F 3C 42 3B 40 38 20 09 43 CB 93 02 00 +10 24 9B 92 24 20 0C 00 04 20 9B 92 22 20 0A 00 +07 24 09 4B 3B 50 1C 00 3B 90 18 21 EF 23 0C 5C +30 41 0C 43 82 4B 32 20 8B 49 00 00 09 93 0A 24 +99 52 C4 1D 16 00 4A 93 05 34 C9 93 02 00 02 34 +5A 59 02 00 CB 4A 02 00 CB 43 03 00 9B 42 1A 20 +04 00 9B 42 1C 20 06 00 18 42 30 20 8B 48 08 00 +9B 48 1A 1E 0A 00 9B 48 14 1E 0C 00 9B 48 1A 1E +0E 00 9B 48 14 1E 10 00 9B 48 1C 1E 12 00 9B 48 +1E 1E 14 00 82 43 1E 20 6A 93 5F 27 C9 37 8B 43 +16 00 7A 93 02 24 07 38 95 3F B2 40 1C 21 EC 43 +B2 40 EA 42 50 43 9B 42 C0 1D 18 00 9B 82 C4 1D +18 00 9B 42 C2 1D 1A 00 9B 52 C4 1D 1A 00 82 3F +CB 43 02 00 2B 4B 82 4B 32 20 0B 93 06 24 92 4B +16 00 1E 20 B0 12 54 62 22 C3 30 41 1B 42 32 20 +0B 93 FB 27 EB 93 02 00 04 20 B0 12 C2 67 B0 12 +8A 67 CB 93 02 00 E4 37 1E 4B 18 00 9F 4B 1A 00 +00 00 31 50 06 00 3D 41 B0 12 50 63 02 24 30 40 +24 44 B2 40 3C 1D EC 43 B2 40 52 43 50 43 30 40 +0E 44 9E 4E 85 52 45 41 44 22 5A 43 19 3C 40 4F +86 57 52 49 54 45 22 00 6A 43 12 3C 06 4E 84 44 +45 4C 22 00 6A 42 0C 3C E4 51 05 43 4C 4F 53 45 +B0 12 6C 63 30 4D F8 52 85 4C 4F 41 44 22 7A 43 +2F 83 8F 4E 00 00 0E 4A 82 93 BE 1D 0A 24 87 12 +76 44 76 44 12 47 12 47 9A 44 76 44 20 64 12 47 +2A 40 87 12 76 44 22 00 E2 44 86 47 1E 64 3D 41 +35 4F 0E 55 82 4E 36 20 1C 43 92 42 2C 20 22 20 +92 42 2E 20 24 20 0E 95 8D 24 F5 90 3A 00 01 00 +01 20 25 53 F5 90 5C 00 00 00 08 20 15 53 92 42 +02 20 22 20 82 43 24 20 0E 95 70 24 82 45 34 20 +B0 12 9A 61 34 40 20 00 A2 93 02 20 04 24 92 92 +22 20 02 20 02 24 14 42 12 20 B0 12 7A 62 2C 43 +0A 43 08 4A 58 0E 08 58 82 48 30 20 C8 93 00 1E +61 24 39 42 F8 95 00 1E 04 20 18 53 19 83 FA 23 +15 53 F5 90 2E 00 FF FF 19 24 39 50 03 00 B0 12 +F8 61 06 20 F5 90 5C 00 FF FF 29 24 0E 95 27 28 +15 42 34 20 1A 53 3A 90 10 00 DB 23 92 53 1A 20 +82 63 1C 20 14 83 D1 23 2C 42 3C 3C F5 90 2E 00 +FE FF EE 27 B0 12 F8 61 EB 23 39 40 03 00 F8 95 +00 1E 04 20 18 53 19 83 FA 23 09 3C 0E 95 E0 2F +F5 90 5C 00 FF FF DC 23 B0 12 F8 61 D9 23 18 42 +30 20 92 48 1A 1E 22 20 92 48 14 1E 24 20 F8 B0 +10 00 0B 1E 14 24 82 93 24 20 06 20 82 93 22 20 +03 20 92 42 02 20 22 20 0E 95 8E 2F 92 42 22 20 +2C 20 92 42 24 20 2E 20 8F 43 00 00 03 3C 2A 4F +B0 12 84 62 34 40 00 40 35 40 0E 40 3A 4F 3E 4F +0A 93 04 24 7A 93 0D 20 0C 93 01 20 30 4D 87 12 +80 44 0B 3C 20 4F 70 65 6E 45 72 72 6F 72 3C 42 +54 61 1A 93 B6 20 0C 93 F2 23 30 4D B4 63 04 52 +45 41 44 00 2F 83 8F 4E 00 00 1E 42 32 20 B0 12 +0C 62 1E 82 32 20 30 4D 2C 43 12 12 2A 20 18 42 +02 20 08 58 2A 41 82 9A 0A 20 A1 24 B0 12 C0 60 +09 43 28 93 03 24 89 93 02 1E 03 20 89 93 00 1E +07 24 09 58 39 90 00 02 F4 23 91 53 00 00 EA 3F +0C 43 6A 41 B9 43 00 1E 28 93 0F 24 B9 40 FF 0F +02 1E 09 11 8A 10 09 5A 5A 41 01 00 0A 11 09 10 +82 4A 28 20 82 49 26 20 07 3C 09 11 C2 49 26 20 +C2 4A 27 20 82 43 28 20 3A 41 82 4A 2A 20 30 41 +0A 12 1A 52 08 20 B0 12 00 61 3A 41 1A 52 0C 20 +30 40 00 61 F2 B0 40 00 A2 04 29 20 F2 B0 10 00 +A2 04 FC 27 5A 42 B0 04 4A 11 59 42 B4 04 F2 40 +20 00 C0 04 D2 42 B1 04 C8 04 1A 52 E4 04 D2 42 +B5 04 C8 04 19 52 E4 04 D2 42 B2 04 C0 04 B2 40 +00 08 C8 04 1A 52 E4 04 92 42 B6 04 C0 04 B2 80 +BC 07 C0 04 B2 40 00 02 C8 04 19 52 E4 04 30 41 +22 2A 2B 2C 2F 3A 3B 3C 3D 3E 3F 5B 5C 5D 7C 2E +29 92 06 38 39 80 03 00 B0 12 E0 66 39 40 03 00 +7A 4B C8 4A 00 1E 82 9B 36 20 12 28 0D 12 3D 40 +0F 00 3C 40 90 66 7A 9C F3 27 1D 83 FC 23 3D 41 +6A 9C E6 27 3A 80 21 00 EB 3B 18 53 19 83 E8 23 +09 93 06 24 F8 40 20 00 00 1E 18 53 19 83 FA 23 +30 41 2A 93 D8 20 2C 93 0D 24 0C 93 A7 24 87 12 +80 44 0C 3C 20 57 72 69 74 65 45 72 72 6F 72 00 +3C 42 54 61 B0 12 A8 65 92 42 26 20 22 20 92 42 +28 20 24 20 B0 12 20 66 B0 12 7A 62 18 42 30 20 +F8 40 20 00 0B 1E B0 12 34 66 88 43 0C 1E 88 4A +0E 1E 88 49 10 1E 88 49 12 1E 98 42 24 20 14 1E +98 42 22 20 1A 1E 88 43 1C 1E 88 43 1E 1E 1C 43 +1B 42 34 20 82 9B 36 20 CA 27 FB 90 2E 00 00 00 +C6 27 39 40 0B 00 B0 12 B0 66 B0 12 CC 67 2A 43 +B0 12 84 62 0C 93 BB 23 30 4D 1A 4B 04 00 19 4B +06 00 B0 12 C6 60 B0 12 34 66 18 4B 08 00 88 49 +12 1E 88 4A 16 1E 88 49 18 1E 98 4B 12 00 1C 1E +98 4B 14 00 1E 1E 1A 4B 04 00 19 4B 06 00 30 40 +02 61 9B 52 1E 20 12 00 8B 63 14 00 1A 42 1A 20 +19 42 1C 20 30 40 02 61 B2 40 00 02 1E 20 1B 42 +32 20 B0 12 C2 67 82 43 1E 20 DB 53 03 00 DB 92 +12 20 03 00 22 20 CB 43 03 00 B0 12 6C 61 08 12 +0A 12 B0 12 A8 65 2A 91 05 24 B0 12 20 66 2A 41 +B0 12 C0 60 3A 41 38 41 98 42 26 20 00 1E 92 93 +02 20 03 24 98 42 28 20 02 1E B0 12 20 66 9B 42 +26 20 0E 00 9B 42 28 20 10 00 30 40 DA 61 C0 63 +05 57 52 49 54 45 B0 12 D8 67 30 4D 58 4B 13 00 +59 4B 14 00 89 10 09 58 58 4B 15 00 5B 42 12 20 +0A 43 3C 42 08 11 09 10 4A 10 1C 83 0B 11 FA 2B +0A 11 1C 83 FD 37 1B 42 32 20 19 5B 0A 00 18 6B +0C 00 8B 49 0E 00 8B 48 10 00 CB 4A 03 00 1A 4B +12 00 BB C0 FF 01 12 00 3A F0 FF 01 82 4A 1E 20 +B0 12 76 62 30 4D 0C 93 38 20 38 90 E0 01 03 2C +C8 93 20 1E 02 24 7C 40 E5 00 C8 4C 00 1E B0 12 +CC 67 B0 12 78 61 82 4A 2A 20 0B 4A B0 12 C0 60 +1A 48 00 1E 88 43 00 1E 92 93 02 20 09 24 19 48 +02 1E 88 43 02 1E 39 F0 FF 0F 39 90 FF 0F 02 20 +3A 93 0E 24 82 4A 22 20 82 49 24 20 B0 12 78 61 +0B 9A E6 27 0A 12 0A 4B B0 12 20 66 3A 41 DD 3F +0A 4B B0 12 20 66 B0 12 6C 63 30 4D 38 4C 08 54 +45 52 4D 32 53 44 22 00 87 12 D4 63 76 44 02 00 +02 47 86 47 20 64 38 69 3D 41 92 C3 DC 05 08 43 +B0 12 B6 42 92 B3 DC 05 FD 27 59 42 CC 05 69 92 +0D 24 C8 49 00 1E 18 53 38 90 FF 01 F3 2B 03 24 +B0 12 D8 67 EC 3F B0 12 C8 42 EC 3F B0 12 C8 42 +82 48 1E 20 B0 12 6C 63 30 4D +@FFFE +F6 50 +q diff --git a/binaries/MSP_EXP430FR5994_16MHz.txt b/binaries/MSP_EXP430FR5994_16MHz.txt index f1caca3..5dc8192 100644 --- a/binaries/MSP_EXP430FR5994_16MHz.txt +++ b/binaries/MSP_EXP430FR5994_16MHz.txt @@ -1,710 +1,671 @@ @1800 -10 00 08 00 A1 F7 80 3E 05 00 18 00 EE 6B 46 4F -2C 01 FF B3 5A 44 6C 44 0C 63 48 63 +10 00 08 00 A1 F7 80 3E 05 00 18 00 7A 69 C4 4D +2D 01 FF B3 B6 42 C8 42 C6 60 02 61 @4000 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 40 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 40 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 40 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 40 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 40 02 3E 52 00 -0E 12 3E 4F 30 4D 96 40 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 40 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 40 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 40 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 41 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 40 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 41 02 31 2D 00 -1E 83 30 4D D8 40 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 41 -02 30 3D 00 1E 83 0E 7E 30 4D 60 41 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 41 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 40 01 3E 3E 8F F4 3B EB 37 0E 41 02 42 4C 00 -85 12 20 00 AC 41 04 42 41 53 45 00 85 12 DC 1D -C8 40 05 53 54 41 54 45 85 12 BE 1D 96 41 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 41 06 55 4D 2F -4D 4F 44 00 30 12 62 40 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 40 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 41 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 41 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 42 -02 23 53 00 87 12 32 42 6A 42 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 42 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 41 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 41 -02 44 2E 00 87 12 D2 41 44 40 B0 40 4C 41 64 42 -BC 40 A2 42 7E 42 7C 45 44 45 2A 40 DC 41 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 40 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 42 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 40 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 42 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 42 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 42 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 41 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 43 03 4B 45 59 30 40 A0 43 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 5A 44 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 6C 44 30 4D 0D 12 -3D 40 DE 43 1B 42 32 20 9B 42 1E 20 16 00 3A 4F -09 4E 0E 43 1C 42 1E 20 1B 42 20 20 02 3C E0 43 -2D 83 0C 9B 14 2C 58 4C 00 1E 1C 53 78 90 20 00 -07 2C 78 90 0A 00 F5 23 82 4C 1E 20 3D 41 30 4D -0E 99 56 24 CA 48 00 00 1A 53 1E 53 51 3C 1A 15 -B0 12 50 64 19 17 DE 3F 00 43 06 41 43 43 45 50 -54 00 30 40 26 44 3C 40 C8 44 3B 40 92 44 2D 15 -0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 -BC 44 92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 -04 20 21 53 39 40 80 44 4D 15 A2 B3 DC 05 FD 27 -B2 40 11 00 CE 05 E2 C2 23 02 30 41 B2 40 13 00 -CE 05 E2 D2 23 02 30 41 00 00 05 53 4C 45 45 50 -30 40 84 44 12 D2 0A 18 FB 3F 21 52 3A 17 58 42 -CC 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 2E 9F -0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 1E 53 -A2 B3 DC 05 FD 27 82 48 CE 05 30 4D BE 44 2D 83 -92 B3 DC 05 E4 23 FC 27 82 93 DE 1D 02 24 92 53 -DE 1D 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D B0 42 -04 45 4D 49 54 00 30 40 EA 44 08 4E 3E 4F E0 3F -10 43 03 43 49 42 85 12 3C 1D 3F 80 06 00 8F 4E -04 00 3E 40 54 00 9F 42 F8 44 00 00 AF 4F 02 00 -88 3F E0 44 04 45 43 48 4F 00 B2 40 82 48 B6 44 -82 43 DE 1D 30 4D E0 42 06 4E 4F 45 43 48 4F 00 -B2 40 30 4D B6 44 92 43 DE 1D 30 4D 9C 42 05 53 -50 41 43 45 2F 83 8F 4E 00 00 3E 40 20 00 CB 3F -3E 45 06 53 50 41 43 45 53 00 0E 93 09 24 0D 12 -3D 40 66 45 EF 3F 68 45 2D 83 1E 83 EB 23 3D 41 -3E 4F 30 4D 66 43 04 54 59 50 45 00 0E 93 0F 24 -1E 15 3D 40 92 45 28 4F 7E 48 8F 48 00 00 2F 83 -AA 3F 94 45 2D 83 91 83 02 00 F5 23 1D 17 2F 53 -3E 4F 30 4D F2 44 02 43 52 00 30 40 AE 45 87 12 -BA 45 02 0D 0A 00 7C 45 2A 40 2F 82 8F 4E 02 00 -7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 30 4D 52 45 -82 53 22 00 82 43 B4 1D 87 12 34 40 BA 45 30 48 -34 40 22 00 1E 46 E8 45 3D 41 B2 40 20 00 B4 1D -6E 4E 1E 83 82 5E C6 1D 3E 4F 92 B3 C6 1D A2 63 -C6 1D 30 4D 28 45 82 2E 22 00 87 12 D4 45 34 40 -7C 45 30 48 2A 40 00 00 04 57 4F 52 44 00 3C 40 -C0 1D 39 4C 3A 4C 09 5A 3A 5C 28 4C 09 9A 19 24 -7E 9A FC 27 1A 83 3B 40 60 00 C8 4C 00 00 09 9A -0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 -7B 00 F3 2F 5C 82 B4 1D F0 3F 1A 82 C2 1D 82 4A -C4 1D 1E 42 C6 1D 08 8E CE 48 00 00 30 4D 00 00 -04 46 49 4E 44 00 2F 83 0C 4E 65 4C 74 40 80 00 -3B 40 CA 1D 3E 4B 0E 93 1E 24 58 4C 01 00 78 F0 -1E 00 0E 58 2E 53 1E 4E FE FF 0E 93 F3 27 09 4E -78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 -1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 -4A 93 01 30 2E 83 8F 4C 00 00 35 40 0E 40 34 40 -00 40 30 4D A2 41 07 3E 4E 55 4D 42 45 52 3C 4F -38 4F 29 4F 2F 82 1B 42 DC 1D 6A 4C 7A 80 30 00 -7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 -0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B -C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 -1E 83 E3 23 8F 4C 00 00 8F 48 02 00 8F 49 04 00 -30 4D 1B 42 DC 1D 0C 43 2D 15 3D 40 78 47 09 43 -08 43 3F 82 8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 -2D 00 04 28 CB 23 B1 43 02 00 E1 3F 2B 43 7A 80 -25 00 07 24 3B 52 6A 53 04 24 3B 40 10 00 5A 83 -BC 23 1C 53 1E 83 EA 3F 7A 47 2F 24 2D 83 7A 90 -28 00 CD 27 32 D0 00 02 7A 90 F7 00 C8 27 7A 90 -F5 00 23 20 0A 4E 09 43 8F 49 02 00 5A 83 09 4A -09 5C 69 49 79 80 30 00 79 90 0A 00 05 28 79 80 -07 00 79 90 0A 00 0A 28 09 9B 08 2C 8F 49 00 00 -0E 4B 2C 15 B0 12 E8 41 2A 17 E6 3F 9F 4F 04 00 -02 00 AF 4F 04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B -DC 1D 06 24 32 C0 00 02 3F 50 06 00 0E F3 30 4D -2F 53 9F 4F 02 00 04 00 BF 4F 00 00 3E E3 09 20 -3E E3 BF E3 02 00 BF E3 00 00 9F 53 02 00 8F 63 -00 00 32 B0 00 02 01 20 2F 53 30 4D 14 45 07 45 -58 45 43 55 54 45 0A 4E 3E 4F 00 4A 26 41 01 2C -1A 42 C6 1D A2 53 C6 1D 8A 4E 00 00 3E 4F 30 4D -2E 48 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 -1A 42 C6 1D A2 52 C6 1D BA 40 34 40 00 00 8A 4E -02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A -02 00 8A 4E 02 00 0E 49 EB 3F 30 4D A6 45 05 43 -4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF -30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D -30 4D 87 12 92 48 B0 41 1E 46 AC 48 3D 40 B4 48 -E2 22 5D 3E B6 48 0A 4E 3E 4F 3D 40 CC 48 39 27 -3D 40 A6 48 1A E2 BE 1D B3 27 AD 23 CE 48 3E 4F -3D 40 A6 48 BA 23 DE 53 00 00 68 4E 08 5E F8 40 -3F 00 00 00 3D 40 EC 4B CD 3F 1E 48 08 45 56 41 -4C 55 41 54 45 00 39 40 C0 1D 3C 49 3B 49 3A 49 -3D 15 B0 12 2A 40 A2 48 0A 49 B2 41 C4 1D B2 41 -C2 1D B2 41 C0 1D 3D 41 30 4D 82 43 08 18 31 40 -E0 1C B2 40 00 1C 00 1C 82 43 BE 1D 30 4D 7E 48 -04 42 4F 4F 54 00 82 93 08 18 1D 24 E2 B2 60 02 -1A 20 2F 83 8F 4E 00 00 1E 42 08 18 B0 12 2A 40 -30 45 1A 49 BA 45 0F 4C 4F 41 44 22 20 42 4F 4F -54 2E 34 54 48 22 24 43 82 49 6C 41 04 51 55 49 -54 00 30 40 76 49 B0 12 2A 40 1A 49 AA 45 FA 44 -44 45 A2 48 DE 40 70 41 BA 45 0C 73 74 61 63 6B -20 65 6D 70 74 79 21 00 DA 49 34 40 30 FF F2 42 -8A 41 BA 45 0A 46 52 41 4D 20 66 75 6C 6C 21 00 -DA 49 24 43 7C 49 1A 44 05 41 42 4F 52 54 3F 40 -80 1C D7 3F B8 49 86 41 42 4F 52 54 22 00 87 12 -D4 45 34 40 DA 49 30 48 2A 40 8F 93 02 00 03 20 -2F 52 3E 4F 30 4D B0 12 B2 51 1B 42 32 20 0B 93 -04 24 CB 43 02 00 2B 4B FA 3F B0 12 5A 44 92 C3 -DC 05 38 40 A0 AA 39 42 09 59 03 43 19 83 FD 23 -18 83 F9 23 92 B3 DC 05 F2 23 87 12 26 51 34 40 -DE 1D F2 40 1A 45 BA 45 04 1B 5B 37 6D 00 7C 45 -54 40 28 43 46 4A AA 45 BA 45 05 6C 69 6E 65 3A -7C 45 40 41 D2 42 7C 45 BA 45 04 1B 5B 30 6D 00 -7C 45 BE 49 00 00 83 5B 27 5D 87 12 6C 4A 34 40 -34 40 30 48 30 48 2A 40 70 46 01 27 87 12 B0 41 -1E 46 76 46 28 43 7A 4A 2A 40 D6 48 CE 41 81 5C -92 42 C0 1D C4 1D 30 4D 56 4A 81 5B 82 43 BE 1D -30 4D 7E 4A 01 5D B2 43 BE 1D 30 4D BE 4F 02 00 -3E 4F 30 4D 72 43 82 49 53 00 87 12 C8 41 F2 40 -28 43 BE 4A 5A 4A 34 40 9C 4A 30 48 2A 40 6C 4A -9C 4A 2A 40 A6 4A 09 49 4D 4D 45 44 49 41 54 45 -1A 42 B6 1D FA D0 80 00 00 00 30 4D D0 45 87 52 -45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D 00 00 -A2 53 C6 1D 30 4D 6C 49 88 50 4F 53 54 50 4F 4E -45 00 87 12 B0 41 1E 46 76 46 54 40 28 43 7A 4A -70 41 28 43 22 4B 34 40 34 40 30 48 30 48 34 40 -30 48 30 48 2A 40 8A 4A 81 3B 82 93 BE 1D A8 27 -87 12 34 40 2A 40 30 48 C0 4B 8C 4A 2A 40 28 4B -07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 1E 42 -C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 AC 4B -BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 82 4F -BC 1D 30 4D 40 4B 01 3A 30 12 60 4B 87 12 FA 45 -B0 41 1E 46 86 4B 3D 41 08 4E 7A 4E 5A D3 5A 53 -0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E 3E 4F -BA 40 30 40 00 00 BA 40 72 4B 02 00 82 48 B6 1D -82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D 30 41 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 40 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 40 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 40 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 40 02 3E 52 00 0E 12 3E 4F 30 4D 70 40 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 40 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 40 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 40 +01 21 BE 4F 00 00 3E 4F 30 4D CC 40 02 30 3D 00 +1E 83 0E 7E 30 4D FC 40 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 41 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 40 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 41 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 41 02 23 53 00 87 12 88 41 C0 41 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 41 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 40 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 41 34 40 86 40 D4 40 BA 41 +92 40 F8 41 D4 41 38 44 A4 47 E0 43 2A 40 22 41 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 41 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 42 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 42 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 42 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C2 23 02 30 41 B2 40 13 00 CE 05 E2 D2 +23 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 42 +B0 12 B6 42 12 D2 0A 18 F9 3F 0D 12 3D 40 0A 43 +1B 42 32 20 9B 42 1E 20 16 00 3A 4F 09 4E 0E 43 +1C 42 1E 20 1B 42 20 20 02 3C 0C 43 2D 83 0C 9B +14 2C 58 4C 00 1E 1C 53 78 90 20 00 07 2C 78 90 +0A 00 F5 23 82 4C 1E 20 3D 41 30 4D 0E 99 3D 24 +CA 48 00 00 1A 53 1E 53 38 3C 1A 15 B0 12 0C 62 +19 17 DE 3F F0 40 06 41 43 43 45 50 54 00 30 40 +52 43 3C 40 C2 43 3B 40 8C 43 2D 15 0A 4E 2E 4F +0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 B6 43 92 B3 +DC 05 05 24 18 42 CC 05 38 90 0A 00 9C 23 21 53 +3D 15 AC 3F 21 52 3A 17 58 42 CC 05 48 9C 08 2C +48 9B 9A 27 78 92 11 20 2E 9F 0F 24 1E 83 05 3C +0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 FD 27 +82 48 CE 05 30 4D B8 43 2D 83 92 B3 DC 05 E4 23 +FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 +B2 40 18 00 0A 18 30 4D 9E 40 04 45 4D 49 54 00 +30 40 E4 43 08 4E 3E 4F E0 3F 85 12 3C 1D 3F 80 +06 00 8F 4E 04 00 3E 40 54 00 9F 42 EC 43 00 00 +AF 4F 02 00 A4 3F DA 43 04 45 43 48 4F 00 B2 40 +82 48 B0 43 82 43 DE 1D 30 4D 32 42 06 4E 4F 45 +43 48 4F 00 B2 40 30 4D B0 43 92 43 DE 1D 30 4D +20 42 04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 +4E 44 28 4F 7E 48 8F 48 00 00 2F 83 C9 3F 50 44 +2D 83 91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D +D0 41 02 43 52 00 30 40 6A 44 87 12 80 44 02 0D +0A 00 38 44 2A 40 2F 83 8F 4E 00 00 3E 4D 30 4D +2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 +0D 63 30 4D F2 41 82 53 22 00 82 43 B4 1D 87 12 +76 44 80 44 12 47 76 44 22 00 E2 44 AE 44 B2 40 +20 00 B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 +3E 4F 30 4D 1C 44 82 2E 22 00 87 12 9A 44 76 44 +38 44 12 47 2A 40 48 43 05 3C 00 00 04 57 4F 52 +44 00 48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 +C4 1D 09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 +0E 4A 1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D +3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C +09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 +B4 1D F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D +08 8E CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 +2F 83 0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B +0E 93 1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 +1E 4E FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 +F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 +19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 +8F 4C 00 00 35 40 0E 40 34 40 00 40 30 4D 82 40 +07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 +1B 42 DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 +7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C +82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 +18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C +00 00 8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 +1B 42 DC 1D 0C 43 2D 15 3D 40 56 46 09 43 08 43 +3F 82 8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 +04 28 C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 +07 24 3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 +1C 53 1E 83 EA 3F 58 46 2F 24 2D 83 7A 90 28 00 +CB 27 32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 +23 20 0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C +69 49 79 80 30 00 79 90 0A 00 05 28 79 80 07 00 +79 90 0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B +2C 15 B0 12 3E 41 2A 17 E6 3F 9F 4F 04 00 02 00 +AF 4F 04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D +06 24 32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 +9F 4F 02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 +BF E3 02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 +32 B0 00 02 01 20 2F 53 30 4D 7E 42 04 48 45 52 +45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 40 +01 2C 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F +30 4D 46 43 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F +30 4D 08 44 07 45 58 45 43 55 54 45 0A 4E 3E 4F +00 4A 10 47 87 4C 49 54 45 52 41 4C 82 93 BE 1D +0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 76 44 00 00 +8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 +19 4A 02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 62 44 +05 43 4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E +FF FF 30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 +C4 1D 30 4D 85 12 20 00 87 12 94 47 A4 47 E2 44 +B2 47 3D 40 BA 47 CC 22 82 3E BC 47 0A 4E 3E 4F +3D 40 D2 47 23 27 3D 40 AC 47 1A E2 BE 1D A1 27 +B5 23 D4 47 3E 4F 3D 40 AC 47 B8 23 DE 53 00 00 +68 4E 08 5E F8 40 3F 00 00 00 3D 40 CC 4A CB 3F +34 47 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D +3C 49 3B 49 3A 49 3D 15 B0 12 2A 40 A8 47 10 48 +B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D +85 12 BE 1D 82 43 08 18 31 40 E0 1C B2 40 00 1C +00 1C 82 43 BE 1D 30 4D 80 47 04 42 4F 4F 54 00 +82 93 08 18 1D 24 E2 B2 60 02 1A 20 2F 83 8F 4E +00 00 1E 42 08 18 B0 12 2A 40 24 44 24 48 80 44 +0F 4C 4F 41 44 22 20 42 4F 4F 54 2E 34 54 48 22 +3C 42 8E 48 08 41 04 51 55 49 54 00 30 40 80 48 +B0 12 2A 40 24 48 66 44 EE 43 A4 47 E0 43 A8 47 +A4 40 0C 41 80 44 0C 73 74 61 63 6B 20 65 6D 70 +74 79 21 00 E6 48 76 44 30 FF 02 47 26 41 80 44 +0A 46 52 41 4D 20 66 75 6C 6C 21 00 E6 48 3C 42 +86 48 24 47 05 41 42 4F 52 54 3F 40 80 1C D6 3F +C4 48 86 41 42 4F 52 54 22 00 87 12 9A 44 76 44 +E6 48 12 47 2A 40 8F 93 02 00 03 20 2F 52 3E 4F +30 4D B0 12 EC 4E B0 12 B6 42 92 C3 DC 05 38 40 +A0 AA 39 42 03 43 19 83 FD 23 18 83 FA 23 92 B3 +DC 05 F3 23 87 12 60 4E 76 44 DE 1D EA 40 0E 44 +80 44 04 1B 5B 37 6D 00 38 44 58 40 40 42 40 49 +66 44 80 44 05 6C 69 6E 65 3A 38 44 D0 40 24 42 +38 44 80 44 04 1B 5B 30 6D 00 38 44 CA 48 00 00 +83 5B 27 5D 87 12 66 49 76 44 76 44 12 47 12 47 +2A 40 4A 45 01 27 87 12 A4 47 E2 44 50 45 40 42 +74 49 2A 40 DC 47 32 41 81 5C 92 42 C0 1D C4 1D +30 4D 50 49 81 5B 82 43 BE 1D 30 4D 78 49 01 5D +B2 43 BE 1D 30 4D BE 4F 02 00 3E 4F 30 4D FC 46 +82 49 53 00 87 12 20 48 EA 40 40 42 B8 49 54 49 +76 44 96 49 12 47 2A 40 66 49 96 49 2A 40 A0 49 +09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 1D FA D0 +80 00 00 00 30 4D 76 48 88 50 4F 53 54 50 4F 4E +45 00 87 12 A4 47 E2 44 50 45 58 40 40 42 74 49 +0C 41 40 42 02 4A 76 44 76 44 12 47 12 47 76 44 +12 47 12 47 2A 40 84 49 81 3B 82 93 BE 1D B5 27 +87 12 76 44 2A 40 12 47 A0 4A 86 49 2A 40 08 4A +07 3A 4E 4F 4E 41 4D 45 30 12 46 4A 2F 83 8F 4E +00 00 1E 42 C6 1D 1E B3 0E 63 0A 4E 39 40 00 02 +38 40 02 02 21 3C BA 40 87 12 FC FF A2 83 C6 1D +B2 43 BE 1D 30 4D 20 4A 01 3A 30 12 46 4A 92 B3 +C6 1D A2 63 C6 1D 87 12 A4 47 E2 44 6E 4A 3D 41 +08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E +3E F0 1E 00 09 5E 3E 4F 82 48 B6 1D 82 49 B8 1D +82 4A BA 1D 82 4F BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D A8 49 -FE FF 89 48 00 00 30 4D 87 12 BA 45 0F 73 74 61 -63 6B 20 6D 69 73 6D 61 74 63 68 21 E6 49 18 46 -08 56 41 52 49 41 42 4C 45 00 B0 12 7C 4B BA 40 -86 12 FC FF E4 3F 30 49 08 43 4F 4E 53 54 41 4E -54 00 B0 12 7C 4B BA 40 85 12 FC FF 8A 4E FE FF -3E 4F D5 3F 08 4C 06 43 52 45 41 54 45 00 B0 12 -7C 4B BA 40 85 12 FC FF 8A 4A FE FF C8 3F EC 48 -05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 -8A 4D 02 00 3D 41 30 4D 40 4C 05 44 45 46 45 52 -30 12 CE 4B 8B 3F D6 46 05 3E 42 4F 44 59 2E 52 -30 4D 26 4C 04 43 4F 44 45 00 B0 12 7C 4B 2A 82 -82 4A C6 1D 87 12 6E 4B 50 4F 22 4F 2A 40 74 4C -07 43 4F 44 45 4E 4E 4D 87 12 48 4B 8C 4A 7E 4C -2A 40 00 00 07 45 4E 44 43 4F 44 45 87 12 6A 4F -C0 4B 2A 40 C6 49 03 41 53 4D 92 42 DA 1D EC 1D -B2 40 26 4F DA 1D D9 3F A4 4C 06 45 4E 44 41 53 -4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 4F 4C -4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 C6 1D -B2 43 BE 1D 30 40 6A 4F 00 00 05 4C 4F 32 48 49 -1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 40 02 00 -A2 52 C6 1D ED 3F C6 4A 85 48 49 32 4C 4F 87 12 -F2 42 48 4D 30 48 8C 4A 50 4F 22 4F 2A 40 18 4D -82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D A2 52 -C6 1D BE 40 28 43 00 00 2E 53 30 4D 5A 4C 84 45 -4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 24 43 -FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 76 45 84 54 -48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D 90 4C -85 42 45 47 49 4E 30 40 F2 42 6E 4D 85 55 4E 54 -49 4C 39 40 28 43 A2 52 C6 1D 1A 42 C6 1D 8A 49 -FC FF 8A 4E FE FF 3E 4F 30 4D B6 4C 85 41 47 41 -49 4E 39 40 24 43 EF 3F F0 4B 85 57 48 49 4C 45 -87 12 34 4D 78 40 2A 40 DE 4A 86 52 45 50 45 41 -54 00 87 12 B2 4D 74 4D 2A 40 4E 4D 82 44 4F 00 -2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D BE 40 -3C 43 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 00 00 -30 4D 42 48 84 4C 4F 4F 50 00 39 40 5E 43 A2 52 -C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 -00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A 00 00 -F6 3F 3E 4F 30 4D 98 43 85 2B 4C 4F 4F 50 39 40 -4C 43 E5 3F 04 4E 85 4C 45 41 56 45 1A 42 C6 1D -BA 40 6E 43 00 00 BA 40 24 43 02 00 B2 50 06 00 -C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A 00 00 -30 4D 46 4E 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F -3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 -18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 -E8 49 00 00 1A 83 FA 23 30 4D BA 4D 0A 56 4F 43 -41 42 55 4C 41 52 59 00 87 12 2E 4C 34 40 10 00 -34 40 00 00 3C 43 34 40 00 00 30 48 5E 43 C6 4E -F2 42 34 40 C8 1D 44 40 F2 40 30 48 FA 40 46 4C -34 40 CA 1D FA 40 2A 40 6A 4A 05 46 4F 52 54 48 -84 12 E0 4E 4A 4F 1E 66 12 66 EA 4E 30 4D 38 4E -2C 66 7A 4F 4A 51 9C 6A 92 6B 8E 6A 00 00 88 50 -94 4A 68 4C 00 00 AC 4D 09 41 53 53 45 4D 42 4C -45 52 84 12 E0 4E EC 60 84 60 E8 5F 7A 5B 22 5A -9E 5B B0 5E 00 00 12 62 24 62 7A 5A B8 5A B8 60 -00 00 00 00 AC 5B 14 4F 18 4F 04 41 4C 53 4F 00 -3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F F8 4A -08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 39 40 -CC 1D 38 40 CA 1D 8A 3F 06 46 04 4F 4E 4C 59 00 -82 43 CC 1D 30 4D DC 4D 0B 44 45 46 49 4E 49 54 -49 4F 4E 53 92 42 CA 1D DA 1D 30 4D 80 4D 07 43 -4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B -0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 -FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D 76 4B -86 5B 54 48 45 4E 5D 00 30 4D D0 4F 86 5B 45 4C -53 45 5D 00 87 12 34 40 00 00 36 41 B0 41 1E 46 -84 48 44 40 28 43 4A 50 8A 40 8A 40 BA 45 06 5B -54 48 45 4E 5D 00 A6 4F 32 43 18 50 9E 45 40 41 -54 40 32 43 EC 4F 2A 40 8A 40 8A 40 BA 45 06 5B -45 4C 53 45 5D 00 A6 4F 32 43 38 50 9E 45 40 41 -54 40 32 43 EA 4F 2A 40 BA 45 04 5B 49 46 5D 00 -A6 4F 32 43 EC 4F 24 43 EA 4F 9E 45 BA 45 05 0D -0A 6B 6F 20 7C 45 FA 44 92 48 24 43 EC 4F DC 4F -84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D 60 50 -89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 41 1E 46 -76 46 6C 40 2A 40 70 50 8B 5B 55 4E 44 45 46 49 -4E 45 44 5D 87 12 B0 41 1E 46 76 46 6C 40 64 41 -2A 40 A4 50 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F -44 3C 74 4E 06 4D 41 52 4B 45 52 00 B0 12 7C 4B -BA 40 84 12 FC FF BA 40 A2 50 FE FF 9A 42 C8 1D -00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 C6 4B -F0 4E 80 4F 94 4F E8 50 3A 4E 82 4A C8 1D 2E 4E -82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 18 48 -FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 2A 4A -0A 93 F0 23 3E 4F 3D 41 30 4D 60 4F 09 50 57 52 -5F 53 54 41 54 45 84 12 E0 50 46 4F EE 6B CA 4D -09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 2A 51 -92 42 0C 18 2C 51 EF 3F 1C 51 08 50 57 52 5F 48 -45 52 45 00 92 42 C8 1D 2A 51 92 42 C6 1D 2C 51 -30 4D 30 51 08 52 53 54 5F 48 45 52 45 00 92 42 -C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F AC 4E 04 57 -49 50 45 00 39 40 10 00 29 83 B9 43 80 FF FC 23 -B2 40 84 44 82 44 B2 40 0C 52 0A 52 B2 40 76 49 -74 49 B2 40 46 4F 0E 18 B2 40 EE 6B 0C 18 30 12 -3A 51 B2 40 EA 44 E8 44 B2 40 AE 45 AC 45 B2 40 -A0 43 9E 43 B2 40 26 44 24 44 B2 40 3C 1D F8 44 -B2 40 18 00 0A 18 37 40 1A 40 36 40 BC 40 35 40 -0E 40 34 40 00 40 39 40 10 00 29 83 89 43 E0 1D -FC 23 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 -7E 51 04 57 41 52 4D 00 30 40 0C 52 3D 40 5A 53 -92 C3 30 01 1E 42 08 18 0E 93 9E 24 D2 B3 01 02 -02 20 3E E3 1E 53 F2 D0 03 00 0D 02 E2 B2 60 02 -8A 20 39 42 B0 12 E4 62 D2 C3 23 02 2C 42 B2 40 -95 00 14 20 B2 40 00 40 18 20 B0 12 5A 62 02 24 -30 40 80 63 B0 12 E2 62 7A 93 FC 23 B2 40 87 AA -14 20 92 43 16 20 B2 40 00 48 18 20 B0 12 5A 62 -29 42 B0 12 E4 62 92 43 14 20 82 43 16 20 78 43 -3C 42 B2 40 00 77 18 20 B0 12 5A 62 B2 40 40 69 -18 20 B0 12 A0 62 03 24 58 83 F3 23 D9 3F 0C 5C -A2 43 16 20 B2 40 00 50 18 20 B0 12 A0 62 D0 23 -92 D3 40 06 82 43 46 06 92 C3 40 06 B0 12 0A 63 -38 40 00 1E 92 48 C6 01 04 20 92 48 C8 01 06 20 -5A 48 C2 01 92 43 02 20 7A 80 06 00 0F 24 7A 82 -0D 24 A2 43 02 20 6A 53 09 24 5A 53 07 24 6A 52 -05 24 3A 50 0B 20 0C 4A 30 40 86 63 B0 12 0A 63 -D2 48 0D 00 12 20 19 48 0E 00 82 49 08 20 1A 48 -16 00 0A 93 02 20 1A 48 24 00 82 4A 0A 20 09 5A -82 49 0C 20 09 5A A2 93 02 20 04 24 82 49 0E 20 -39 50 20 00 19 82 12 20 19 82 12 20 82 49 10 20 -92 42 02 20 2C 20 3E 90 0A 00 1C 27 3E 90 16 00 -19 2F 2E 93 E8 26 F1 2E 30 4D BA 45 06 0D 1B 5B -37 6D 23 00 7C 45 E2 42 BA 45 1F 46 61 73 74 46 -6F 72 74 68 20 56 33 30 30 20 28 43 29 4A 2E 4D -2E 54 68 6F 6F 72 65 6E 73 20 7C 45 34 40 80 FF -F2 42 28 41 D2 42 BA 45 0B 62 79 74 65 73 20 66 -72 65 65 20 24 43 46 4A 9E 4F 04 43 4F 4C 44 00 -92 B3 CA 05 FD 23 B2 40 04 A5 20 01 B2 40 88 5A -5C 01 B2 D0 03 00 04 02 B2 40 FC FF 02 02 B2 C0 -03 00 06 02 B2 43 26 02 B2 43 22 02 E2 D2 25 02 -B2 43 42 02 B2 D3 46 02 B2 43 62 02 B2 D3 66 02 -F2 43 26 03 F2 D3 22 03 F2 40 A5 00 41 01 F2 40 -10 00 40 01 D2 43 41 01 F2 40 A5 00 61 01 B2 40 -48 00 62 01 82 43 66 01 39 40 00 01 B2 40 33 00 -64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 59 14 -18 83 FE 23 19 83 FA 23 F2 D0 10 00 2A 03 F2 40 -A5 00 A1 04 F2 C0 40 00 A2 04 B2 42 B0 01 39 40 -00 10 29 83 89 43 00 1C FC 23 39 40 4C 00 29 83 -B9 40 BC 53 B4 FF FB 23 B2 40 8A 44 F0 FF B2 40 -81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 C8 05 -92 C3 C0 05 92 D3 DA 05 B2 40 81 A9 40 06 B2 40 -30 00 46 06 D2 D3 25 02 B2 D0 C0 04 0C 02 92 C3 -40 06 3F 40 80 1C 31 40 E0 1C 30 12 08 52 90 3E -38 40 C0 1D 39 48 2A 48 09 5A 1A 52 C4 1D 09 9A -03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D -30 4D 64 51 09 32 43 4F 4E 53 54 41 4E 54 87 12 -2E 4C 30 48 30 48 46 4C EA 54 2F 83 9F 4E 02 00 -00 00 2E 4E 3D 41 30 4D D4 54 09 32 56 41 52 49 -41 42 4C 45 87 12 2E 4C 34 40 04 00 06 43 46 4C -2A 40 1C 15 B0 12 2A 40 1E 46 76 46 32 43 28 55 -32 47 28 43 7A 4A 60 55 2A 55 29 4E 39 90 86 12 -02 20 2E 53 15 3C 39 90 85 12 03 20 1E 4E 02 00 -0F 3C 39 90 84 12 0C 20 2E 52 B9 90 E8 54 02 00 -04 24 B9 90 10 55 02 00 03 20 B0 12 EA 54 60 55 -1B 17 30 41 32 B0 00 02 01 24 3E 4F 30 41 3E 40 -28 00 B0 12 12 55 B0 12 64 55 19 42 C6 1D A2 53 -C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D -92 53 C4 1D B0 12 2A 40 1E 46 32 47 28 43 AC 55 -A2 55 21 53 3E 90 10 00 87 2D DA 2B AE 55 B2 41 -C4 1D D6 3F 87 12 B0 41 B0 54 BC 55 0C 43 1B 42 -C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 2F 20 -92 53 C4 1D B0 12 12 55 B0 12 64 55 0E 93 03 20 -3C 40 00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C -2E 93 03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 -20 02 12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 -03 20 3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 1D -A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 -26 00 09 20 3C 40 10 02 92 53 C4 1D B0 12 12 55 -B0 12 64 55 EB 3F 7A 90 40 00 16 20 3C 40 20 00 -92 53 C4 1D B0 12 8A 55 0C 20 3C 50 10 00 3E 40 -2B 00 B0 12 8A 55 92 92 C0 1D C4 1D 02 24 92 53 -C4 1D 8E 10 0C 5E D8 3F B0 12 8A 55 FA 23 3C 50 -10 00 B0 12 6E 55 EF 3F 0C 43 1B 42 C6 1D A2 53 -C6 1D 87 12 B0 41 B0 54 9A 56 FE 90 26 00 00 00 -3E 40 20 00 03 20 3C 50 82 00 C6 3F B0 12 8A 55 -E1 23 3C 50 80 00 B0 12 6E 55 DC 3F 7A 44 04 52 -45 54 49 00 87 12 34 40 00 13 30 48 2A 40 34 40 -2C 00 B4 55 92 56 D8 56 2E 4E 0E DC 09 4B A2 3F -FA 4C 03 4D 4F 56 84 12 CE 56 00 40 E2 56 05 4D -4F 56 2E 42 84 12 CE 56 40 40 00 00 03 41 44 44 -84 12 CE 56 00 50 FC 56 05 41 44 44 2E 42 84 12 -CE 56 40 50 08 57 04 41 44 44 43 00 84 12 CE 56 -00 60 16 57 06 41 44 44 43 2E 42 00 84 12 CE 56 -40 60 BE 56 04 53 55 42 43 00 84 12 CE 56 00 70 -34 57 06 53 55 42 43 2E 42 00 84 12 CE 56 40 70 -42 57 03 53 55 42 84 12 CE 56 00 80 52 57 05 53 -55 42 2E 42 84 12 CE 56 40 80 DC 4C 03 43 4D 50 -84 12 CE 56 00 90 6C 57 05 43 4D 50 2E 42 84 12 -CE 56 40 90 CA 4C 04 44 41 44 44 00 84 12 CE 56 -00 A0 86 57 06 44 41 44 44 2E 42 00 84 12 CE 56 -40 A0 78 57 03 42 49 54 84 12 CE 56 00 B0 A4 57 -05 42 49 54 2E 42 84 12 CE 56 40 B0 B0 57 03 42 -49 43 84 12 CE 56 00 C0 BE 57 05 42 49 43 2E 42 -84 12 CE 56 40 C0 CA 57 03 42 49 53 84 12 CE 56 -00 D0 D8 57 05 42 49 53 2E 42 84 12 CE 56 40 D0 -00 00 03 58 4F 52 84 12 CE 56 00 E0 F2 57 05 58 -4F 52 2E 42 84 12 CE 56 40 E0 24 57 03 41 4E 44 -84 12 CE 56 00 F0 0C 58 05 41 4E 44 2E 42 84 12 -CE 56 40 F0 B0 41 B4 55 2A 58 0A 4C 3C F0 70 00 -8A 10 3A F0 0F 00 0C DA 4F 3F 5E 57 03 52 52 43 -84 12 24 58 00 10 3C 58 05 52 52 43 2E 42 84 12 -24 58 40 10 48 58 04 53 57 50 42 00 84 12 24 58 -80 10 56 58 03 52 52 41 84 12 24 58 00 11 64 58 -05 52 52 41 2E 42 84 12 24 58 40 11 70 58 03 53 -58 54 84 12 24 58 80 11 00 00 04 50 55 53 48 00 -84 12 24 58 00 12 8A 58 06 50 55 53 48 2E 42 00 -84 12 24 58 40 12 E4 57 04 43 41 4C 4C 00 84 12 -24 58 80 12 1A 53 0E 4A 87 12 E2 42 BA 45 0D 6F -75 74 20 6F 66 20 62 6F 75 6E 64 73 E6 49 B0 41 -B0 54 D4 58 92 53 C4 1D 3E 40 2C 00 B0 12 2A 40 -1E 46 32 47 28 43 7A 4A 88 56 EC 58 0A 4E 3E 4F -1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 -0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 -D1 2F 8A 10 5A 06 8F 3F 7E 58 06 52 52 43 4D 2E -41 00 84 12 CE 58 40 00 1A 59 04 52 52 43 4D 00 -84 12 CE 58 50 00 2A 59 06 52 52 41 4D 2E 41 00 -84 12 CE 58 40 01 38 59 04 52 52 41 4D 00 84 12 -CE 58 50 01 48 59 06 52 4C 41 4D 2E 41 00 84 12 -CE 58 40 02 56 59 04 52 4C 41 4D 00 84 12 CE 58 -50 02 66 59 06 52 52 55 4D 2E 41 00 84 12 CE 58 -40 03 74 59 04 52 52 55 4D 00 84 12 CE 58 50 03 -98 58 07 50 55 53 48 4D 2E 41 84 12 CE 58 00 14 -92 59 05 50 55 53 48 4D 84 12 CE 58 00 15 A2 59 -06 50 4F 50 4D 2E 41 00 84 12 CE 58 00 16 B0 59 -04 50 4F 50 4D 00 84 12 CE 58 00 17 85 12 00 3C -84 59 03 53 3E 3D 85 12 00 38 D2 59 02 53 3C 00 -85 12 00 34 C0 59 03 30 3E 3D 85 12 00 30 E6 59 -02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 -00 2C FA 59 03 55 3E 3D 85 12 00 28 F0 59 03 30 -3C 3E 85 12 00 24 0E 5A 02 30 3D 00 85 12 00 20 -00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 -C6 1D 0E 4A 30 4D 04 5A 04 54 48 45 4E 00 1A 42 -C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 -00 02 31 2F 88 DA 00 00 30 4D 94 57 04 45 4C 53 -45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D -2F 83 8F 4A 00 00 E3 3F 38 5A 05 55 4E 54 49 4C -3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 -3A 90 00 FE 10 3B 3A F0 FF 03 08 DA 89 48 00 00 -A2 53 C6 1D 30 4D 18 58 05 41 47 41 49 4E 87 12 -CC 59 80 5A 2A 40 00 00 05 57 48 49 4C 45 87 12 -26 5A 78 40 2A 40 DC 59 06 52 45 50 45 41 54 00 -87 12 CC 59 80 5A 3E 5A 2A 40 DC 5A 3D 41 2E 4E -08 4E 3E 4F 2A 48 0A 93 88 43 00 00 CA 23 98 42 -C6 1D 00 00 30 4D A8 58 03 42 57 31 84 12 DA 5A -E0 1D F8 5A 03 42 57 32 84 12 DA 5A E2 1D 04 5B -03 42 57 33 84 12 DA 5A E4 1D 1C 5B 3D 41 1A 42 -C6 1D 2E 4E 28 4E 08 93 8E 43 00 00 8B 23 BA 4F -00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 -03 46 57 31 84 12 1A 5B E6 1D 40 5B 03 46 57 32 -84 12 1A 5B E8 1D 4C 5B 03 46 57 33 84 12 1A 5B -EA 1D 3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 -02 24 3E E0 00 08 30 4D 58 5B 04 47 4F 54 4F 00 -87 12 CC 59 6C 4A 26 48 2A 40 00 00 05 3F 47 4F -54 4F 87 12 62 5B 6C 4A 26 48 2A 40 00 00 03 4A -4D 50 87 12 6C 4A AE 5A 2A 40 8C 5B 04 3F 4A 4D -50 00 87 12 62 5B 6C 4A 78 40 80 5A 2A 40 87 12 -B0 41 B0 54 C6 5B 69 4E 3E 4F 3C 4F 2C 4C 1B 42 -C6 1D A2 53 C6 1D 79 90 52 00 0A 20 B0 12 8A 55 -5E 0E 5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D -79 90 23 00 0D 20 3C C0 40 00 92 53 C4 1D A2 53 -C6 1D B0 12 12 55 BB 4F 02 00 3E F0 0F 00 E8 3F -79 90 26 00 03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 -79 90 40 00 12 20 92 53 C4 1D B0 12 8A 55 D8 23 -3C D0 10 00 3E 40 2B 00 B0 12 8A 55 92 92 C0 1D -C4 1D CE 27 92 53 C4 1D CB 3F 3C D0 30 00 A2 53 -C6 1D 3E 40 28 00 B0 12 12 55 BB 4F 02 00 3E 40 -29 00 EA 3F 87 12 B0 41 B0 54 6C 5C 3B 4F 2C 4B -69 4E 7E 40 20 00 79 90 52 00 03 20 B0 12 8A 55 -B1 3F 3C C0 F0 00 A2 53 C6 1D 79 90 26 00 09 20 -3C D0 60 00 92 53 C4 1D B0 12 12 55 BB 4F 02 00 -A1 3F 3C D0 70 00 3E 40 28 00 B0 12 12 55 BB 4F -02 00 3E 40 29 00 E2 3F 34 40 2C 00 BE 5B 64 5C -62 40 2A 40 EE 56 04 4D 4F 56 41 00 84 12 B8 5C -C0 00 10 5B 04 43 4D 50 41 00 84 12 B8 5C D0 00 -A8 5A 04 41 44 44 41 00 84 12 B8 5C E0 00 C8 5A -04 53 55 42 41 00 84 12 B8 5C F0 00 D4 5C 05 43 -41 4C 4C 41 87 12 B0 41 B0 54 0C 5D 1B 42 C6 1D -A2 53 C6 1D 6E 4E 3C 40 34 01 7E 90 52 00 0B 20 -7E 40 20 00 B0 12 8A 55 5C 0E 0C DE 8B 4C 00 00 -3E 4F 3D 41 30 4D 2C 53 7E 90 40 00 0B 20 92 53 -C4 1D 7E 40 20 00 B0 12 8A 55 EE 23 1C 53 3E 40 -2B 00 E8 3F A2 53 C6 1D 7E 90 23 00 09 20 3C 40 -3B 01 92 53 C4 1D B0 12 12 55 BB 4F 02 00 DC 3F -7E 90 26 00 02 20 2C 53 F4 3F 7E 40 28 00 1C 83 -B0 12 12 55 BB 4F 02 00 3E 40 29 00 CB 3F 87 12 -B0 41 B0 54 96 5D 69 4E 3E 4F 3C 40 00 18 79 90 -52 00 05 20 B0 12 8A 55 0E 4C 3D 41 30 4D 82 43 -EE 1D 79 90 23 00 0B 20 92 53 C4 1D B0 12 12 55 -2F 53 3E F0 0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 -26 00 F2 27 79 90 40 00 12 20 92 53 C4 1D B0 12 -8A 55 E2 23 3E 40 2B 00 92 53 C4 1D B0 12 8A 55 -92 92 C0 1D C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 -28 00 B0 12 12 55 8F 4E 00 00 3E 40 29 00 B0 12 -8A 55 3E 4F 3E F0 0F 00 0C DE EA 3F 87 12 B0 41 -B0 54 24 5E 3C 4F 69 4E 3E 40 20 00 79 90 52 00 -BB 27 82 43 EE 1D 79 90 26 00 08 20 92 53 C4 1D -B0 12 12 55 2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 -B0 12 12 55 F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E -3E 4F 1C D2 EE 1D 82 43 EE 1D 3C DE 8B 4C 00 00 -B2 41 C4 1D 30 4D 34 40 C4 1D F2 40 B0 40 34 40 -2C 00 8E 5D 1C 5E 56 5E 24 43 CE 56 C6 5C 04 4D -4F 56 58 00 84 12 76 5E 40 00 00 40 8E 5E 06 4D -4F 56 58 2E 41 00 84 12 76 5E 00 00 40 40 9E 5E -06 4D 4F 56 58 2E 42 00 84 12 76 5E 40 00 40 40 -E2 5C 04 41 44 44 58 00 84 12 76 5E 40 00 00 50 -C2 5E 06 41 44 44 58 2E 41 00 84 12 76 5E 00 00 -40 50 D2 5E 06 41 44 44 58 2E 42 00 84 12 76 5E -40 00 40 50 E4 5E 05 41 44 44 43 58 84 12 76 5E -40 00 00 60 F6 5E 07 41 44 44 43 58 2E 41 84 12 -76 5E 00 00 40 60 06 5F 07 41 44 44 43 58 2E 42 -84 12 76 5E 40 00 40 60 F0 5C 05 53 55 42 43 58 -84 12 76 5E 40 00 00 70 2A 5F 07 53 55 42 43 58 -2E 41 84 12 76 5E 00 00 40 70 3A 5F 07 53 55 42 -43 58 2E 42 84 12 76 5E 40 00 40 70 4C 5F 04 53 -55 42 58 00 84 12 76 5E 40 00 00 80 5E 5F 06 53 -55 42 58 2E 41 00 84 12 76 5E 00 00 40 80 6E 5F -06 53 55 42 58 2E 42 00 84 12 76 5E 40 00 40 80 -FE 5C 04 43 4D 50 58 00 84 12 76 5E 40 00 00 90 -92 5F 06 43 4D 50 58 2E 41 00 84 12 76 5E 00 00 -40 90 A2 5F 06 43 4D 50 58 2E 42 00 84 12 76 5E -40 00 40 90 5C 5A 05 44 41 44 44 58 84 12 76 5E -40 00 00 A0 C6 5F 07 44 41 44 44 58 2E 41 84 12 -76 5E 00 00 40 A0 D6 5F 07 44 41 44 44 58 2E 42 -84 12 76 5E 40 00 40 A0 B4 5F 04 42 49 54 58 00 -84 12 76 5E 40 00 00 B0 FA 5F 06 42 49 54 58 2E -41 00 84 12 76 5E 00 00 40 B0 0A 60 06 42 49 54 -58 2E 42 00 84 12 76 5E 40 00 40 B0 1C 60 04 42 -49 43 58 00 84 12 76 5E 40 00 00 C0 2E 60 06 42 -49 43 58 2E 41 00 84 12 76 5E 00 00 40 C0 3E 60 -06 42 49 43 58 2E 42 00 84 12 76 5E 40 00 40 C0 -50 60 04 42 49 53 58 00 84 12 76 5E 40 00 00 D0 -62 60 06 42 49 53 58 2E 41 00 84 12 76 5E 00 00 -40 D0 72 60 06 42 49 53 58 2E 42 00 84 12 76 5E -40 00 40 D0 FE 57 04 58 4F 52 58 00 84 12 76 5E -40 00 00 E0 96 60 06 58 4F 52 58 2E 41 00 84 12 -76 5E 00 00 40 E0 A6 60 06 58 4F 52 58 2E 42 00 -84 12 76 5E 40 00 40 E0 18 5F 04 41 4E 44 58 00 -84 12 76 5E 40 00 00 F0 CA 60 06 41 4E 44 58 2E -41 00 84 12 76 5E 00 00 40 F0 DA 60 06 41 4E 44 -58 2E 42 00 84 12 76 5E 40 00 40 F0 34 40 C4 1D -F2 40 B0 40 B0 41 8E 5D 56 5E 24 43 24 58 80 5F -04 52 52 43 58 00 84 12 FC 60 40 00 00 10 10 61 -06 52 52 43 58 2E 41 00 84 12 FC 60 00 00 40 10 -20 61 06 52 52 43 58 2E 42 00 84 12 FC 60 40 00 -40 10 32 61 04 52 52 55 58 00 84 12 FC 60 40 01 -00 10 44 61 06 52 52 55 58 2E 41 00 84 12 FC 60 -00 01 40 10 54 61 06 52 52 55 58 2E 42 00 84 12 -FC 60 40 01 40 10 66 61 05 53 57 50 42 58 84 12 -FC 60 40 00 80 10 78 61 07 53 57 50 42 58 2E 41 -84 12 FC 60 00 00 80 10 88 61 04 52 52 41 58 00 -84 12 FC 60 40 00 00 11 9A 61 06 52 52 41 58 2E -41 00 84 12 FC 60 00 00 40 11 AA 61 06 52 52 41 -58 2E 42 00 84 12 FC 60 40 00 40 11 BC 61 04 53 -58 54 58 00 84 12 FC 60 40 00 80 11 CE 61 06 53 -58 54 58 2E 41 00 84 12 FC 60 00 00 80 11 18 5A -05 50 55 53 48 58 84 12 FC 60 40 00 00 12 F0 61 -07 50 55 53 48 58 2E 41 84 12 FC 60 00 00 40 12 -00 62 07 50 55 53 48 58 2E 42 84 12 FC 60 40 00 -40 12 DE 61 03 52 50 54 87 12 B0 41 B0 54 30 62 -29 4E 7E 40 20 00 79 90 52 00 06 20 B0 12 8A 55 -03 24 3E D0 80 00 04 3C B0 12 12 55 3E F0 0F 00 -82 4E EE 1D 3E 4F 3D 41 30 4D 1A 43 25 3C D2 C3 -23 02 E2 B2 60 02 02 24 30 40 B0 53 1A 52 04 20 -19 62 06 20 92 43 14 20 A2 93 02 20 07 24 0A 5A -49 69 82 4A 16 20 C2 49 18 20 0A 3C C2 4A 15 20 -8A 10 C2 4A 16 20 C2 49 17 20 89 10 C2 49 18 20 -B0 12 E2 62 5A 53 FC 23 39 40 05 00 D2 49 14 20 -4E 06 82 93 46 06 05 24 92 B3 6C 06 FD 27 C2 93 -4C 06 59 83 F3 2F 19 83 0B 30 F2 43 4E 06 82 93 -46 06 03 24 92 B3 6C 06 FD 27 5A 92 4C 06 F3 23 -30 41 19 43 3A 43 8A 10 C2 4A 4E 06 82 93 46 06 -05 24 92 B3 6C 06 FD 27 C2 93 4C 06 19 83 F3 23 -5A 42 4C 06 30 41 1A 52 08 20 09 43 1C D3 F2 40 -51 00 19 20 B0 12 5E 62 33 20 B0 12 E2 62 6A 53 -04 24 FB 23 D9 42 4C 06 FF 1D F2 43 4E 06 03 43 -19 53 39 90 01 02 F6 23 F2 43 4E 06 3C C0 03 00 -D2 D3 23 02 30 41 09 43 2C D3 F0 40 58 00 CB BC -B0 12 5E 62 15 20 3A 40 FE FF 29 43 B0 12 E6 62 -D2 49 00 1E 4E 06 03 43 19 53 39 90 00 02 F8 23 -39 40 03 00 B0 12 E4 62 7A C0 E1 00 6A 92 DE 27 -8C 10 1C 52 4C 06 D2 D3 23 02 87 12 1A 45 BA 45 -0B 3C 20 53 44 20 45 72 72 6F 72 21 9E 63 2F 83 -B2 40 10 00 DC 1D 0E 4C B0 12 2A 40 D2 42 E6 49 -92 4B 0E 00 22 20 92 4B 10 00 24 20 5A 42 23 20 -58 42 22 20 92 93 02 20 08 24 59 42 24 20 89 10 -0A 59 88 10 08 58 0A 6A 88 10 08 58 30 41 82 43 -1C 20 92 42 0E 20 1A 20 C2 93 24 20 03 20 92 93 -22 20 14 24 92 42 22 20 D0 04 92 42 24 20 D2 04 -92 42 12 20 C8 04 92 42 E4 04 1A 20 92 42 E6 04 -1C 20 92 52 10 20 1A 20 82 63 1C 20 30 41 92 4B -0E 00 22 20 92 4B 10 00 24 20 B0 12 DE 63 5A 4B -03 00 82 5A 1A 20 82 63 1C 20 30 41 09 93 07 24 -F8 90 20 00 00 1E 03 20 18 53 19 83 F9 23 30 41 -1B 42 32 20 82 43 1E 20 B2 90 00 02 20 20 A8 20 -BB 80 00 02 12 00 8B 73 14 00 DB 53 03 00 DB 92 -12 20 03 00 11 28 CB 43 03 00 B0 12 B0 63 B0 12 -06 63 8B 43 10 00 9B 48 00 1E 0E 00 92 93 02 20 -03 24 9B 48 02 1E 10 00 B2 40 00 02 20 20 8B 93 -14 00 0B 20 92 9B 12 00 1E 20 82 2C BB 90 00 02 -12 00 03 2C 92 4B 12 00 20 20 B0 12 1E 64 1A 42 -1A 20 19 42 1C 20 22 3F 3C 42 3B 40 38 20 09 43 -CB 93 02 00 10 24 9B 92 24 20 0C 00 04 20 9B 92 -22 20 0A 00 07 24 09 4B 3B 50 1C 00 3B 90 18 21 -EF 23 0C 5C 30 41 0C 43 82 4B 32 20 8B 49 00 00 -09 93 0A 24 99 52 C4 1D 16 00 4A 93 05 34 C9 93 -02 00 02 34 5A 59 02 00 CB 4A 02 00 CB 43 03 00 -9B 42 1A 20 04 00 9B 42 1C 20 06 00 18 42 30 20 -8B 48 08 00 9B 48 1A 1E 0A 00 9B 48 14 1E 0C 00 -9B 48 1A 1E 0E 00 9B 48 14 1E 10 00 9B 48 1C 1E -12 00 9B 48 1E 1E 14 00 82 43 1E 20 6A 93 5F 27 -C9 37 8B 43 16 00 7A 93 02 24 07 38 95 3F B2 40 -1C 21 F8 44 B2 40 BE 43 24 44 9B 42 C0 1D 18 00 -9B 82 C4 1D 18 00 9B 42 C2 1D 1A 00 9B 52 C4 1D -1A 00 82 3F CB 43 02 00 2B 4B 82 4B 32 20 0B 93 -06 24 92 4B 16 00 1E 20 B0 12 98 64 22 C3 30 41 -1B 42 32 20 0B 93 FB 27 EB 93 02 00 04 20 B0 12 -10 6A B0 12 D8 69 CB 93 02 00 E4 37 1E 4B 18 00 -9F 4B 1A 00 00 00 31 50 06 00 3D 41 B0 12 94 65 -02 24 30 40 30 45 B2 40 3C 1D F8 44 B2 40 26 44 -24 44 30 40 1A 45 FA 54 85 52 45 41 44 22 5A 43 -19 3C 02 52 86 57 52 49 54 45 22 00 6A 43 12 3C -88 4F 84 44 45 4C 22 00 6A 42 0C 3C AA 53 05 43 -4C 4F 53 45 B0 12 B0 65 30 4D B4 50 85 4C 4F 41 -44 22 7A 43 2F 83 8F 4E 00 00 0E 4A 82 93 BE 1D -0A 24 87 12 34 40 34 40 30 48 30 48 D4 45 34 40 -64 66 30 48 2A 40 87 12 34 40 22 00 1E 46 84 48 -62 66 3D 41 35 4F 0E 55 82 4E 36 20 1C 43 92 42 -2C 20 22 20 92 42 2E 20 24 20 0E 95 8D 24 F5 90 -3A 00 01 00 01 20 25 53 F5 90 5C 00 00 00 08 20 -15 53 92 42 02 20 22 20 82 43 24 20 0E 95 70 24 -82 45 34 20 B0 12 DE 63 34 40 20 00 A2 93 02 20 -04 24 92 92 22 20 02 20 02 24 14 42 12 20 B0 12 -BE 64 2C 43 0A 43 08 4A 58 0E 08 58 82 48 30 20 -C8 93 00 1E 61 24 39 42 F8 95 00 1E 04 20 18 53 -19 83 FA 23 15 53 F5 90 2E 00 FF FF 19 24 39 50 -03 00 B0 12 3C 64 06 20 F5 90 5C 00 FF FF 29 24 -0E 95 27 28 15 42 34 20 1A 53 3A 90 10 00 DB 23 -92 53 1A 20 82 63 1C 20 14 83 D1 23 2C 42 3C 3C -F5 90 2E 00 FE FF EE 27 B0 12 3C 64 EB 23 39 40 -03 00 F8 95 00 1E 04 20 18 53 19 83 FA 23 09 3C -0E 95 E0 2F F5 90 5C 00 FF FF DC 23 B0 12 3C 64 -D9 23 18 42 30 20 92 48 1A 1E 22 20 92 48 14 1E -24 20 F8 B0 10 00 0B 1E 14 24 82 93 24 20 06 20 -82 93 22 20 03 20 92 42 02 20 22 20 0E 95 8E 2F -92 42 22 20 2C 20 92 42 24 20 2E 20 8F 43 00 00 -03 3C 2A 4F B0 12 C8 64 34 40 00 40 35 40 0E 40 -3A 4F 3E 4F 0A 93 04 24 7A 93 12 20 0C 93 01 20 -30 4D 87 12 BA 45 0B 3C 20 4F 70 65 6E 45 72 72 -6F 72 1A 45 F2 42 84 48 7C 45 44 45 24 43 9C 63 -1A 93 B6 20 0C 93 ED 23 30 4D F8 65 04 52 45 41 -44 00 2F 83 8F 4E 00 00 1E 42 32 20 B0 12 50 64 -1E 82 32 20 30 4D 2C 43 12 12 2A 20 18 42 02 20 -08 58 2A 41 82 9A 0A 20 A1 24 B0 12 06 63 09 43 -28 93 03 24 89 93 02 1E 03 20 89 93 00 1E 07 24 -09 58 39 90 00 02 F4 23 91 53 00 00 EA 3F 0C 43 -6A 41 B9 43 00 1E 28 93 0F 24 B9 40 FF 0F 02 1E -09 11 8A 10 09 5A 5A 41 01 00 0A 11 09 10 82 4A -28 20 82 49 26 20 07 3C 09 11 C2 49 26 20 C2 4A -27 20 82 43 28 20 3A 41 82 4A 2A 20 30 41 0A 12 -1A 52 08 20 B0 12 46 63 3A 41 1A 52 0C 20 30 40 -46 63 F2 B0 40 00 A2 04 29 20 F2 B0 10 00 A2 04 -FC 27 5A 42 B0 04 4A 11 59 42 B4 04 F2 40 20 00 -C0 04 D2 42 B1 04 C8 04 1A 52 E4 04 D2 42 B5 04 -C8 04 19 52 E4 04 D2 42 B2 04 C0 04 B2 40 00 08 -C8 04 1A 52 E4 04 92 42 B6 04 C0 04 B2 80 BC 07 -C0 04 B2 40 00 02 C8 04 19 52 E4 04 30 41 22 2A -2B 2C 2F 3A 3B 3C 3D 3E 3F 5B 5C 5D 7C 2E 29 92 -06 38 39 80 03 00 B0 12 2E 69 39 40 03 00 7A 4B -C8 4A 00 1E 82 9B 36 20 12 28 0D 12 3D 40 0F 00 -3C 40 DE 68 7A 9C F3 27 1D 83 FC 23 3D 41 6A 9C -E6 27 3A 80 21 00 EB 3B 18 53 19 83 E8 23 09 93 -06 24 F8 40 20 00 00 1E 18 53 19 83 FA 23 30 41 -2A 93 EB 20 2C 93 0D 24 0C 93 BA 24 87 12 BA 45 -0C 3C 20 57 72 69 74 65 45 72 72 6F 72 00 24 43 -C2 67 B0 12 F6 67 92 42 26 20 22 20 92 42 28 20 -24 20 B0 12 6E 68 B0 12 BE 64 18 42 30 20 F8 40 -20 00 0B 1E B0 12 82 68 88 43 0C 1E 88 4A 0E 1E -88 49 10 1E 88 49 12 1E 98 42 24 20 14 1E 98 42 -22 20 1A 1E 88 43 1C 1E 88 43 1E 1E 1C 43 1B 42 -34 20 82 9B 36 20 CA 27 FB 90 2E 00 00 00 C6 27 -39 40 0B 00 B0 12 FE 68 B0 12 1A 6A 2A 43 B0 12 -C8 64 0C 93 BB 23 30 4D 1A 4B 04 00 19 4B 06 00 -B0 12 0C 63 B0 12 82 68 18 4B 08 00 88 49 12 1E -88 4A 16 1E 88 49 18 1E 98 4B 12 00 1C 1E 98 4B -14 00 1E 1E 1A 4B 04 00 19 4B 06 00 30 40 48 63 -9B 52 1E 20 12 00 8B 63 14 00 1A 42 1A 20 19 42 -1C 20 30 40 48 63 B2 40 00 02 1E 20 1B 42 32 20 -B0 12 10 6A 82 43 1E 20 DB 53 03 00 DB 92 12 20 -03 00 22 20 CB 43 03 00 B0 12 B0 63 08 12 0A 12 -B0 12 F6 67 2A 91 05 24 B0 12 6E 68 2A 41 B0 12 -06 63 3A 41 38 41 98 42 26 20 00 1E 92 93 02 20 -03 24 98 42 28 20 02 1E B0 12 6E 68 9B 42 26 20 -0E 00 9B 42 28 20 10 00 30 40 1E 64 04 66 05 57 -52 49 54 45 B0 12 26 6A 30 4D DC 67 07 53 44 5F -45 4D 49 54 B2 90 00 02 1E 20 02 28 B0 12 26 6A -18 42 1E 20 C8 4E 00 1E 92 53 1E 20 3E 4F 30 4D -58 4B 13 00 59 4B 14 00 89 10 09 58 58 4B 15 00 -5B 42 12 20 0A 43 3C 42 08 11 09 10 4A 10 1C 83 -0B 11 FA 2B 0A 11 1C 83 FD 37 1B 42 32 20 19 5B -0A 00 18 6B 0C 00 8B 49 0E 00 8B 48 10 00 CB 4A -03 00 1A 4B 12 00 BB C0 FF 01 12 00 3A F0 FF 01 -82 4A 1E 20 B0 12 BA 64 30 4D 0C 93 38 20 38 90 -E0 01 03 2C C8 93 20 1E 02 24 7C 40 E5 00 C8 4C -00 1E B0 12 1A 6A B0 12 BC 63 82 4A 2A 20 0B 4A -B0 12 06 63 1A 48 00 1E 88 43 00 1E 92 93 02 20 -09 24 19 48 02 1E 88 43 02 1E 39 F0 FF 0F 39 90 -FF 0F 02 20 3A 93 0E 24 82 4A 22 20 82 49 24 20 -B0 12 BC 63 0B 9A E6 27 0A 12 0A 4B B0 12 6E 68 -3A 41 DD 3F 0A 4B B0 12 6E 68 B0 12 B0 65 30 4D -8C 4D 08 54 45 52 4D 32 53 44 22 00 87 12 18 66 -34 40 02 00 F2 42 84 48 64 66 AC 6B 3D 41 92 C3 -DC 05 08 43 B0 12 5A 44 92 B3 DC 05 FD 27 59 42 -CC 05 69 92 0D 24 C8 49 00 1E 18 53 38 90 FF 01 -F3 2B 03 24 B0 12 26 6A EC 3F B0 12 6C 44 EC 3F -B0 12 6C 44 82 48 1E 20 B0 12 B0 65 30 4D +FE FF 89 48 00 00 30 4D 87 12 80 44 0F 73 74 61 +63 6B 20 6D 69 73 6D 61 74 63 68 21 F2 48 F2 47 +05 44 45 46 45 52 B0 12 5E 4A BA 40 30 40 FC FF +BA 40 54 4A FE FF E3 3F 3A 48 06 43 52 45 41 54 +45 00 B0 12 5E 4A BA 40 85 12 FC FF 8A 4A FE FF +D6 3F D0 4A 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 +84 12 00 00 8A 4D 02 00 3D 41 30 4D B0 45 05 3E +42 4F 44 59 2E 52 30 4D EA 4A 04 43 4F 44 45 00 +B0 12 5E 4A 82 43 D8 5F A2 82 C6 1D 87 12 CE 4D +A0 4D 2A 40 2A 4B 07 43 4F 44 45 4E 4E 4D B0 12 +2C 4A F0 3F 00 00 07 45 4E 44 43 4F 44 45 87 12 +E8 4D A0 4A 2A 40 D2 48 03 41 53 4D B2 40 A4 4D +DA 1D DE 3F 56 4B 06 45 4E 44 41 53 4D 00 87 12 +5E 4B 12 4E 2A 40 00 00 05 43 4F 4C 4F 4E 1A 42 +C6 1D BA 40 87 12 00 00 A2 53 C6 1D B2 43 BE 1D +30 40 E8 4D 00 00 05 4C 4F 32 48 49 1A 42 C6 1D +BA 40 B0 12 00 00 BA 40 2A 40 02 00 A2 52 C6 1D +ED 3F C0 49 85 48 49 32 4C 4F 87 12 02 47 F4 4B +12 47 86 49 CE 4D A0 4D 2A 40 C4 4B 82 49 46 00 +2F 83 8F 4E 00 00 1E 42 C6 1D A2 52 C6 1D BE 40 +40 42 00 00 2E 53 30 4D 04 4B 84 45 4C 53 45 00 +A2 52 C6 1D 1A 42 C6 1D BA 40 3C 42 FC FF 8E 4A +00 00 2A 83 0E 4A 30 4D 32 44 84 54 48 45 4E 00 +9E 42 C6 1D 00 00 3E 4F 30 4D 46 4B 85 42 45 47 +49 4E 30 40 02 47 1A 4C 85 55 4E 54 49 4C 39 40 +40 42 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E +FE FF 3E 4F 30 4D 68 4B 85 41 47 41 49 4E 39 40 +3C 42 EF 3F DC 44 85 57 48 49 4C 45 87 12 E0 4B +76 40 2A 40 96 44 86 52 45 50 45 41 54 00 87 12 +5E 4C 20 4C 2A 40 FA 4B 82 44 4F 00 2F 83 8F 4E +00 00 A2 53 C6 1D 1E 42 C6 1D BE 40 54 42 FE FF +A2 53 00 1C 1A 42 00 1C 8A 43 00 00 30 4D 44 47 +84 4C 4F 4F 50 00 39 40 76 42 A2 52 C6 1D 1A 42 +C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 00 1C A2 83 +00 1C 2E 4E 0E 93 03 24 8E 4A 00 00 F6 3F 3E 4F +30 4D 90 42 85 2B 4C 4F 4F 50 39 40 64 42 E5 3F +B0 4C 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F +0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 +1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 E8 49 +00 00 1A 83 FA 23 30 4D 66 4C 0A 56 4F 43 41 42 +55 4C 41 52 59 00 87 12 F2 4A 76 44 10 00 76 44 +00 00 54 42 76 44 00 00 12 47 76 42 44 4D 02 47 +76 44 C8 1D 34 40 EA 40 12 47 F2 40 0A 4B 76 44 +CA 1D F2 40 2A 40 64 49 05 46 4F 52 54 48 84 12 +5E 4D C8 4D DA 63 CE 63 68 4D DC 4B E4 4C E8 63 +F8 4D 84 4E 8E 65 1E 69 40 68 00 00 CA 52 8E 49 +1E 4B 00 00 58 4C 09 41 53 53 45 4D 42 4C 45 52 +84 12 5E 4D A2 5E 3A 5E 9E 5D 62 59 06 58 00 00 +66 5C 00 00 C8 5F DC 5F 5E 58 9C 58 6E 5E 00 00 +00 00 3E 59 92 4D 96 4D 04 41 4C 53 4F 00 3A 40 +0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F D8 49 08 50 +52 45 56 49 4F 55 53 00 3A 40 0E 00 39 40 CC 1D +38 40 CA 1D 8A 3F C6 44 04 4F 4E 4C 59 00 82 43 +CC 1D 30 4D 88 4C 0B 44 45 46 49 4E 49 54 49 4F +4E 53 92 42 CA 1D DA 1D 30 4D 6E 4D FE 4D 12 4E +22 4E 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D 3D 40 +10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 FC 2B +89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F +3D 41 30 4D DE 4D 09 50 57 52 5F 53 54 41 54 45 +84 12 1A 4E C4 4D 7A 69 76 4C 09 52 53 54 5F 53 +54 41 54 45 92 42 0E 18 64 4E 92 42 0C 18 66 4E +EF 3F 56 4E 08 50 57 52 5F 48 45 52 45 00 92 42 +C8 1D 64 4E 92 42 C6 1D 66 4E 30 4D 6A 4E 08 52 +53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 92 42 +C6 1D 0C 18 EC 3F 2A 4D 04 57 49 50 45 00 39 40 +10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 42 DE 42 +B2 40 4A 4F 48 4F B2 40 80 48 7E 48 B2 40 C4 4D +0E 18 B2 40 7A 69 0C 18 30 12 74 4E B2 40 E4 43 +E2 43 B2 40 6A 44 68 44 B2 40 98 42 96 42 B2 40 +52 43 50 43 B2 40 3C 1D EC 43 1B 42 32 20 0B 93 +04 24 CB 43 02 00 2B 4B FA 3F B2 40 18 00 0A 18 +37 40 1A 40 36 40 92 40 35 40 0E 40 34 40 00 40 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 B8 4E +04 57 41 52 4D 00 30 40 4A 4F 3D 40 98 50 92 C3 +30 01 1E 42 08 18 0E 93 9E 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 E2 B2 60 02 8A 20 +39 42 B0 12 9E 60 D2 C3 23 02 2C 42 B2 40 95 00 +14 20 B2 40 00 40 18 20 B0 12 14 60 02 24 30 40 +3A 61 B0 12 9C 60 7A 93 FC 23 B2 40 87 AA 14 20 +92 43 16 20 B2 40 00 48 18 20 B0 12 14 60 29 42 +B0 12 9E 60 92 43 14 20 82 43 16 20 78 43 3C 42 +B2 40 00 77 18 20 B0 12 14 60 B2 40 40 69 18 20 +B0 12 5A 60 03 24 58 83 F3 23 D9 3F 0C 5C A2 43 +16 20 B2 40 00 50 18 20 B0 12 5A 60 D0 23 92 D3 +40 06 82 43 46 06 92 C3 40 06 B0 12 C4 60 38 40 +00 1E 92 48 C6 01 04 20 92 48 C8 01 06 20 5A 48 +C2 01 92 43 02 20 7A 80 06 00 0F 24 7A 82 0D 24 +A2 43 02 20 6A 53 09 24 5A 53 07 24 6A 52 05 24 +3A 50 0B 20 0C 4A 30 40 40 61 B0 12 C4 60 D2 48 +0D 00 12 20 19 48 0E 00 82 49 08 20 1A 48 16 00 +0A 93 02 20 1A 48 24 00 82 4A 0A 20 09 5A 82 49 +0C 20 09 5A A2 93 02 20 04 24 82 49 0E 20 39 50 +20 00 19 82 12 20 19 82 12 20 82 49 10 20 92 42 +02 20 2C 20 3E 90 0A 00 1A 27 3E 90 16 00 17 2F +2E 93 E6 26 EF 2E 30 4D 80 44 06 0D 1B 5B 37 6D +23 00 38 44 34 42 80 44 19 46 61 73 74 46 6F 72 +74 68 20 C2 A9 4A 2E 4D 2E 54 68 6F 6F 72 65 6E +73 20 38 44 76 44 30 FF 02 47 B8 40 24 42 80 44 +0A 62 79 74 65 73 20 66 72 65 65 00 3C 42 40 49 +2C 4C 04 43 4F 4C 44 00 92 B3 CA 05 FD 23 B2 40 +04 A5 20 01 98 50 B2 40 88 5A 5C 01 B2 D3 06 02 +B2 40 FC FF 02 02 B2 43 26 02 B2 D3 22 02 E2 D2 +25 02 B2 43 42 02 B2 D3 46 02 B2 43 62 02 B2 D3 +66 02 F2 43 26 03 F2 D3 22 03 F2 40 A5 00 41 01 +F2 40 10 00 40 01 D2 43 41 01 F2 40 A5 00 61 01 +B2 40 48 00 62 01 82 43 66 01 39 40 00 01 B2 40 +33 00 64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 +59 14 18 83 FE 23 19 83 FA 23 F2 D0 10 00 2A 03 +F2 40 A5 00 A1 04 F2 C0 40 00 A2 04 B2 42 B0 01 +39 40 00 10 29 83 89 43 00 1C FC 23 39 40 4C 00 +29 83 B9 40 F6 50 B4 FF FB 23 B2 40 84 43 F0 FF +B2 40 81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 +C8 05 92 C3 C0 05 92 D3 DA 05 B2 40 81 A9 40 06 +B2 40 30 00 46 06 D2 D3 25 02 B2 D0 C0 04 0C 02 +92 C3 40 06 3F 40 80 1C 31 40 E0 1C 30 12 46 4F +9C 3E E2 50 07 43 4F 4D 50 41 52 45 0C 4E 38 4F +3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 +07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D +1E 43 30 4D 58 4A 86 5B 54 48 45 4E 5D 00 30 4D +16 52 86 5B 45 4C 53 45 5D 00 87 12 76 44 00 00 +C6 40 A4 47 E2 44 86 47 34 40 40 42 8C 52 44 40 +80 44 06 5B 54 48 45 4E 5D 00 EC 51 4A 42 5C 52 +5A 44 D0 40 58 40 4A 42 32 52 2A 40 44 40 80 44 +06 5B 45 4C 53 45 5D 00 EC 51 4A 42 7A 52 5A 44 +D0 40 58 40 4A 42 30 52 2A 40 80 44 04 5B 49 46 +5D 00 EC 51 4A 42 32 52 3C 42 30 52 5A 44 80 44 +05 0D 0A 6B 6F 20 38 44 EE 43 94 47 3C 42 32 52 +22 52 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D +A2 52 89 5B 44 45 46 49 4E 45 44 5D 87 12 A4 47 +E2 44 50 45 6A 40 2A 40 B2 52 8B 5B 55 4E 44 45 +46 49 4E 45 44 5D 87 12 A4 47 E2 44 50 45 6A 40 +00 41 2A 40 E6 52 3D 41 B2 4E 0E 18 A2 4E 0C 18 +3E 4F 30 40 74 4E F2 4C 06 4D 41 52 4B 45 52 00 +B0 12 5E 4A BA 40 84 12 FC FF BA 40 E4 52 FE FF +9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D +30 40 A6 4A 1C 15 B0 12 2A 40 E2 44 50 45 4A 42 +3A 53 0C 46 40 42 74 49 54 53 3C 53 39 4E 39 80 +86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 +01 24 2E 82 1B 17 30 41 32 B0 00 02 01 24 3E 4F +30 41 3E 40 28 00 B0 12 24 53 B0 12 58 53 19 42 +C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 +12 12 C4 1D 92 53 C4 1D B0 12 2A 40 E2 44 0C 46 +40 42 A0 53 96 53 21 53 3E 90 10 00 81 2D DA 2B +A2 53 B2 41 C4 1D D6 3F 87 12 A4 47 D6 44 B0 53 +0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 +23 00 29 20 92 53 C4 1D B0 12 24 53 B0 12 58 53 +3C 40 00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 +3C 40 20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 +3C 40 30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 +3C 40 30 00 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 +3E 4F 3D 41 30 4D 7A 90 26 00 09 20 3C 40 10 02 +92 53 C4 1D B0 12 24 53 B0 12 58 53 EB 3F 7A 90 +40 00 16 20 3C 40 20 00 92 53 C4 1D B0 12 7E 53 +0C 20 3C 50 10 00 3E 40 2B 00 B0 12 7E 53 92 92 +C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 0C 5E D8 3F +B0 12 7E 53 FA 23 3C 50 10 00 B0 12 62 53 EF 3F +0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 A4 47 D6 44 +82 54 FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 +82 00 C6 3F B0 12 7E 53 E1 23 3C 50 80 00 B0 12 +62 53 DC 3F D6 42 04 52 45 54 49 00 87 12 76 44 +00 13 12 47 2A 40 76 44 2C 00 A8 53 7A 54 C0 54 +09 4B 2E 4E 0E DC A2 3F A6 4B 03 4D 4F 56 84 12 +B6 54 00 40 CA 54 05 4D 4F 56 2E 42 84 12 B6 54 +40 40 00 00 03 41 44 44 84 12 B6 54 00 50 E4 54 +05 41 44 44 2E 42 84 12 B6 54 40 50 F0 54 04 41 +44 44 43 00 84 12 B6 54 00 60 FE 54 06 41 44 44 +43 2E 42 00 84 12 B6 54 40 60 A6 54 04 53 55 42 +43 00 84 12 B6 54 00 70 1C 55 06 53 55 42 43 2E +42 00 84 12 B6 54 40 70 2A 55 03 53 55 42 84 12 +B6 54 00 80 3A 55 05 53 55 42 2E 42 84 12 B6 54 +40 80 88 4B 03 43 4D 50 84 12 B6 54 00 90 54 55 +05 43 4D 50 2E 42 84 12 B6 54 40 90 76 4B 04 44 +41 44 44 00 84 12 B6 54 00 A0 6E 55 06 44 41 44 +44 2E 42 00 84 12 B6 54 40 A0 60 55 03 42 49 54 +84 12 B6 54 00 B0 8C 55 05 42 49 54 2E 42 84 12 +B6 54 40 B0 98 55 03 42 49 43 84 12 B6 54 00 C0 +A6 55 05 42 49 43 2E 42 84 12 B6 54 40 C0 B2 55 +03 42 49 53 84 12 B6 54 00 D0 C0 55 05 42 49 53 +2E 42 84 12 B6 54 40 D0 00 00 03 58 4F 52 84 12 +B6 54 00 E0 DA 55 05 58 4F 52 2E 42 84 12 B6 54 +40 E0 0C 55 03 41 4E 44 84 12 B6 54 00 F0 F4 55 +05 41 4E 44 2E 42 84 12 B6 54 40 F0 A4 47 A8 53 +12 56 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA +4F 3F 46 55 03 52 52 43 84 12 0C 56 00 10 24 56 +05 52 52 43 2E 42 84 12 0C 56 40 10 30 56 04 53 +57 50 42 00 84 12 0C 56 80 10 3E 56 03 52 52 41 +84 12 0C 56 00 11 4C 56 05 52 52 41 2E 42 84 12 +0C 56 40 11 58 56 03 53 58 54 84 12 0C 56 80 11 +00 00 04 50 55 53 48 00 84 12 0C 56 00 12 72 56 +06 50 55 53 48 2E 42 00 84 12 0C 56 40 12 CC 55 +04 43 41 4C 4C 00 84 12 0C 56 80 12 1A 53 0E 4A +87 12 34 42 80 44 0D 6F 75 74 20 6F 66 20 62 6F +75 6E 64 73 F2 48 A4 47 D6 44 BC 56 92 53 C4 1D +3E 40 2C 00 B0 12 2A 40 E2 44 0C 46 40 42 74 49 +70 54 D4 56 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E +0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 +D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F +66 56 06 52 52 43 4D 2E 41 00 84 12 B6 56 40 00 +02 57 04 52 52 43 4D 00 84 12 B6 56 50 00 12 57 +06 52 52 41 4D 2E 41 00 84 12 B6 56 40 01 20 57 +04 52 52 41 4D 00 84 12 B6 56 50 01 30 57 06 52 +4C 41 4D 2E 41 00 84 12 B6 56 40 02 3E 57 04 52 +4C 41 4D 00 84 12 B6 56 50 02 4E 57 06 52 52 55 +4D 2E 41 00 84 12 B6 56 40 03 5C 57 04 52 52 55 +4D 00 84 12 B6 56 50 03 80 56 07 50 55 53 48 4D +2E 41 84 12 B6 56 00 14 7A 57 05 50 55 53 48 4D +84 12 B6 56 00 15 8A 57 06 50 4F 50 4D 2E 41 00 +84 12 B6 56 00 16 98 57 04 50 4F 50 4D 00 84 12 +B6 56 00 17 6C 57 03 53 3E 3D 85 12 00 38 B6 57 +02 53 3C 00 85 12 00 34 A8 57 03 30 3E 3D 85 12 +00 30 CA 57 02 30 3C 00 85 12 00 30 00 00 02 55 +3C 00 85 12 00 2C DE 57 03 55 3E 3D 85 12 00 28 +D4 57 03 30 3C 3E 85 12 00 24 F2 57 02 30 3D 00 +85 12 00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E +00 00 A2 53 C6 1D 0E 4A 30 4D E8 57 04 54 48 45 +4E 00 1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 +0A 11 3A 90 00 02 33 2F 88 DA 00 00 30 4D 7C 55 +04 45 4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 +A2 53 C6 1D 2F 83 8F 4A 00 00 E3 3F 1C 58 05 55 +4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 +0A 89 0A 11 3A 90 00 FE 12 3B 3A F0 FF 03 08 DA +89 48 00 00 A2 53 C6 1D 30 4D 00 56 05 41 47 41 +49 4E 0A 4E 38 40 00 3C E7 3F 00 00 05 57 48 49 +4C 45 87 12 0A 58 76 40 2A 40 C0 57 06 52 45 50 +45 41 54 00 87 12 92 58 22 58 2A 40 BE 58 3D 41 +08 4E 3E 4F 2A 48 B2 92 C4 1D CD 2F 98 42 C6 1D +00 00 30 4D 90 56 03 42 57 31 84 12 BC 58 00 00 +D6 58 03 42 57 32 84 12 BC 58 00 00 E2 58 03 42 +57 33 84 12 BC 58 00 00 FA 58 3D 41 1A 42 C6 1D +28 4E B2 92 C4 1D 90 2B BA 4F 00 00 A2 53 C6 1D +8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 +F8 58 00 00 1A 59 03 46 57 32 84 12 F8 58 00 00 +26 59 03 46 57 33 84 12 F8 58 00 00 00 00 05 3F +47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 3E B0 +00 10 02 24 3E E0 00 08 87 12 66 49 3C 47 2A 40 +32 59 04 47 4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 +00 3C F2 3F 87 12 A4 47 D6 44 7C 59 69 4E 3E 4F +3C 4F 2C 4C 1B 42 C6 1D A2 53 C6 1D 79 90 52 00 +0A 20 B0 12 7E 53 5E 0E 5E 0E 0E DC 8B 4E 00 00 +0E 4B 3D 41 30 4D 79 90 23 00 0D 20 3C C0 40 00 +92 53 C4 1D A2 53 C6 1D B0 12 24 53 BB 4F 02 00 +3E F0 0F 00 E8 3F 79 90 26 00 03 20 3C E0 E0 00 +EF 3F 3C C0 F0 00 79 90 40 00 12 20 92 53 C4 1D +B0 12 7E 53 D8 23 3C D0 10 00 3E 40 2B 00 B0 12 +7E 53 92 92 C0 1D C4 1D CE 27 92 53 C4 1D CB 3F +3C D0 30 00 A2 53 C6 1D 3E 40 28 00 B0 12 24 53 +BB 4F 02 00 3E 40 29 00 EA 3F 87 12 A4 47 D6 44 +22 5A 3B 4F 2C 4B 69 4E 7E 40 20 00 79 90 52 00 +03 20 B0 12 7E 53 B1 3F 3C C0 F0 00 A2 53 C6 1D +79 90 26 00 09 20 3C D0 60 00 92 53 C4 1D B0 12 +24 53 BB 4F 02 00 A1 3F 3C D0 70 00 3E 40 28 00 +B0 12 24 53 BB 4F 02 00 3E 40 29 00 E2 3F 76 44 +2C 00 74 59 1A 5A 66 40 2A 40 D6 54 04 4D 4F 56 +41 00 84 12 6E 5A C0 00 EE 58 04 43 4D 50 41 00 +84 12 6E 5A D0 00 8C 58 04 41 44 44 41 00 84 12 +6E 5A E0 00 AC 58 04 53 55 42 41 00 84 12 6E 5A +F0 00 8A 5A 05 43 41 4C 4C 41 87 12 A4 47 D6 44 +C2 5A 1B 42 C6 1D A2 53 C6 1D 6E 4E 3C 40 34 01 +7E 90 52 00 0B 20 7E 40 20 00 B0 12 7E 53 5C 0E +0C DE 8B 4C 00 00 3E 4F 3D 41 30 4D 2C 53 7E 90 +40 00 0B 20 92 53 C4 1D 7E 40 20 00 B0 12 7E 53 +EE 23 1C 53 3E 40 2B 00 E8 3F A2 53 C6 1D 7E 90 +23 00 09 20 3C 40 3B 01 92 53 C4 1D B0 12 24 53 +BB 4F 02 00 DC 3F 7E 90 26 00 02 20 2C 53 F4 3F +7E 40 28 00 1C 83 B0 12 24 53 BB 4F 02 00 3E 40 +29 00 CB 3F 87 12 A4 47 D6 44 4C 5B 69 4E 3E 4F +3C 40 00 18 79 90 52 00 05 20 B0 12 7E 53 0E 4C +3D 41 30 4D 82 43 D8 5F 79 90 23 00 0B 20 92 53 +C4 1D B0 12 24 53 2F 53 3E F0 0F 00 5E 0A 5E 0E +0C DE ED 3F 79 90 26 00 F2 27 79 90 40 00 12 20 +92 53 C4 1D B0 12 7E 53 E2 23 3E 40 2B 00 92 53 +C4 1D B0 12 7E 53 92 92 C0 1D C4 1D D8 27 92 53 +C4 1D D5 3F 3E 40 28 00 B0 12 24 53 8F 4E 00 00 +3E 40 29 00 B0 12 7E 53 3E 4F 3E F0 0F 00 0C DE +EA 3F 87 12 A4 47 D6 44 DA 5B 3C 4F 69 4E 3E 40 +20 00 79 90 52 00 BB 27 82 43 D8 5F 79 90 26 00 +08 20 92 53 C4 1D B0 12 24 53 2F 53 3E F0 0F 00 +BF 3F 3E 40 28 00 B0 12 24 53 F7 3F 1B 42 C6 1D +A2 53 C6 1D 0C 4E 3E 4F 1C D2 D8 5F 82 43 D8 5F +3C DE 8B 4C 00 00 B2 41 C4 1D 30 4D 76 44 C4 1D +EA 40 86 40 76 44 2C 00 44 5B D2 5B 0C 5C 3C 42 +B6 54 7C 5A 04 4D 4F 56 58 00 84 12 2C 5C 40 00 +00 40 44 5C 06 4D 4F 56 58 2E 41 00 84 12 2C 5C +00 00 40 40 54 5C 06 4D 4F 56 58 2E 42 00 84 12 +2C 5C 40 00 40 40 98 5A 04 41 44 44 58 00 84 12 +2C 5C 40 00 00 50 78 5C 06 41 44 44 58 2E 41 00 +84 12 2C 5C 00 00 40 50 88 5C 06 41 44 44 58 2E +42 00 84 12 2C 5C 40 00 40 50 9A 5C 05 41 44 44 +43 58 84 12 2C 5C 40 00 00 60 AC 5C 07 41 44 44 +43 58 2E 41 84 12 2C 5C 00 00 40 60 BC 5C 07 41 +44 44 43 58 2E 42 84 12 2C 5C 40 00 40 60 A6 5A +05 53 55 42 43 58 84 12 2C 5C 40 00 00 70 E0 5C +07 53 55 42 43 58 2E 41 84 12 2C 5C 00 00 40 70 +F0 5C 07 53 55 42 43 58 2E 42 84 12 2C 5C 40 00 +40 70 02 5D 04 53 55 42 58 00 84 12 2C 5C 40 00 +00 80 14 5D 06 53 55 42 58 2E 41 00 84 12 2C 5C +00 00 40 80 24 5D 06 53 55 42 58 2E 42 00 84 12 +2C 5C 40 00 40 80 B4 5A 04 43 4D 50 58 00 84 12 +2C 5C 40 00 00 90 48 5D 06 43 4D 50 58 2E 41 00 +84 12 2C 5C 00 00 40 90 58 5D 06 43 4D 50 58 2E +42 00 84 12 2C 5C 40 00 40 90 40 58 05 44 41 44 +44 58 84 12 2C 5C 40 00 00 A0 7C 5D 07 44 41 44 +44 58 2E 41 84 12 2C 5C 00 00 40 A0 8C 5D 07 44 +41 44 44 58 2E 42 84 12 2C 5C 40 00 40 A0 6A 5D +04 42 49 54 58 00 84 12 2C 5C 40 00 00 B0 B0 5D +06 42 49 54 58 2E 41 00 84 12 2C 5C 00 00 40 B0 +C0 5D 06 42 49 54 58 2E 42 00 84 12 2C 5C 40 00 +40 B0 D2 5D 04 42 49 43 58 00 84 12 2C 5C 40 00 +00 C0 E4 5D 06 42 49 43 58 2E 41 00 84 12 2C 5C +00 00 40 C0 F4 5D 06 42 49 43 58 2E 42 00 84 12 +2C 5C 40 00 40 C0 06 5E 04 42 49 53 58 00 84 12 +2C 5C 40 00 00 D0 18 5E 06 42 49 53 58 2E 41 00 +84 12 2C 5C 00 00 40 D0 28 5E 06 42 49 53 58 2E +42 00 84 12 2C 5C 40 00 40 D0 E6 55 04 58 4F 52 +58 00 84 12 2C 5C 40 00 00 E0 4C 5E 06 58 4F 52 +58 2E 41 00 84 12 2C 5C 00 00 40 E0 5C 5E 06 58 +4F 52 58 2E 42 00 84 12 2C 5C 40 00 40 E0 CE 5C +04 41 4E 44 58 00 84 12 2C 5C 40 00 00 F0 80 5E +06 41 4E 44 58 2E 41 00 84 12 2C 5C 00 00 40 F0 +90 5E 06 41 4E 44 58 2E 42 00 84 12 2C 5C 40 00 +40 F0 76 44 C4 1D EA 40 86 40 A4 47 44 5B 0C 5C +3C 42 0C 56 36 5D 04 52 52 43 58 00 84 12 B2 5E +40 00 00 10 C6 5E 06 52 52 43 58 2E 41 00 84 12 +B2 5E 00 00 40 10 D6 5E 06 52 52 43 58 2E 42 00 +84 12 B2 5E 40 00 40 10 E8 5E 04 52 52 55 58 00 +84 12 B2 5E 40 01 00 10 FA 5E 06 52 52 55 58 2E +41 00 84 12 B2 5E 00 01 40 10 0A 5F 06 52 52 55 +58 2E 42 00 84 12 B2 5E 40 01 40 10 1C 5F 05 53 +57 50 42 58 84 12 B2 5E 40 00 80 10 2E 5F 07 53 +57 50 42 58 2E 41 84 12 B2 5E 00 00 80 10 3E 5F +04 52 52 41 58 00 84 12 B2 5E 40 00 00 11 50 5F +06 52 52 41 58 2E 41 00 84 12 B2 5E 00 00 40 11 +60 5F 06 52 52 41 58 2E 42 00 84 12 B2 5E 40 00 +40 11 72 5F 04 53 58 54 58 00 84 12 B2 5E 40 00 +80 11 84 5F 06 53 58 54 58 2E 41 00 84 12 B2 5E +00 00 80 11 FC 57 05 50 55 53 48 58 84 12 B2 5E +40 00 00 12 A6 5F 07 50 55 53 48 58 2E 41 84 12 +B2 5E 00 00 40 12 B6 5F 07 50 55 53 48 58 2E 42 +84 12 B2 5E 40 00 40 12 00 00 94 5F 03 52 50 54 +87 12 A4 47 D6 44 E8 5F 29 4E 7E 40 20 00 79 90 +52 00 06 20 B0 12 7E 53 03 24 3E D0 80 00 05 3C +B0 12 24 53 1E 83 3E F0 0F 00 82 4E D8 5F 3E 4F +3D 41 30 4D 1A 43 25 3C D2 C3 23 02 E2 B2 60 02 +02 24 30 40 E8 50 1A 52 04 20 19 62 06 20 92 43 +14 20 A2 93 02 20 07 24 0A 5A 49 69 82 4A 16 20 +C2 49 18 20 0A 3C C2 4A 15 20 8A 10 C2 4A 16 20 +C2 49 17 20 89 10 C2 49 18 20 B0 12 9C 60 5A 53 +FC 23 39 40 05 00 D2 49 14 20 4E 06 82 93 46 06 +05 24 92 B3 6C 06 FD 27 C2 93 4C 06 59 83 F3 2F +19 83 0B 30 F2 43 4E 06 82 93 46 06 03 24 92 B3 +6C 06 FD 27 5A 92 4C 06 F3 23 30 41 19 43 3A 43 +8A 10 C2 4A 4E 06 82 93 46 06 05 24 92 B3 6C 06 +FD 27 C2 93 4C 06 19 83 F3 23 5A 42 4C 06 30 41 +1A 52 08 20 09 43 1C D3 F2 40 51 00 19 20 B0 12 +18 60 33 20 B0 12 9C 60 6A 53 04 24 FB 23 D9 42 +4C 06 FF 1D F2 43 4E 06 03 43 19 53 39 90 01 02 +F6 23 F2 43 4E 06 3C C0 03 00 D2 D3 23 02 30 41 +09 43 2C D3 F0 40 58 00 11 BF B0 12 18 60 15 20 +3A 40 FE FF 29 43 B0 12 A0 60 D2 49 00 1E 4E 06 +03 43 19 53 39 90 00 02 F8 23 39 40 03 00 B0 12 +9E 60 7A C0 E1 00 6A 92 DE 27 8C 10 1C 52 4C 06 +D2 D3 23 02 87 12 80 44 0B 3C 20 53 44 20 45 72 +72 6F 72 21 56 61 2F 83 8F 4E 00 00 B2 40 10 00 +DC 1D 0E 4C B0 12 2A 40 24 42 F2 48 92 4B 0E 00 +22 20 92 4B 10 00 24 20 5A 42 23 20 58 42 22 20 +92 93 02 20 08 24 59 42 24 20 89 10 0A 59 88 10 +08 58 0A 6A 88 10 08 58 30 41 82 43 1C 20 92 42 +0E 20 1A 20 C2 93 24 20 03 20 92 93 22 20 14 24 +92 42 22 20 D0 04 92 42 24 20 D2 04 92 42 12 20 +C8 04 92 42 E4 04 1A 20 92 42 E6 04 1C 20 92 52 +10 20 1A 20 82 63 1C 20 30 41 92 4B 0E 00 22 20 +92 4B 10 00 24 20 B0 12 9A 61 5A 4B 03 00 82 5A +1A 20 82 63 1C 20 30 41 09 93 07 24 F8 90 20 00 +00 1E 03 20 18 53 19 83 F9 23 30 41 1B 42 32 20 +82 43 1E 20 B2 90 00 02 20 20 A8 20 BB 80 00 02 +12 00 8B 73 14 00 DB 53 03 00 DB 92 12 20 03 00 +11 28 CB 43 03 00 B0 12 6C 61 B0 12 C0 60 8B 43 +10 00 9B 48 00 1E 0E 00 92 93 02 20 03 24 9B 48 +02 1E 10 00 B2 40 00 02 20 20 8B 93 14 00 0B 20 +92 9B 12 00 1E 20 82 2C BB 90 00 02 12 00 03 2C +92 4B 12 00 20 20 B0 12 DA 61 1A 42 1A 20 19 42 +1C 20 21 3F 3C 42 3B 40 38 20 09 43 CB 93 02 00 +10 24 9B 92 24 20 0C 00 04 20 9B 92 22 20 0A 00 +07 24 09 4B 3B 50 1C 00 3B 90 18 21 EF 23 0C 5C +30 41 0C 43 82 4B 32 20 8B 49 00 00 09 93 0A 24 +99 52 C4 1D 16 00 4A 93 05 34 C9 93 02 00 02 34 +5A 59 02 00 CB 4A 02 00 CB 43 03 00 9B 42 1A 20 +04 00 9B 42 1C 20 06 00 18 42 30 20 8B 48 08 00 +9B 48 1A 1E 0A 00 9B 48 14 1E 0C 00 9B 48 1A 1E +0E 00 9B 48 14 1E 10 00 9B 48 1C 1E 12 00 9B 48 +1E 1E 14 00 82 43 1E 20 6A 93 5F 27 C9 37 8B 43 +16 00 7A 93 02 24 07 38 95 3F B2 40 1C 21 EC 43 +B2 40 EA 42 50 43 9B 42 C0 1D 18 00 9B 82 C4 1D +18 00 9B 42 C2 1D 1A 00 9B 52 C4 1D 1A 00 82 3F +CB 43 02 00 2B 4B 82 4B 32 20 0B 93 06 24 92 4B +16 00 1E 20 B0 12 54 62 22 C3 30 41 1B 42 32 20 +0B 93 FB 27 EB 93 02 00 04 20 B0 12 C2 67 B0 12 +8A 67 CB 93 02 00 E4 37 1E 4B 18 00 9F 4B 1A 00 +00 00 31 50 06 00 3D 41 B0 12 50 63 02 24 30 40 +24 44 B2 40 3C 1D EC 43 B2 40 52 43 50 43 30 40 +0E 44 9E 4E 85 52 45 41 44 22 5A 43 19 3C 40 4F +86 57 52 49 54 45 22 00 6A 43 12 3C 06 4E 84 44 +45 4C 22 00 6A 42 0C 3C E4 51 05 43 4C 4F 53 45 +B0 12 6C 63 30 4D F8 52 85 4C 4F 41 44 22 7A 43 +2F 83 8F 4E 00 00 0E 4A 82 93 BE 1D 0A 24 87 12 +76 44 76 44 12 47 12 47 9A 44 76 44 20 64 12 47 +2A 40 87 12 76 44 22 00 E2 44 86 47 1E 64 3D 41 +35 4F 0E 55 82 4E 36 20 1C 43 92 42 2C 20 22 20 +92 42 2E 20 24 20 0E 95 8D 24 F5 90 3A 00 01 00 +01 20 25 53 F5 90 5C 00 00 00 08 20 15 53 92 42 +02 20 22 20 82 43 24 20 0E 95 70 24 82 45 34 20 +B0 12 9A 61 34 40 20 00 A2 93 02 20 04 24 92 92 +22 20 02 20 02 24 14 42 12 20 B0 12 7A 62 2C 43 +0A 43 08 4A 58 0E 08 58 82 48 30 20 C8 93 00 1E +61 24 39 42 F8 95 00 1E 04 20 18 53 19 83 FA 23 +15 53 F5 90 2E 00 FF FF 19 24 39 50 03 00 B0 12 +F8 61 06 20 F5 90 5C 00 FF FF 29 24 0E 95 27 28 +15 42 34 20 1A 53 3A 90 10 00 DB 23 92 53 1A 20 +82 63 1C 20 14 83 D1 23 2C 42 3C 3C F5 90 2E 00 +FE FF EE 27 B0 12 F8 61 EB 23 39 40 03 00 F8 95 +00 1E 04 20 18 53 19 83 FA 23 09 3C 0E 95 E0 2F +F5 90 5C 00 FF FF DC 23 B0 12 F8 61 D9 23 18 42 +30 20 92 48 1A 1E 22 20 92 48 14 1E 24 20 F8 B0 +10 00 0B 1E 14 24 82 93 24 20 06 20 82 93 22 20 +03 20 92 42 02 20 22 20 0E 95 8E 2F 92 42 22 20 +2C 20 92 42 24 20 2E 20 8F 43 00 00 03 3C 2A 4F +B0 12 84 62 34 40 00 40 35 40 0E 40 3A 4F 3E 4F +0A 93 04 24 7A 93 0D 20 0C 93 01 20 30 4D 87 12 +80 44 0B 3C 20 4F 70 65 6E 45 72 72 6F 72 3C 42 +54 61 1A 93 B6 20 0C 93 F2 23 30 4D B4 63 04 52 +45 41 44 00 2F 83 8F 4E 00 00 1E 42 32 20 B0 12 +0C 62 1E 82 32 20 30 4D 2C 43 12 12 2A 20 18 42 +02 20 08 58 2A 41 82 9A 0A 20 A1 24 B0 12 C0 60 +09 43 28 93 03 24 89 93 02 1E 03 20 89 93 00 1E +07 24 09 58 39 90 00 02 F4 23 91 53 00 00 EA 3F +0C 43 6A 41 B9 43 00 1E 28 93 0F 24 B9 40 FF 0F +02 1E 09 11 8A 10 09 5A 5A 41 01 00 0A 11 09 10 +82 4A 28 20 82 49 26 20 07 3C 09 11 C2 49 26 20 +C2 4A 27 20 82 43 28 20 3A 41 82 4A 2A 20 30 41 +0A 12 1A 52 08 20 B0 12 00 61 3A 41 1A 52 0C 20 +30 40 00 61 F2 B0 40 00 A2 04 29 20 F2 B0 10 00 +A2 04 FC 27 5A 42 B0 04 4A 11 59 42 B4 04 F2 40 +20 00 C0 04 D2 42 B1 04 C8 04 1A 52 E4 04 D2 42 +B5 04 C8 04 19 52 E4 04 D2 42 B2 04 C0 04 B2 40 +00 08 C8 04 1A 52 E4 04 92 42 B6 04 C0 04 B2 80 +BC 07 C0 04 B2 40 00 02 C8 04 19 52 E4 04 30 41 +22 2A 2B 2C 2F 3A 3B 3C 3D 3E 3F 5B 5C 5D 7C 2E +29 92 06 38 39 80 03 00 B0 12 E0 66 39 40 03 00 +7A 4B C8 4A 00 1E 82 9B 36 20 12 28 0D 12 3D 40 +0F 00 3C 40 90 66 7A 9C F3 27 1D 83 FC 23 3D 41 +6A 9C E6 27 3A 80 21 00 EB 3B 18 53 19 83 E8 23 +09 93 06 24 F8 40 20 00 00 1E 18 53 19 83 FA 23 +30 41 2A 93 D8 20 2C 93 0D 24 0C 93 A7 24 87 12 +80 44 0C 3C 20 57 72 69 74 65 45 72 72 6F 72 00 +3C 42 54 61 B0 12 A8 65 92 42 26 20 22 20 92 42 +28 20 24 20 B0 12 20 66 B0 12 7A 62 18 42 30 20 +F8 40 20 00 0B 1E B0 12 34 66 88 43 0C 1E 88 4A +0E 1E 88 49 10 1E 88 49 12 1E 98 42 24 20 14 1E +98 42 22 20 1A 1E 88 43 1C 1E 88 43 1E 1E 1C 43 +1B 42 34 20 82 9B 36 20 CA 27 FB 90 2E 00 00 00 +C6 27 39 40 0B 00 B0 12 B0 66 B0 12 CC 67 2A 43 +B0 12 84 62 0C 93 BB 23 30 4D 1A 4B 04 00 19 4B +06 00 B0 12 C6 60 B0 12 34 66 18 4B 08 00 88 49 +12 1E 88 4A 16 1E 88 49 18 1E 98 4B 12 00 1C 1E +98 4B 14 00 1E 1E 1A 4B 04 00 19 4B 06 00 30 40 +02 61 9B 52 1E 20 12 00 8B 63 14 00 1A 42 1A 20 +19 42 1C 20 30 40 02 61 B2 40 00 02 1E 20 1B 42 +32 20 B0 12 C2 67 82 43 1E 20 DB 53 03 00 DB 92 +12 20 03 00 22 20 CB 43 03 00 B0 12 6C 61 08 12 +0A 12 B0 12 A8 65 2A 91 05 24 B0 12 20 66 2A 41 +B0 12 C0 60 3A 41 38 41 98 42 26 20 00 1E 92 93 +02 20 03 24 98 42 28 20 02 1E B0 12 20 66 9B 42 +26 20 0E 00 9B 42 28 20 10 00 30 40 DA 61 C0 63 +05 57 52 49 54 45 B0 12 D8 67 30 4D 58 4B 13 00 +59 4B 14 00 89 10 09 58 58 4B 15 00 5B 42 12 20 +0A 43 3C 42 08 11 09 10 4A 10 1C 83 0B 11 FA 2B +0A 11 1C 83 FD 37 1B 42 32 20 19 5B 0A 00 18 6B +0C 00 8B 49 0E 00 8B 48 10 00 CB 4A 03 00 1A 4B +12 00 BB C0 FF 01 12 00 3A F0 FF 01 82 4A 1E 20 +B0 12 76 62 30 4D 0C 93 38 20 38 90 E0 01 03 2C +C8 93 20 1E 02 24 7C 40 E5 00 C8 4C 00 1E B0 12 +CC 67 B0 12 78 61 82 4A 2A 20 0B 4A B0 12 C0 60 +1A 48 00 1E 88 43 00 1E 92 93 02 20 09 24 19 48 +02 1E 88 43 02 1E 39 F0 FF 0F 39 90 FF 0F 02 20 +3A 93 0E 24 82 4A 22 20 82 49 24 20 B0 12 78 61 +0B 9A E6 27 0A 12 0A 4B B0 12 20 66 3A 41 DD 3F +0A 4B B0 12 20 66 B0 12 6C 63 30 4D 38 4C 08 54 +45 52 4D 32 53 44 22 00 87 12 D4 63 76 44 02 00 +02 47 86 47 20 64 38 69 3D 41 92 C3 DC 05 08 43 +B0 12 B6 42 92 B3 DC 05 FD 27 59 42 CC 05 69 92 +0D 24 C8 49 00 1E 18 53 38 90 FF 01 F3 2B 03 24 +B0 12 D8 67 EC 3F B0 12 C8 42 EC 3F B0 12 C8 42 +82 48 1E 20 B0 12 6C 63 30 4D @FFFE -BC 53 +F6 50 q diff --git a/binaries/MSP_EXP430FR5994_1MHz.txt b/binaries/MSP_EXP430FR5994_1MHz.txt index 87c799d..26dbff0 100644 --- a/binaries/MSP_EXP430FR5994_1MHz.txt +++ b/binaries/MSP_EXP430FR5994_1MHz.txt @@ -1,709 +1,670 @@ @1800 -10 00 08 00 00 D6 E8 03 05 00 18 00 DC 6B 46 4F -2C 01 FF B3 5A 44 6C 44 FA 62 36 63 +10 00 08 00 00 D6 E8 03 05 00 18 00 68 69 C4 4D +2D 01 FF B3 B6 42 C8 42 B4 60 F0 60 @4000 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 40 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 40 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 40 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 40 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 40 02 3E 52 00 -0E 12 3E 4F 30 4D 96 40 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 40 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 40 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 40 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 41 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 40 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 41 02 31 2D 00 -1E 83 30 4D D8 40 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 41 -02 30 3D 00 1E 83 0E 7E 30 4D 60 41 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 41 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 40 01 3E 3E 8F F4 3B EB 37 0E 41 02 42 4C 00 -85 12 20 00 AC 41 04 42 41 53 45 00 85 12 DC 1D -C8 40 05 53 54 41 54 45 85 12 BE 1D 96 41 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 41 06 55 4D 2F -4D 4F 44 00 30 12 62 40 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 40 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 41 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 41 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 42 -02 23 53 00 87 12 32 42 6A 42 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 42 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 41 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 41 -02 44 2E 00 87 12 D2 41 44 40 B0 40 4C 41 64 42 -BC 40 A2 42 7E 42 7C 45 44 45 2A 40 DC 41 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 40 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 42 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 40 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 42 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 42 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 42 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 41 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 43 03 4B 45 59 30 40 A0 43 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 5A 44 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 6C 44 30 4D 0D 12 -3D 40 DE 43 1B 42 32 20 9B 42 1E 20 16 00 3A 4F -09 4E 0E 43 1C 42 1E 20 1B 42 20 20 02 3C E0 43 -2D 83 0C 9B 14 2C 58 4C 00 1E 1C 53 78 90 20 00 -07 2C 78 90 0A 00 F5 23 82 4C 1E 20 3D 41 30 4D -0E 99 56 24 CA 48 00 00 1A 53 1E 53 51 3C 1A 15 -B0 12 3E 64 19 17 DE 3F 00 43 06 41 43 43 45 50 -54 00 30 40 26 44 3C 40 C8 44 3B 40 92 44 2D 15 -0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 -BC 44 92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 -04 20 21 53 39 40 80 44 4D 15 A2 B3 DC 05 FD 27 -B2 40 11 00 CE 05 E2 C2 23 02 30 41 B2 40 13 00 -CE 05 E2 D2 23 02 30 41 00 00 05 53 4C 45 45 50 -30 40 84 44 12 D2 0A 18 FB 3F 21 52 3A 17 58 42 -CC 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 2E 9F -0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 1E 53 -A2 B3 DC 05 FD 27 82 48 CE 05 30 4D BE 44 2D 83 -92 B3 DC 05 E4 23 FC 27 82 93 DE 1D 02 24 92 53 -DE 1D 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D B0 42 -04 45 4D 49 54 00 30 40 EA 44 08 4E 3E 4F E0 3F -10 43 03 43 49 42 85 12 3C 1D 3F 80 06 00 8F 4E -04 00 3E 40 54 00 9F 42 F8 44 00 00 AF 4F 02 00 -88 3F E0 44 04 45 43 48 4F 00 B2 40 82 48 B6 44 -82 43 DE 1D 30 4D E0 42 06 4E 4F 45 43 48 4F 00 -B2 40 30 4D B6 44 92 43 DE 1D 30 4D 9C 42 05 53 -50 41 43 45 2F 83 8F 4E 00 00 3E 40 20 00 CB 3F -3E 45 06 53 50 41 43 45 53 00 0E 93 09 24 0D 12 -3D 40 66 45 EF 3F 68 45 2D 83 1E 83 EB 23 3D 41 -3E 4F 30 4D 66 43 04 54 59 50 45 00 0E 93 0F 24 -1E 15 3D 40 92 45 28 4F 7E 48 8F 48 00 00 2F 83 -AA 3F 94 45 2D 83 91 83 02 00 F5 23 1D 17 2F 53 -3E 4F 30 4D F2 44 02 43 52 00 30 40 AE 45 87 12 -BA 45 02 0D 0A 00 7C 45 2A 40 2F 82 8F 4E 02 00 -7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 30 4D 52 45 -82 53 22 00 82 43 B4 1D 87 12 34 40 BA 45 30 48 -34 40 22 00 1E 46 E8 45 3D 41 B2 40 20 00 B4 1D -6E 4E 1E 83 82 5E C6 1D 3E 4F 92 B3 C6 1D A2 63 -C6 1D 30 4D 28 45 82 2E 22 00 87 12 D4 45 34 40 -7C 45 30 48 2A 40 00 00 04 57 4F 52 44 00 3C 40 -C0 1D 39 4C 3A 4C 09 5A 3A 5C 28 4C 09 9A 19 24 -7E 9A FC 27 1A 83 3B 40 60 00 C8 4C 00 00 09 9A -0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 -7B 00 F3 2F 5C 82 B4 1D F0 3F 1A 82 C2 1D 82 4A -C4 1D 1E 42 C6 1D 08 8E CE 48 00 00 30 4D 00 00 -04 46 49 4E 44 00 2F 83 0C 4E 65 4C 74 40 80 00 -3B 40 CA 1D 3E 4B 0E 93 1E 24 58 4C 01 00 78 F0 -1E 00 0E 58 2E 53 1E 4E FE FF 0E 93 F3 27 09 4E -78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 -1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 -4A 93 01 30 2E 83 8F 4C 00 00 35 40 0E 40 34 40 -00 40 30 4D A2 41 07 3E 4E 55 4D 42 45 52 3C 4F -38 4F 29 4F 2F 82 1B 42 DC 1D 6A 4C 7A 80 30 00 -7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 -0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B -C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 -1E 83 E3 23 8F 4C 00 00 8F 48 02 00 8F 49 04 00 -30 4D 1B 42 DC 1D 0C 43 2D 15 3D 40 78 47 09 43 -08 43 3F 82 8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 -2D 00 04 28 CB 23 B1 43 02 00 E1 3F 2B 43 7A 80 -25 00 07 24 3B 52 6A 53 04 24 3B 40 10 00 5A 83 -BC 23 1C 53 1E 83 EA 3F 7A 47 2F 24 2D 83 7A 90 -28 00 CD 27 32 D0 00 02 7A 90 F7 00 C8 27 7A 90 -F5 00 23 20 0A 4E 09 43 8F 49 02 00 5A 83 09 4A -09 5C 69 49 79 80 30 00 79 90 0A 00 05 28 79 80 -07 00 79 90 0A 00 0A 28 09 9B 08 2C 8F 49 00 00 -0E 4B 2C 15 B0 12 E8 41 2A 17 E6 3F 9F 4F 04 00 -02 00 AF 4F 04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B -DC 1D 06 24 32 C0 00 02 3F 50 06 00 0E F3 30 4D -2F 53 9F 4F 02 00 04 00 BF 4F 00 00 3E E3 09 20 -3E E3 BF E3 02 00 BF E3 00 00 9F 53 02 00 8F 63 -00 00 32 B0 00 02 01 20 2F 53 30 4D 14 45 07 45 -58 45 43 55 54 45 0A 4E 3E 4F 00 4A 26 41 01 2C -1A 42 C6 1D A2 53 C6 1D 8A 4E 00 00 3E 4F 30 4D -2E 48 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 -1A 42 C6 1D A2 52 C6 1D BA 40 34 40 00 00 8A 4E -02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A -02 00 8A 4E 02 00 0E 49 EB 3F 30 4D A6 45 05 43 -4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF -30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D -30 4D 87 12 92 48 B0 41 1E 46 AC 48 3D 40 B4 48 -E2 22 5D 3E B6 48 0A 4E 3E 4F 3D 40 CC 48 39 27 -3D 40 A6 48 1A E2 BE 1D B3 27 AD 23 CE 48 3E 4F -3D 40 A6 48 BA 23 DE 53 00 00 68 4E 08 5E F8 40 -3F 00 00 00 3D 40 EC 4B CD 3F 1E 48 08 45 56 41 -4C 55 41 54 45 00 39 40 C0 1D 3C 49 3B 49 3A 49 -3D 15 B0 12 2A 40 A2 48 0A 49 B2 41 C4 1D B2 41 -C2 1D B2 41 C0 1D 3D 41 30 4D 82 43 08 18 31 40 -E0 1C B2 40 00 1C 00 1C 82 43 BE 1D 30 4D 7E 48 -04 42 4F 4F 54 00 82 93 08 18 1D 24 E2 B2 60 02 -1A 20 2F 83 8F 4E 00 00 1E 42 08 18 B0 12 2A 40 -30 45 1A 49 BA 45 0F 4C 4F 41 44 22 20 42 4F 4F -54 2E 34 54 48 22 24 43 82 49 6C 41 04 51 55 49 -54 00 30 40 76 49 B0 12 2A 40 1A 49 AA 45 FA 44 -44 45 A2 48 DE 40 70 41 BA 45 0C 73 74 61 63 6B -20 65 6D 70 74 79 21 00 DA 49 34 40 30 FF F2 42 -8A 41 BA 45 0A 46 52 41 4D 20 66 75 6C 6C 21 00 -DA 49 24 43 7C 49 1A 44 05 41 42 4F 52 54 3F 40 -80 1C D7 3F B8 49 86 41 42 4F 52 54 22 00 87 12 -D4 45 34 40 DA 49 30 48 2A 40 8F 93 02 00 03 20 -2F 52 3E 4F 30 4D B0 12 B2 51 1B 42 32 20 0B 93 -04 24 CB 43 02 00 2B 4B FA 3F B0 12 5A 44 92 C3 -DC 05 38 40 AA 0A 39 42 09 59 03 43 19 83 FD 23 -18 83 F9 23 92 B3 DC 05 F2 23 87 12 26 51 34 40 -DE 1D F2 40 1A 45 BA 45 04 1B 5B 37 6D 00 7C 45 -54 40 28 43 46 4A AA 45 BA 45 05 6C 69 6E 65 3A -7C 45 40 41 D2 42 7C 45 BA 45 04 1B 5B 30 6D 00 -7C 45 BE 49 00 00 83 5B 27 5D 87 12 6C 4A 34 40 -34 40 30 48 30 48 2A 40 70 46 01 27 87 12 B0 41 -1E 46 76 46 28 43 7A 4A 2A 40 D6 48 CE 41 81 5C -92 42 C0 1D C4 1D 30 4D 56 4A 81 5B 82 43 BE 1D -30 4D 7E 4A 01 5D B2 43 BE 1D 30 4D BE 4F 02 00 -3E 4F 30 4D 72 43 82 49 53 00 87 12 C8 41 F2 40 -28 43 BE 4A 5A 4A 34 40 9C 4A 30 48 2A 40 6C 4A -9C 4A 2A 40 A6 4A 09 49 4D 4D 45 44 49 41 54 45 -1A 42 B6 1D FA D0 80 00 00 00 30 4D D0 45 87 52 -45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D 00 00 -A2 53 C6 1D 30 4D 6C 49 88 50 4F 53 54 50 4F 4E -45 00 87 12 B0 41 1E 46 76 46 54 40 28 43 7A 4A -70 41 28 43 22 4B 34 40 34 40 30 48 30 48 34 40 -30 48 30 48 2A 40 8A 4A 81 3B 82 93 BE 1D A8 27 -87 12 34 40 2A 40 30 48 C0 4B 8C 4A 2A 40 28 4B -07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 1E 42 -C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 AC 4B -BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 82 4F -BC 1D 30 4D 40 4B 01 3A 30 12 60 4B 87 12 FA 45 -B0 41 1E 46 86 4B 3D 41 08 4E 7A 4E 5A D3 5A 53 -0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E 3E 4F -BA 40 30 40 00 00 BA 40 72 4B 02 00 82 48 B6 1D -82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D 30 41 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 40 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 40 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 40 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 40 02 3E 52 00 0E 12 3E 4F 30 4D 70 40 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 40 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 40 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 40 +01 21 BE 4F 00 00 3E 4F 30 4D CC 40 02 30 3D 00 +1E 83 0E 7E 30 4D FC 40 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 41 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 40 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 41 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 41 02 23 53 00 87 12 88 41 C0 41 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 41 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 40 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 41 34 40 86 40 D4 40 BA 41 +92 40 F8 41 D4 41 38 44 A4 47 E0 43 2A 40 22 41 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 41 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 42 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 42 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 42 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C2 23 02 30 41 B2 40 13 00 CE 05 E2 D2 +23 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 42 +B0 12 B6 42 12 D2 0A 18 F9 3F 0D 12 3D 40 0A 43 +1B 42 32 20 9B 42 1E 20 16 00 3A 4F 09 4E 0E 43 +1C 42 1E 20 1B 42 20 20 02 3C 0C 43 2D 83 0C 9B +14 2C 58 4C 00 1E 1C 53 78 90 20 00 07 2C 78 90 +0A 00 F5 23 82 4C 1E 20 3D 41 30 4D 0E 99 3D 24 +CA 48 00 00 1A 53 1E 53 38 3C 1A 15 B0 12 FA 61 +19 17 DE 3F F0 40 06 41 43 43 45 50 54 00 30 40 +52 43 3C 40 C2 43 3B 40 8C 43 2D 15 0A 4E 2E 4F +0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 B6 43 92 B3 +DC 05 05 24 18 42 CC 05 38 90 0A 00 9C 23 21 53 +3D 15 AC 3F 21 52 3A 17 58 42 CC 05 48 9C 08 2C +48 9B 9A 27 78 92 11 20 2E 9F 0F 24 1E 83 05 3C +0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 FD 27 +82 48 CE 05 30 4D B8 43 2D 83 92 B3 DC 05 E4 23 +FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 +B2 40 18 00 0A 18 30 4D 9E 40 04 45 4D 49 54 00 +30 40 E4 43 08 4E 3E 4F E0 3F 85 12 3C 1D 3F 80 +06 00 8F 4E 04 00 3E 40 54 00 9F 42 EC 43 00 00 +AF 4F 02 00 A4 3F DA 43 04 45 43 48 4F 00 B2 40 +82 48 B0 43 82 43 DE 1D 30 4D 32 42 06 4E 4F 45 +43 48 4F 00 B2 40 30 4D B0 43 92 43 DE 1D 30 4D +20 42 04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 +4E 44 28 4F 7E 48 8F 48 00 00 2F 83 C9 3F 50 44 +2D 83 91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D +D0 41 02 43 52 00 30 40 6A 44 87 12 80 44 02 0D +0A 00 38 44 2A 40 2F 83 8F 4E 00 00 3E 4D 30 4D +2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 +0D 63 30 4D F2 41 82 53 22 00 82 43 B4 1D 87 12 +76 44 80 44 12 47 76 44 22 00 E2 44 AE 44 B2 40 +20 00 B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 +3E 4F 30 4D 1C 44 82 2E 22 00 87 12 9A 44 76 44 +38 44 12 47 2A 40 48 43 05 3C 00 00 04 57 4F 52 +44 00 48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 +C4 1D 09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 +0E 4A 1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D +3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C +09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 +B4 1D F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D +08 8E CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 +2F 83 0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B +0E 93 1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 +1E 4E FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 +F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 +19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 +8F 4C 00 00 35 40 0E 40 34 40 00 40 30 4D 82 40 +07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 +1B 42 DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 +7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C +82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 +18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C +00 00 8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 +1B 42 DC 1D 0C 43 2D 15 3D 40 56 46 09 43 08 43 +3F 82 8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 +04 28 C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 +07 24 3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 +1C 53 1E 83 EA 3F 58 46 2F 24 2D 83 7A 90 28 00 +CB 27 32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 +23 20 0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C +69 49 79 80 30 00 79 90 0A 00 05 28 79 80 07 00 +79 90 0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B +2C 15 B0 12 3E 41 2A 17 E6 3F 9F 4F 04 00 02 00 +AF 4F 04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D +06 24 32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 +9F 4F 02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 +BF E3 02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 +32 B0 00 02 01 20 2F 53 30 4D 7E 42 04 48 45 52 +45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 40 +01 2C 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F +30 4D 46 43 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F +30 4D 08 44 07 45 58 45 43 55 54 45 0A 4E 3E 4F +00 4A 10 47 87 4C 49 54 45 52 41 4C 82 93 BE 1D +0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 76 44 00 00 +8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 +19 4A 02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 62 44 +05 43 4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E +FF FF 30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 +C4 1D 30 4D 85 12 20 00 87 12 94 47 A4 47 E2 44 +B2 47 3D 40 BA 47 CC 22 82 3E BC 47 0A 4E 3E 4F +3D 40 D2 47 23 27 3D 40 AC 47 1A E2 BE 1D A1 27 +B5 23 D4 47 3E 4F 3D 40 AC 47 B8 23 DE 53 00 00 +68 4E 08 5E F8 40 3F 00 00 00 3D 40 CC 4A CB 3F +34 47 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D +3C 49 3B 49 3A 49 3D 15 B0 12 2A 40 A8 47 10 48 +B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D +85 12 BE 1D 82 43 08 18 31 40 E0 1C B2 40 00 1C +00 1C 82 43 BE 1D 30 4D 80 47 04 42 4F 4F 54 00 +82 93 08 18 1D 24 E2 B2 60 02 1A 20 2F 83 8F 4E +00 00 1E 42 08 18 B0 12 2A 40 24 44 24 48 80 44 +0F 4C 4F 41 44 22 20 42 4F 4F 54 2E 34 54 48 22 +3C 42 8E 48 08 41 04 51 55 49 54 00 30 40 80 48 +B0 12 2A 40 24 48 66 44 EE 43 A4 47 E0 43 A8 47 +A4 40 0C 41 80 44 0C 73 74 61 63 6B 20 65 6D 70 +74 79 21 00 E6 48 76 44 30 FF 02 47 26 41 80 44 +0A 46 52 41 4D 20 66 75 6C 6C 21 00 E6 48 3C 42 +86 48 24 47 05 41 42 4F 52 54 3F 40 80 1C D6 3F +C4 48 86 41 42 4F 52 54 22 00 87 12 9A 44 76 44 +E6 48 12 47 2A 40 8F 93 02 00 03 20 2F 52 3E 4F +30 4D B0 12 EC 4E B0 12 B6 42 92 C3 DC 05 38 40 +AA 0A 39 42 03 43 19 83 FD 23 18 83 FA 23 92 B3 +DC 05 F3 23 87 12 60 4E 76 44 DE 1D EA 40 0E 44 +80 44 04 1B 5B 37 6D 00 38 44 58 40 40 42 40 49 +66 44 80 44 05 6C 69 6E 65 3A 38 44 D0 40 24 42 +38 44 80 44 04 1B 5B 30 6D 00 38 44 CA 48 00 00 +83 5B 27 5D 87 12 66 49 76 44 76 44 12 47 12 47 +2A 40 4A 45 01 27 87 12 A4 47 E2 44 50 45 40 42 +74 49 2A 40 DC 47 32 41 81 5C 92 42 C0 1D C4 1D +30 4D 50 49 81 5B 82 43 BE 1D 30 4D 78 49 01 5D +B2 43 BE 1D 30 4D BE 4F 02 00 3E 4F 30 4D FC 46 +82 49 53 00 87 12 20 48 EA 40 40 42 B8 49 54 49 +76 44 96 49 12 47 2A 40 66 49 96 49 2A 40 A0 49 +09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 1D FA D0 +80 00 00 00 30 4D 76 48 88 50 4F 53 54 50 4F 4E +45 00 87 12 A4 47 E2 44 50 45 58 40 40 42 74 49 +0C 41 40 42 02 4A 76 44 76 44 12 47 12 47 76 44 +12 47 12 47 2A 40 84 49 81 3B 82 93 BE 1D B5 27 +87 12 76 44 2A 40 12 47 A0 4A 86 49 2A 40 08 4A +07 3A 4E 4F 4E 41 4D 45 30 12 46 4A 2F 83 8F 4E +00 00 1E 42 C6 1D 1E B3 0E 63 0A 4E 39 40 00 02 +38 40 02 02 21 3C BA 40 87 12 FC FF A2 83 C6 1D +B2 43 BE 1D 30 4D 20 4A 01 3A 30 12 46 4A 92 B3 +C6 1D A2 63 C6 1D 87 12 A4 47 E2 44 6E 4A 3D 41 +08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E +3E F0 1E 00 09 5E 3E 4F 82 48 B6 1D 82 49 B8 1D +82 4A BA 1D 82 4F BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D A8 49 -FE FF 89 48 00 00 30 4D 87 12 BA 45 0F 73 74 61 -63 6B 20 6D 69 73 6D 61 74 63 68 21 E6 49 18 46 -08 56 41 52 49 41 42 4C 45 00 B0 12 7C 4B BA 40 -86 12 FC FF E4 3F 30 49 08 43 4F 4E 53 54 41 4E -54 00 B0 12 7C 4B BA 40 85 12 FC FF 8A 4E FE FF -3E 4F D5 3F 08 4C 06 43 52 45 41 54 45 00 B0 12 -7C 4B BA 40 85 12 FC FF 8A 4A FE FF C8 3F EC 48 -05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 -8A 4D 02 00 3D 41 30 4D 40 4C 05 44 45 46 45 52 -30 12 CE 4B 8B 3F D6 46 05 3E 42 4F 44 59 2E 52 -30 4D 26 4C 04 43 4F 44 45 00 B0 12 7C 4B 2A 82 -82 4A C6 1D 87 12 6E 4B 50 4F 22 4F 2A 40 74 4C -07 43 4F 44 45 4E 4E 4D 87 12 48 4B 8C 4A 7E 4C -2A 40 00 00 07 45 4E 44 43 4F 44 45 87 12 6A 4F -C0 4B 2A 40 C6 49 03 41 53 4D 92 42 DA 1D EC 1D -B2 40 26 4F DA 1D D9 3F A4 4C 06 45 4E 44 41 53 -4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 4F 4C -4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 C6 1D -B2 43 BE 1D 30 40 6A 4F 00 00 05 4C 4F 32 48 49 -1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 40 02 00 -A2 52 C6 1D ED 3F C6 4A 85 48 49 32 4C 4F 87 12 -F2 42 48 4D 30 48 8C 4A 50 4F 22 4F 2A 40 18 4D -82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D A2 52 -C6 1D BE 40 28 43 00 00 2E 53 30 4D 5A 4C 84 45 -4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 24 43 -FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 76 45 84 54 -48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D 90 4C -85 42 45 47 49 4E 30 40 F2 42 6E 4D 85 55 4E 54 -49 4C 39 40 28 43 A2 52 C6 1D 1A 42 C6 1D 8A 49 -FC FF 8A 4E FE FF 3E 4F 30 4D B6 4C 85 41 47 41 -49 4E 39 40 24 43 EF 3F F0 4B 85 57 48 49 4C 45 -87 12 34 4D 78 40 2A 40 DE 4A 86 52 45 50 45 41 -54 00 87 12 B2 4D 74 4D 2A 40 4E 4D 82 44 4F 00 -2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D BE 40 -3C 43 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 00 00 -30 4D 42 48 84 4C 4F 4F 50 00 39 40 5E 43 A2 52 -C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 -00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A 00 00 -F6 3F 3E 4F 30 4D 98 43 85 2B 4C 4F 4F 50 39 40 -4C 43 E5 3F 04 4E 85 4C 45 41 56 45 1A 42 C6 1D -BA 40 6E 43 00 00 BA 40 24 43 02 00 B2 50 06 00 -C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A 00 00 -30 4D 46 4E 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F -3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 -18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 -E8 49 00 00 1A 83 FA 23 30 4D BA 4D 0A 56 4F 43 -41 42 55 4C 41 52 59 00 87 12 2E 4C 34 40 10 00 -34 40 00 00 3C 43 34 40 00 00 30 48 5E 43 C6 4E -F2 42 34 40 C8 1D 44 40 F2 40 30 48 FA 40 46 4C -34 40 CA 1D FA 40 2A 40 6A 4A 05 46 4F 52 54 48 -84 12 E0 4E 4A 4F 0C 66 00 66 EA 4E 30 4D 38 4E -1A 66 7A 4F 4A 51 8A 6A 80 6B 7C 6A 00 00 88 50 -94 4A 68 4C 00 00 AC 4D 09 41 53 53 45 4D 42 4C -45 52 84 12 E0 4E DA 60 72 60 D6 5F 68 5B 10 5A -8C 5B 9E 5E 00 00 00 62 12 62 68 5A A6 5A A6 60 -00 00 00 00 9A 5B 14 4F 18 4F 04 41 4C 53 4F 00 -3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F F8 4A -08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 39 40 -CC 1D 38 40 CA 1D 8A 3F 06 46 04 4F 4E 4C 59 00 -82 43 CC 1D 30 4D DC 4D 0B 44 45 46 49 4E 49 54 -49 4F 4E 53 92 42 CA 1D DA 1D 30 4D 80 4D 07 43 -4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B -0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 -FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D 76 4B -86 5B 54 48 45 4E 5D 00 30 4D D0 4F 86 5B 45 4C -53 45 5D 00 87 12 34 40 00 00 36 41 B0 41 1E 46 -84 48 44 40 28 43 4A 50 8A 40 8A 40 BA 45 06 5B -54 48 45 4E 5D 00 A6 4F 32 43 18 50 9E 45 40 41 -54 40 32 43 EC 4F 2A 40 8A 40 8A 40 BA 45 06 5B -45 4C 53 45 5D 00 A6 4F 32 43 38 50 9E 45 40 41 -54 40 32 43 EA 4F 2A 40 BA 45 04 5B 49 46 5D 00 -A6 4F 32 43 EC 4F 24 43 EA 4F 9E 45 BA 45 05 0D -0A 6B 6F 20 7C 45 FA 44 92 48 24 43 EC 4F DC 4F -84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D 60 50 -89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 41 1E 46 -76 46 6C 40 2A 40 70 50 8B 5B 55 4E 44 45 46 49 -4E 45 44 5D 87 12 B0 41 1E 46 76 46 6C 40 64 41 -2A 40 A4 50 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F -44 3C 74 4E 06 4D 41 52 4B 45 52 00 B0 12 7C 4B -BA 40 84 12 FC FF BA 40 A2 50 FE FF 9A 42 C8 1D -00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 C6 4B -F0 4E 80 4F 94 4F E8 50 3A 4E 82 4A C8 1D 2E 4E -82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 18 48 -FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 2A 4A -0A 93 F0 23 3E 4F 3D 41 30 4D 60 4F 09 50 57 52 -5F 53 54 41 54 45 84 12 E0 50 46 4F DC 6B CA 4D -09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 2A 51 -92 42 0C 18 2C 51 EF 3F 1C 51 08 50 57 52 5F 48 -45 52 45 00 92 42 C8 1D 2A 51 92 42 C6 1D 2C 51 -30 4D 30 51 08 52 53 54 5F 48 45 52 45 00 92 42 -C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F AC 4E 04 57 -49 50 45 00 39 40 10 00 29 83 B9 43 80 FF FC 23 -B2 40 84 44 82 44 B2 40 0C 52 0A 52 B2 40 76 49 -74 49 B2 40 46 4F 0E 18 B2 40 DC 6B 0C 18 30 12 -3A 51 B2 40 EA 44 E8 44 B2 40 AE 45 AC 45 B2 40 -A0 43 9E 43 B2 40 26 44 24 44 B2 40 3C 1D F8 44 -B2 40 18 00 0A 18 37 40 1A 40 36 40 BC 40 35 40 -0E 40 34 40 00 40 39 40 10 00 29 83 89 43 E0 1D -FC 23 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 -7E 51 04 57 41 52 4D 00 30 40 0C 52 3D 40 5A 53 -92 C3 30 01 1E 42 08 18 0E 93 9E 24 D2 B3 01 02 -02 20 3E E3 1E 53 F2 D0 03 00 0D 02 E2 B2 60 02 -8A 20 39 42 B0 12 D2 62 D2 C3 23 02 2C 42 B2 40 -95 00 14 20 B2 40 00 40 18 20 B0 12 48 62 02 24 -30 40 6E 63 B0 12 D0 62 7A 93 FC 23 B2 40 87 AA -14 20 92 43 16 20 B2 40 00 48 18 20 B0 12 48 62 -29 42 B0 12 D2 62 92 43 14 20 82 43 16 20 78 43 -3C 42 B2 40 00 77 18 20 B0 12 48 62 B2 40 40 69 -18 20 B0 12 8E 62 03 24 58 83 F3 23 D9 3F 0C 5C -A2 43 16 20 B2 40 00 50 18 20 B0 12 8E 62 D0 23 -92 D3 40 06 82 43 46 06 92 C3 40 06 B0 12 F8 62 -38 40 00 1E 92 48 C6 01 04 20 92 48 C8 01 06 20 -5A 48 C2 01 92 43 02 20 7A 80 06 00 0F 24 7A 82 -0D 24 A2 43 02 20 6A 53 09 24 5A 53 07 24 6A 52 -05 24 3A 50 0B 20 0C 4A 30 40 74 63 B0 12 F8 62 -D2 48 0D 00 12 20 19 48 0E 00 82 49 08 20 1A 48 -16 00 0A 93 02 20 1A 48 24 00 82 4A 0A 20 09 5A -82 49 0C 20 09 5A A2 93 02 20 04 24 82 49 0E 20 -39 50 20 00 19 82 12 20 19 82 12 20 82 49 10 20 -92 42 02 20 2C 20 3E 90 0A 00 1C 27 3E 90 16 00 -19 2F 2E 93 E8 26 F1 2E 30 4D BA 45 06 0D 1B 5B -37 6D 23 00 7C 45 E2 42 BA 45 1F 46 61 73 74 46 -6F 72 74 68 20 56 33 30 30 20 28 43 29 4A 2E 4D -2E 54 68 6F 6F 72 65 6E 73 20 7C 45 34 40 80 FF -F2 42 28 41 D2 42 BA 45 0B 62 79 74 65 73 20 66 -72 65 65 20 24 43 46 4A 9E 4F 04 43 4F 4C 44 00 -92 B3 CA 05 FD 23 B2 40 04 A5 20 01 B2 40 88 5A -5C 01 B2 D0 03 00 04 02 B2 40 FC FF 02 02 B2 C0 -03 00 06 02 B2 43 26 02 B2 43 22 02 E2 D2 25 02 -B2 43 42 02 B2 D3 46 02 B2 43 62 02 B2 D3 66 02 -F2 43 26 03 F2 D3 22 03 F2 40 A5 00 61 01 82 43 -62 01 82 43 66 01 39 40 10 00 B2 40 33 00 64 01 -D2 43 61 01 92 D2 9E 01 08 18 38 40 59 14 18 83 -FE 23 19 83 FA 23 F2 D0 10 00 2A 03 F2 40 A5 00 -A1 04 F2 C0 40 00 A2 04 B2 42 B0 01 39 40 00 10 -29 83 89 43 00 1C FC 23 39 40 4C 00 29 83 B9 40 -BC 53 B4 FF FB 23 B2 40 8A 44 F0 FF B2 40 81 00 -C0 05 92 42 02 18 C6 05 92 42 04 18 C8 05 92 C3 -C0 05 92 D3 DA 05 B2 40 81 A9 40 06 B2 40 03 00 -46 06 D2 D3 25 02 B2 D0 C0 04 0C 02 92 C3 40 06 -3F 40 80 1C 31 40 E0 1C 30 12 08 52 99 3E 38 40 -C0 1D 39 48 2A 48 09 5A 1A 52 C4 1D 09 9A 03 24 -7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D 30 4D -64 51 09 32 43 4F 4E 53 54 41 4E 54 87 12 2E 4C -30 48 30 48 46 4C D8 54 2F 83 9F 4E 02 00 00 00 -2E 4E 3D 41 30 4D C2 54 09 32 56 41 52 49 41 42 -4C 45 87 12 2E 4C 34 40 04 00 06 43 46 4C 2A 40 -1C 15 B0 12 2A 40 1E 46 76 46 32 43 16 55 32 47 -28 43 7A 4A 4E 55 18 55 29 4E 39 90 86 12 02 20 -2E 53 15 3C 39 90 85 12 03 20 1E 4E 02 00 0F 3C -39 90 84 12 0C 20 2E 52 B9 90 D6 54 02 00 04 24 -B9 90 FE 54 02 00 03 20 B0 12 D8 54 4E 55 1B 17 -30 41 32 B0 00 02 01 24 3E 4F 30 41 3E 40 28 00 -B0 12 00 55 B0 12 52 55 19 42 C6 1D A2 53 C6 1D -89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D 92 53 -C4 1D B0 12 2A 40 1E 46 32 47 28 43 9A 55 90 55 -21 53 3E 90 10 00 87 2D DA 2B 9C 55 B2 41 C4 1D -D6 3F 87 12 B0 41 9E 54 AA 55 0C 43 1B 42 C6 1D -A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 2F 20 92 53 -C4 1D B0 12 00 55 B0 12 52 55 0E 93 03 20 3C 40 -00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 -03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 -12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 -3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 1D A2 53 -C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 -09 20 3C 40 10 02 92 53 C4 1D B0 12 00 55 B0 12 -52 55 EB 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 -C4 1D B0 12 78 55 0C 20 3C 50 10 00 3E 40 2B 00 -B0 12 78 55 92 92 C0 1D C4 1D 02 24 92 53 C4 1D -8E 10 0C 5E D8 3F B0 12 78 55 FA 23 3C 50 10 00 -B0 12 5C 55 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D -87 12 B0 41 9E 54 88 56 FE 90 26 00 00 00 3E 40 -20 00 03 20 3C 50 82 00 C6 3F B0 12 78 55 E1 23 -3C 50 80 00 B0 12 5C 55 DC 3F 7A 44 04 52 45 54 -49 00 87 12 34 40 00 13 30 48 2A 40 34 40 2C 00 -A2 55 80 56 C6 56 2E 4E 0E DC 09 4B A2 3F FA 4C -03 4D 4F 56 84 12 BC 56 00 40 D0 56 05 4D 4F 56 -2E 42 84 12 BC 56 40 40 00 00 03 41 44 44 84 12 -BC 56 00 50 EA 56 05 41 44 44 2E 42 84 12 BC 56 -40 50 F6 56 04 41 44 44 43 00 84 12 BC 56 00 60 -04 57 06 41 44 44 43 2E 42 00 84 12 BC 56 40 60 -AC 56 04 53 55 42 43 00 84 12 BC 56 00 70 22 57 -06 53 55 42 43 2E 42 00 84 12 BC 56 40 70 30 57 -03 53 55 42 84 12 BC 56 00 80 40 57 05 53 55 42 -2E 42 84 12 BC 56 40 80 DC 4C 03 43 4D 50 84 12 -BC 56 00 90 5A 57 05 43 4D 50 2E 42 84 12 BC 56 -40 90 CA 4C 04 44 41 44 44 00 84 12 BC 56 00 A0 -74 57 06 44 41 44 44 2E 42 00 84 12 BC 56 40 A0 -66 57 03 42 49 54 84 12 BC 56 00 B0 92 57 05 42 -49 54 2E 42 84 12 BC 56 40 B0 9E 57 03 42 49 43 -84 12 BC 56 00 C0 AC 57 05 42 49 43 2E 42 84 12 -BC 56 40 C0 B8 57 03 42 49 53 84 12 BC 56 00 D0 -C6 57 05 42 49 53 2E 42 84 12 BC 56 40 D0 00 00 -03 58 4F 52 84 12 BC 56 00 E0 E0 57 05 58 4F 52 -2E 42 84 12 BC 56 40 E0 12 57 03 41 4E 44 84 12 -BC 56 00 F0 FA 57 05 41 4E 44 2E 42 84 12 BC 56 -40 F0 B0 41 A2 55 18 58 0A 4C 3C F0 70 00 8A 10 -3A F0 0F 00 0C DA 4F 3F 4C 57 03 52 52 43 84 12 -12 58 00 10 2A 58 05 52 52 43 2E 42 84 12 12 58 -40 10 36 58 04 53 57 50 42 00 84 12 12 58 80 10 -44 58 03 52 52 41 84 12 12 58 00 11 52 58 05 52 -52 41 2E 42 84 12 12 58 40 11 5E 58 03 53 58 54 -84 12 12 58 80 11 00 00 04 50 55 53 48 00 84 12 -12 58 00 12 78 58 06 50 55 53 48 2E 42 00 84 12 -12 58 40 12 D2 57 04 43 41 4C 4C 00 84 12 12 58 -80 12 1A 53 0E 4A 87 12 E2 42 BA 45 0D 6F 75 74 -20 6F 66 20 62 6F 75 6E 64 73 E6 49 B0 41 9E 54 -C2 58 92 53 C4 1D 3E 40 2C 00 B0 12 2A 40 1E 46 -32 47 28 43 7A 4A 76 56 DA 58 0A 4E 3E 4F 1A 83 -E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A -08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F -8A 10 5A 06 8F 3F 6C 58 06 52 52 43 4D 2E 41 00 -84 12 BC 58 40 00 08 59 04 52 52 43 4D 00 84 12 -BC 58 50 00 18 59 06 52 52 41 4D 2E 41 00 84 12 -BC 58 40 01 26 59 04 52 52 41 4D 00 84 12 BC 58 -50 01 36 59 06 52 4C 41 4D 2E 41 00 84 12 BC 58 -40 02 44 59 04 52 4C 41 4D 00 84 12 BC 58 50 02 -54 59 06 52 52 55 4D 2E 41 00 84 12 BC 58 40 03 -62 59 04 52 52 55 4D 00 84 12 BC 58 50 03 86 58 -07 50 55 53 48 4D 2E 41 84 12 BC 58 00 14 80 59 -05 50 55 53 48 4D 84 12 BC 58 00 15 90 59 06 50 -4F 50 4D 2E 41 00 84 12 BC 58 00 16 9E 59 04 50 -4F 50 4D 00 84 12 BC 58 00 17 85 12 00 3C 72 59 -03 53 3E 3D 85 12 00 38 C0 59 02 53 3C 00 85 12 -00 34 AE 59 03 30 3E 3D 85 12 00 30 D4 59 02 30 -3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 00 2C -E8 59 03 55 3E 3D 85 12 00 28 DE 59 03 30 3C 3E -85 12 00 24 FC 59 02 30 3D 00 85 12 00 20 00 00 -02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D -0E 4A 30 4D F2 59 04 54 48 45 4E 00 1A 42 C6 1D -08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 -31 2F 88 DA 00 00 30 4D 82 57 04 45 4C 53 45 00 -1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 -8F 4A 00 00 E3 3F 26 5A 05 55 4E 54 49 4C 3A 4F -08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 -00 FE 10 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 -C6 1D 30 4D 06 58 05 41 47 41 49 4E 87 12 BA 59 -6E 5A 2A 40 00 00 05 57 48 49 4C 45 87 12 14 5A -78 40 2A 40 CA 59 06 52 45 50 45 41 54 00 87 12 -BA 59 6E 5A 2C 5A 2A 40 CA 5A 3D 41 2E 4E 08 4E -3E 4F 2A 48 0A 93 88 43 00 00 CA 23 98 42 C6 1D -00 00 30 4D 96 58 03 42 57 31 84 12 C8 5A E0 1D -E6 5A 03 42 57 32 84 12 C8 5A E2 1D F2 5A 03 42 -57 33 84 12 C8 5A E4 1D 0A 5B 3D 41 1A 42 C6 1D -2E 4E 28 4E 08 93 8E 43 00 00 8B 23 BA 4F 00 00 -A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 -57 31 84 12 08 5B E6 1D 2E 5B 03 46 57 32 84 12 -08 5B E8 1D 3A 5B 03 46 57 33 84 12 08 5B EA 1D -3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 -3E E0 00 08 30 4D 46 5B 04 47 4F 54 4F 00 87 12 -BA 59 6C 4A 26 48 2A 40 00 00 05 3F 47 4F 54 4F -87 12 50 5B 6C 4A 26 48 2A 40 00 00 03 4A 4D 50 -87 12 6C 4A 9C 5A 2A 40 7A 5B 04 3F 4A 4D 50 00 -87 12 50 5B 6C 4A 78 40 6E 5A 2A 40 87 12 B0 41 -9E 54 B4 5B 69 4E 3E 4F 3C 4F 2C 4C 1B 42 C6 1D -A2 53 C6 1D 79 90 52 00 0A 20 B0 12 78 55 5E 0E -5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D 79 90 -23 00 0D 20 3C C0 40 00 92 53 C4 1D A2 53 C6 1D -B0 12 00 55 BB 4F 02 00 3E F0 0F 00 E8 3F 79 90 -26 00 03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 79 90 -40 00 12 20 92 53 C4 1D B0 12 78 55 D8 23 3C D0 -10 00 3E 40 2B 00 B0 12 78 55 92 92 C0 1D C4 1D -CE 27 92 53 C4 1D CB 3F 3C D0 30 00 A2 53 C6 1D -3E 40 28 00 B0 12 00 55 BB 4F 02 00 3E 40 29 00 -EA 3F 87 12 B0 41 9E 54 5A 5C 3B 4F 2C 4B 69 4E -7E 40 20 00 79 90 52 00 03 20 B0 12 78 55 B1 3F -3C C0 F0 00 A2 53 C6 1D 79 90 26 00 09 20 3C D0 -60 00 92 53 C4 1D B0 12 00 55 BB 4F 02 00 A1 3F -3C D0 70 00 3E 40 28 00 B0 12 00 55 BB 4F 02 00 -3E 40 29 00 E2 3F 34 40 2C 00 AC 5B 52 5C 62 40 -2A 40 DC 56 04 4D 4F 56 41 00 84 12 A6 5C C0 00 -FE 5A 04 43 4D 50 41 00 84 12 A6 5C D0 00 96 5A -04 41 44 44 41 00 84 12 A6 5C E0 00 B6 5A 04 53 -55 42 41 00 84 12 A6 5C F0 00 C2 5C 05 43 41 4C -4C 41 87 12 B0 41 9E 54 FA 5C 1B 42 C6 1D A2 53 -C6 1D 6E 4E 3C 40 34 01 7E 90 52 00 0B 20 7E 40 -20 00 B0 12 78 55 5C 0E 0C DE 8B 4C 00 00 3E 4F -3D 41 30 4D 2C 53 7E 90 40 00 0B 20 92 53 C4 1D -7E 40 20 00 B0 12 78 55 EE 23 1C 53 3E 40 2B 00 -E8 3F A2 53 C6 1D 7E 90 23 00 09 20 3C 40 3B 01 -92 53 C4 1D B0 12 00 55 BB 4F 02 00 DC 3F 7E 90 -26 00 02 20 2C 53 F4 3F 7E 40 28 00 1C 83 B0 12 -00 55 BB 4F 02 00 3E 40 29 00 CB 3F 87 12 B0 41 -9E 54 84 5D 69 4E 3E 4F 3C 40 00 18 79 90 52 00 -05 20 B0 12 78 55 0E 4C 3D 41 30 4D 82 43 EE 1D -79 90 23 00 0B 20 92 53 C4 1D B0 12 00 55 2F 53 -3E F0 0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 26 00 -F2 27 79 90 40 00 12 20 92 53 C4 1D B0 12 78 55 -E2 23 3E 40 2B 00 92 53 C4 1D B0 12 78 55 92 92 -C0 1D C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 28 00 -B0 12 00 55 8F 4E 00 00 3E 40 29 00 B0 12 78 55 -3E 4F 3E F0 0F 00 0C DE EA 3F 87 12 B0 41 9E 54 -12 5E 3C 4F 69 4E 3E 40 20 00 79 90 52 00 BB 27 -82 43 EE 1D 79 90 26 00 08 20 92 53 C4 1D B0 12 -00 55 2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 B0 12 -00 55 F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E 3E 4F -1C D2 EE 1D 82 43 EE 1D 3C DE 8B 4C 00 00 B2 41 -C4 1D 30 4D 34 40 C4 1D F2 40 B0 40 34 40 2C 00 -7C 5D 0A 5E 44 5E 24 43 BC 56 B4 5C 04 4D 4F 56 -58 00 84 12 64 5E 40 00 00 40 7C 5E 06 4D 4F 56 -58 2E 41 00 84 12 64 5E 00 00 40 40 8C 5E 06 4D -4F 56 58 2E 42 00 84 12 64 5E 40 00 40 40 D0 5C -04 41 44 44 58 00 84 12 64 5E 40 00 00 50 B0 5E -06 41 44 44 58 2E 41 00 84 12 64 5E 00 00 40 50 -C0 5E 06 41 44 44 58 2E 42 00 84 12 64 5E 40 00 -40 50 D2 5E 05 41 44 44 43 58 84 12 64 5E 40 00 -00 60 E4 5E 07 41 44 44 43 58 2E 41 84 12 64 5E -00 00 40 60 F4 5E 07 41 44 44 43 58 2E 42 84 12 -64 5E 40 00 40 60 DE 5C 05 53 55 42 43 58 84 12 -64 5E 40 00 00 70 18 5F 07 53 55 42 43 58 2E 41 -84 12 64 5E 00 00 40 70 28 5F 07 53 55 42 43 58 -2E 42 84 12 64 5E 40 00 40 70 3A 5F 04 53 55 42 -58 00 84 12 64 5E 40 00 00 80 4C 5F 06 53 55 42 -58 2E 41 00 84 12 64 5E 00 00 40 80 5C 5F 06 53 -55 42 58 2E 42 00 84 12 64 5E 40 00 40 80 EC 5C -04 43 4D 50 58 00 84 12 64 5E 40 00 00 90 80 5F -06 43 4D 50 58 2E 41 00 84 12 64 5E 00 00 40 90 -90 5F 06 43 4D 50 58 2E 42 00 84 12 64 5E 40 00 -40 90 4A 5A 05 44 41 44 44 58 84 12 64 5E 40 00 -00 A0 B4 5F 07 44 41 44 44 58 2E 41 84 12 64 5E -00 00 40 A0 C4 5F 07 44 41 44 44 58 2E 42 84 12 -64 5E 40 00 40 A0 A2 5F 04 42 49 54 58 00 84 12 -64 5E 40 00 00 B0 E8 5F 06 42 49 54 58 2E 41 00 -84 12 64 5E 00 00 40 B0 F8 5F 06 42 49 54 58 2E -42 00 84 12 64 5E 40 00 40 B0 0A 60 04 42 49 43 -58 00 84 12 64 5E 40 00 00 C0 1C 60 06 42 49 43 -58 2E 41 00 84 12 64 5E 00 00 40 C0 2C 60 06 42 -49 43 58 2E 42 00 84 12 64 5E 40 00 40 C0 3E 60 -04 42 49 53 58 00 84 12 64 5E 40 00 00 D0 50 60 -06 42 49 53 58 2E 41 00 84 12 64 5E 00 00 40 D0 -60 60 06 42 49 53 58 2E 42 00 84 12 64 5E 40 00 -40 D0 EC 57 04 58 4F 52 58 00 84 12 64 5E 40 00 -00 E0 84 60 06 58 4F 52 58 2E 41 00 84 12 64 5E -00 00 40 E0 94 60 06 58 4F 52 58 2E 42 00 84 12 -64 5E 40 00 40 E0 06 5F 04 41 4E 44 58 00 84 12 -64 5E 40 00 00 F0 B8 60 06 41 4E 44 58 2E 41 00 -84 12 64 5E 00 00 40 F0 C8 60 06 41 4E 44 58 2E -42 00 84 12 64 5E 40 00 40 F0 34 40 C4 1D F2 40 -B0 40 B0 41 7C 5D 44 5E 24 43 12 58 6E 5F 04 52 -52 43 58 00 84 12 EA 60 40 00 00 10 FE 60 06 52 -52 43 58 2E 41 00 84 12 EA 60 00 00 40 10 0E 61 -06 52 52 43 58 2E 42 00 84 12 EA 60 40 00 40 10 -20 61 04 52 52 55 58 00 84 12 EA 60 40 01 00 10 -32 61 06 52 52 55 58 2E 41 00 84 12 EA 60 00 01 -40 10 42 61 06 52 52 55 58 2E 42 00 84 12 EA 60 -40 01 40 10 54 61 05 53 57 50 42 58 84 12 EA 60 -40 00 80 10 66 61 07 53 57 50 42 58 2E 41 84 12 -EA 60 00 00 80 10 76 61 04 52 52 41 58 00 84 12 -EA 60 40 00 00 11 88 61 06 52 52 41 58 2E 41 00 -84 12 EA 60 00 00 40 11 98 61 06 52 52 41 58 2E -42 00 84 12 EA 60 40 00 40 11 AA 61 04 53 58 54 -58 00 84 12 EA 60 40 00 80 11 BC 61 06 53 58 54 -58 2E 41 00 84 12 EA 60 00 00 80 11 06 5A 05 50 -55 53 48 58 84 12 EA 60 40 00 00 12 DE 61 07 50 -55 53 48 58 2E 41 84 12 EA 60 00 00 40 12 EE 61 -07 50 55 53 48 58 2E 42 84 12 EA 60 40 00 40 12 -CC 61 03 52 50 54 87 12 B0 41 9E 54 1E 62 29 4E -7E 40 20 00 79 90 52 00 06 20 B0 12 78 55 03 24 -3E D0 80 00 04 3C B0 12 00 55 3E F0 0F 00 82 4E -EE 1D 3E 4F 3D 41 30 4D 1A 43 25 3C D2 C3 23 02 -E2 B2 60 02 02 24 30 40 B0 53 1A 52 04 20 19 62 -06 20 92 43 14 20 A2 93 02 20 07 24 0A 5A 49 69 -82 4A 16 20 C2 49 18 20 0A 3C C2 4A 15 20 8A 10 -C2 4A 16 20 C2 49 17 20 89 10 C2 49 18 20 B0 12 -D0 62 5A 53 FC 23 39 40 05 00 D2 49 14 20 4E 06 -82 93 46 06 05 24 92 B3 6C 06 FD 27 C2 93 4C 06 -59 83 F3 2F 19 83 0B 30 F2 43 4E 06 82 93 46 06 -03 24 92 B3 6C 06 FD 27 5A 92 4C 06 F3 23 30 41 -19 43 3A 43 8A 10 C2 4A 4E 06 82 93 46 06 05 24 -92 B3 6C 06 FD 27 C2 93 4C 06 19 83 F3 23 5A 42 -4C 06 30 41 1A 52 08 20 09 43 1C D3 F2 40 51 00 -19 20 B0 12 4C 62 33 20 B0 12 D0 62 6A 53 04 24 -FB 23 D9 42 4C 06 FF 1D F2 43 4E 06 03 43 19 53 -39 90 01 02 F6 23 F2 43 4E 06 3C C0 03 00 D2 D3 -23 02 30 41 09 43 2C D3 F0 40 58 00 DD BC B0 12 -4C 62 15 20 3A 40 FE FF 29 43 B0 12 D4 62 D2 49 -00 1E 4E 06 03 43 19 53 39 90 00 02 F8 23 39 40 -03 00 B0 12 D2 62 7A C0 E1 00 6A 92 DE 27 8C 10 -1C 52 4C 06 D2 D3 23 02 87 12 1A 45 BA 45 0B 3C -20 53 44 20 45 72 72 6F 72 21 8C 63 2F 83 B2 40 -10 00 DC 1D 0E 4C B0 12 2A 40 D2 42 E6 49 92 4B -0E 00 22 20 92 4B 10 00 24 20 5A 42 23 20 58 42 -22 20 92 93 02 20 08 24 59 42 24 20 89 10 0A 59 -88 10 08 58 0A 6A 88 10 08 58 30 41 82 43 1C 20 -92 42 0E 20 1A 20 C2 93 24 20 03 20 92 93 22 20 -14 24 92 42 22 20 D0 04 92 42 24 20 D2 04 92 42 -12 20 C8 04 92 42 E4 04 1A 20 92 42 E6 04 1C 20 -92 52 10 20 1A 20 82 63 1C 20 30 41 92 4B 0E 00 -22 20 92 4B 10 00 24 20 B0 12 CC 63 5A 4B 03 00 -82 5A 1A 20 82 63 1C 20 30 41 09 93 07 24 F8 90 -20 00 00 1E 03 20 18 53 19 83 F9 23 30 41 1B 42 -32 20 82 43 1E 20 B2 90 00 02 20 20 A8 20 BB 80 -00 02 12 00 8B 73 14 00 DB 53 03 00 DB 92 12 20 -03 00 11 28 CB 43 03 00 B0 12 9E 63 B0 12 F4 62 -8B 43 10 00 9B 48 00 1E 0E 00 92 93 02 20 03 24 -9B 48 02 1E 10 00 B2 40 00 02 20 20 8B 93 14 00 -0B 20 92 9B 12 00 1E 20 82 2C BB 90 00 02 12 00 -03 2C 92 4B 12 00 20 20 B0 12 0C 64 1A 42 1A 20 -19 42 1C 20 22 3F 3C 42 3B 40 38 20 09 43 CB 93 -02 00 10 24 9B 92 24 20 0C 00 04 20 9B 92 22 20 -0A 00 07 24 09 4B 3B 50 1C 00 3B 90 18 21 EF 23 -0C 5C 30 41 0C 43 82 4B 32 20 8B 49 00 00 09 93 -0A 24 99 52 C4 1D 16 00 4A 93 05 34 C9 93 02 00 -02 34 5A 59 02 00 CB 4A 02 00 CB 43 03 00 9B 42 -1A 20 04 00 9B 42 1C 20 06 00 18 42 30 20 8B 48 -08 00 9B 48 1A 1E 0A 00 9B 48 14 1E 0C 00 9B 48 -1A 1E 0E 00 9B 48 14 1E 10 00 9B 48 1C 1E 12 00 -9B 48 1E 1E 14 00 82 43 1E 20 6A 93 5F 27 C9 37 -8B 43 16 00 7A 93 02 24 07 38 95 3F B2 40 1C 21 -F8 44 B2 40 BE 43 24 44 9B 42 C0 1D 18 00 9B 82 -C4 1D 18 00 9B 42 C2 1D 1A 00 9B 52 C4 1D 1A 00 -82 3F CB 43 02 00 2B 4B 82 4B 32 20 0B 93 06 24 -92 4B 16 00 1E 20 B0 12 86 64 22 C3 30 41 1B 42 -32 20 0B 93 FB 27 EB 93 02 00 04 20 B0 12 FE 69 -B0 12 C6 69 CB 93 02 00 E4 37 1E 4B 18 00 9F 4B -1A 00 00 00 31 50 06 00 3D 41 B0 12 82 65 02 24 -30 40 30 45 B2 40 3C 1D F8 44 B2 40 26 44 24 44 -30 40 1A 45 E8 54 85 52 45 41 44 22 5A 43 19 3C -02 52 86 57 52 49 54 45 22 00 6A 43 12 3C 88 4F -84 44 45 4C 22 00 6A 42 0C 3C AA 53 05 43 4C 4F -53 45 B0 12 9E 65 30 4D B4 50 85 4C 4F 41 44 22 -7A 43 2F 83 8F 4E 00 00 0E 4A 82 93 BE 1D 0A 24 -87 12 34 40 34 40 30 48 30 48 D4 45 34 40 52 66 -30 48 2A 40 87 12 34 40 22 00 1E 46 84 48 50 66 -3D 41 35 4F 0E 55 82 4E 36 20 1C 43 92 42 2C 20 -22 20 92 42 2E 20 24 20 0E 95 8D 24 F5 90 3A 00 -01 00 01 20 25 53 F5 90 5C 00 00 00 08 20 15 53 -92 42 02 20 22 20 82 43 24 20 0E 95 70 24 82 45 -34 20 B0 12 CC 63 34 40 20 00 A2 93 02 20 04 24 -92 92 22 20 02 20 02 24 14 42 12 20 B0 12 AC 64 -2C 43 0A 43 08 4A 58 0E 08 58 82 48 30 20 C8 93 -00 1E 61 24 39 42 F8 95 00 1E 04 20 18 53 19 83 -FA 23 15 53 F5 90 2E 00 FF FF 19 24 39 50 03 00 -B0 12 2A 64 06 20 F5 90 5C 00 FF FF 29 24 0E 95 -27 28 15 42 34 20 1A 53 3A 90 10 00 DB 23 92 53 -1A 20 82 63 1C 20 14 83 D1 23 2C 42 3C 3C F5 90 -2E 00 FE FF EE 27 B0 12 2A 64 EB 23 39 40 03 00 -F8 95 00 1E 04 20 18 53 19 83 FA 23 09 3C 0E 95 -E0 2F F5 90 5C 00 FF FF DC 23 B0 12 2A 64 D9 23 -18 42 30 20 92 48 1A 1E 22 20 92 48 14 1E 24 20 -F8 B0 10 00 0B 1E 14 24 82 93 24 20 06 20 82 93 -22 20 03 20 92 42 02 20 22 20 0E 95 8E 2F 92 42 -22 20 2C 20 92 42 24 20 2E 20 8F 43 00 00 03 3C -2A 4F B0 12 B6 64 34 40 00 40 35 40 0E 40 3A 4F -3E 4F 0A 93 04 24 7A 93 12 20 0C 93 01 20 30 4D -87 12 BA 45 0B 3C 20 4F 70 65 6E 45 72 72 6F 72 -1A 45 F2 42 84 48 7C 45 44 45 24 43 8A 63 1A 93 -B6 20 0C 93 ED 23 30 4D E6 65 04 52 45 41 44 00 -2F 83 8F 4E 00 00 1E 42 32 20 B0 12 3E 64 1E 82 -32 20 30 4D 2C 43 12 12 2A 20 18 42 02 20 08 58 -2A 41 82 9A 0A 20 A1 24 B0 12 F4 62 09 43 28 93 -03 24 89 93 02 1E 03 20 89 93 00 1E 07 24 09 58 -39 90 00 02 F4 23 91 53 00 00 EA 3F 0C 43 6A 41 -B9 43 00 1E 28 93 0F 24 B9 40 FF 0F 02 1E 09 11 -8A 10 09 5A 5A 41 01 00 0A 11 09 10 82 4A 28 20 -82 49 26 20 07 3C 09 11 C2 49 26 20 C2 4A 27 20 -82 43 28 20 3A 41 82 4A 2A 20 30 41 0A 12 1A 52 -08 20 B0 12 34 63 3A 41 1A 52 0C 20 30 40 34 63 -F2 B0 40 00 A2 04 29 20 F2 B0 10 00 A2 04 FC 27 -5A 42 B0 04 4A 11 59 42 B4 04 F2 40 20 00 C0 04 -D2 42 B1 04 C8 04 1A 52 E4 04 D2 42 B5 04 C8 04 -19 52 E4 04 D2 42 B2 04 C0 04 B2 40 00 08 C8 04 -1A 52 E4 04 92 42 B6 04 C0 04 B2 80 BC 07 C0 04 -B2 40 00 02 C8 04 19 52 E4 04 30 41 22 2A 2B 2C -2F 3A 3B 3C 3D 3E 3F 5B 5C 5D 7C 2E 29 92 06 38 -39 80 03 00 B0 12 1C 69 39 40 03 00 7A 4B C8 4A -00 1E 82 9B 36 20 12 28 0D 12 3D 40 0F 00 3C 40 -CC 68 7A 9C F3 27 1D 83 FC 23 3D 41 6A 9C E6 27 -3A 80 21 00 EB 3B 18 53 19 83 E8 23 09 93 06 24 -F8 40 20 00 00 1E 18 53 19 83 FA 23 30 41 2A 93 -EB 20 2C 93 0D 24 0C 93 BA 24 87 12 BA 45 0C 3C -20 57 72 69 74 65 45 72 72 6F 72 00 24 43 B0 67 -B0 12 E4 67 92 42 26 20 22 20 92 42 28 20 24 20 -B0 12 5C 68 B0 12 AC 64 18 42 30 20 F8 40 20 00 -0B 1E B0 12 70 68 88 43 0C 1E 88 4A 0E 1E 88 49 -10 1E 88 49 12 1E 98 42 24 20 14 1E 98 42 22 20 -1A 1E 88 43 1C 1E 88 43 1E 1E 1C 43 1B 42 34 20 -82 9B 36 20 CA 27 FB 90 2E 00 00 00 C6 27 39 40 -0B 00 B0 12 EC 68 B0 12 08 6A 2A 43 B0 12 B6 64 -0C 93 BB 23 30 4D 1A 4B 04 00 19 4B 06 00 B0 12 -FA 62 B0 12 70 68 18 4B 08 00 88 49 12 1E 88 4A -16 1E 88 49 18 1E 98 4B 12 00 1C 1E 98 4B 14 00 -1E 1E 1A 4B 04 00 19 4B 06 00 30 40 36 63 9B 52 -1E 20 12 00 8B 63 14 00 1A 42 1A 20 19 42 1C 20 -30 40 36 63 B2 40 00 02 1E 20 1B 42 32 20 B0 12 -FE 69 82 43 1E 20 DB 53 03 00 DB 92 12 20 03 00 -22 20 CB 43 03 00 B0 12 9E 63 08 12 0A 12 B0 12 -E4 67 2A 91 05 24 B0 12 5C 68 2A 41 B0 12 F4 62 -3A 41 38 41 98 42 26 20 00 1E 92 93 02 20 03 24 -98 42 28 20 02 1E B0 12 5C 68 9B 42 26 20 0E 00 -9B 42 28 20 10 00 30 40 0C 64 F2 65 05 57 52 49 -54 45 B0 12 14 6A 30 4D CA 67 07 53 44 5F 45 4D -49 54 B2 90 00 02 1E 20 02 28 B0 12 14 6A 18 42 -1E 20 C8 4E 00 1E 92 53 1E 20 3E 4F 30 4D 58 4B -13 00 59 4B 14 00 89 10 09 58 58 4B 15 00 5B 42 -12 20 0A 43 3C 42 08 11 09 10 4A 10 1C 83 0B 11 -FA 2B 0A 11 1C 83 FD 37 1B 42 32 20 19 5B 0A 00 -18 6B 0C 00 8B 49 0E 00 8B 48 10 00 CB 4A 03 00 -1A 4B 12 00 BB C0 FF 01 12 00 3A F0 FF 01 82 4A -1E 20 B0 12 A8 64 30 4D 0C 93 38 20 38 90 E0 01 -03 2C C8 93 20 1E 02 24 7C 40 E5 00 C8 4C 00 1E -B0 12 08 6A B0 12 AA 63 82 4A 2A 20 0B 4A B0 12 -F4 62 1A 48 00 1E 88 43 00 1E 92 93 02 20 09 24 -19 48 02 1E 88 43 02 1E 39 F0 FF 0F 39 90 FF 0F -02 20 3A 93 0E 24 82 4A 22 20 82 49 24 20 B0 12 -AA 63 0B 9A E6 27 0A 12 0A 4B B0 12 5C 68 3A 41 -DD 3F 0A 4B B0 12 5C 68 B0 12 9E 65 30 4D 8C 4D -08 54 45 52 4D 32 53 44 22 00 87 12 06 66 34 40 -02 00 F2 42 84 48 52 66 9A 6B 3D 41 92 C3 DC 05 -08 43 B0 12 5A 44 92 B3 DC 05 FD 27 59 42 CC 05 -69 92 0D 24 C8 49 00 1E 18 53 38 90 FF 01 F3 2B -03 24 B0 12 14 6A EC 3F B0 12 6C 44 EC 3F B0 12 -6C 44 82 48 1E 20 B0 12 9E 65 30 4D +FE FF 89 48 00 00 30 4D 87 12 80 44 0F 73 74 61 +63 6B 20 6D 69 73 6D 61 74 63 68 21 F2 48 F2 47 +05 44 45 46 45 52 B0 12 5E 4A BA 40 30 40 FC FF +BA 40 54 4A FE FF E3 3F 3A 48 06 43 52 45 41 54 +45 00 B0 12 5E 4A BA 40 85 12 FC FF 8A 4A FE FF +D6 3F D0 4A 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 +84 12 00 00 8A 4D 02 00 3D 41 30 4D B0 45 05 3E +42 4F 44 59 2E 52 30 4D EA 4A 04 43 4F 44 45 00 +B0 12 5E 4A 82 43 C6 5F A2 82 C6 1D 87 12 CE 4D +A0 4D 2A 40 2A 4B 07 43 4F 44 45 4E 4E 4D B0 12 +2C 4A F0 3F 00 00 07 45 4E 44 43 4F 44 45 87 12 +E8 4D A0 4A 2A 40 D2 48 03 41 53 4D B2 40 A4 4D +DA 1D DE 3F 56 4B 06 45 4E 44 41 53 4D 00 87 12 +5E 4B 12 4E 2A 40 00 00 05 43 4F 4C 4F 4E 1A 42 +C6 1D BA 40 87 12 00 00 A2 53 C6 1D B2 43 BE 1D +30 40 E8 4D 00 00 05 4C 4F 32 48 49 1A 42 C6 1D +BA 40 B0 12 00 00 BA 40 2A 40 02 00 A2 52 C6 1D +ED 3F C0 49 85 48 49 32 4C 4F 87 12 02 47 F4 4B +12 47 86 49 CE 4D A0 4D 2A 40 C4 4B 82 49 46 00 +2F 83 8F 4E 00 00 1E 42 C6 1D A2 52 C6 1D BE 40 +40 42 00 00 2E 53 30 4D 04 4B 84 45 4C 53 45 00 +A2 52 C6 1D 1A 42 C6 1D BA 40 3C 42 FC FF 8E 4A +00 00 2A 83 0E 4A 30 4D 32 44 84 54 48 45 4E 00 +9E 42 C6 1D 00 00 3E 4F 30 4D 46 4B 85 42 45 47 +49 4E 30 40 02 47 1A 4C 85 55 4E 54 49 4C 39 40 +40 42 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E +FE FF 3E 4F 30 4D 68 4B 85 41 47 41 49 4E 39 40 +3C 42 EF 3F DC 44 85 57 48 49 4C 45 87 12 E0 4B +76 40 2A 40 96 44 86 52 45 50 45 41 54 00 87 12 +5E 4C 20 4C 2A 40 FA 4B 82 44 4F 00 2F 83 8F 4E +00 00 A2 53 C6 1D 1E 42 C6 1D BE 40 54 42 FE FF +A2 53 00 1C 1A 42 00 1C 8A 43 00 00 30 4D 44 47 +84 4C 4F 4F 50 00 39 40 76 42 A2 52 C6 1D 1A 42 +C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 00 1C A2 83 +00 1C 2E 4E 0E 93 03 24 8E 4A 00 00 F6 3F 3E 4F +30 4D 90 42 85 2B 4C 4F 4F 50 39 40 64 42 E5 3F +B0 4C 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F +0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 +1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 E8 49 +00 00 1A 83 FA 23 30 4D 66 4C 0A 56 4F 43 41 42 +55 4C 41 52 59 00 87 12 F2 4A 76 44 10 00 76 44 +00 00 54 42 76 44 00 00 12 47 76 42 44 4D 02 47 +76 44 C8 1D 34 40 EA 40 12 47 F2 40 0A 4B 76 44 +CA 1D F2 40 2A 40 64 49 05 46 4F 52 54 48 84 12 +5E 4D C8 4D C8 63 BC 63 68 4D DC 4B E4 4C D6 63 +F8 4D 84 4E 7C 65 0C 69 2E 68 00 00 B8 52 8E 49 +1E 4B 00 00 58 4C 09 41 53 53 45 4D 42 4C 45 52 +84 12 5E 4D 90 5E 28 5E 8C 5D 50 59 F4 57 00 00 +54 5C 00 00 B6 5F CA 5F 4C 58 8A 58 5C 5E 00 00 +00 00 2C 59 92 4D 96 4D 04 41 4C 53 4F 00 3A 40 +0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F D8 49 08 50 +52 45 56 49 4F 55 53 00 3A 40 0E 00 39 40 CC 1D +38 40 CA 1D 8A 3F C6 44 04 4F 4E 4C 59 00 82 43 +CC 1D 30 4D 88 4C 0B 44 45 46 49 4E 49 54 49 4F +4E 53 92 42 CA 1D DA 1D 30 4D 6E 4D FE 4D 12 4E +22 4E 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D 3D 40 +10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 FC 2B +89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F +3D 41 30 4D DE 4D 09 50 57 52 5F 53 54 41 54 45 +84 12 1A 4E C4 4D 68 69 76 4C 09 52 53 54 5F 53 +54 41 54 45 92 42 0E 18 64 4E 92 42 0C 18 66 4E +EF 3F 56 4E 08 50 57 52 5F 48 45 52 45 00 92 42 +C8 1D 64 4E 92 42 C6 1D 66 4E 30 4D 6A 4E 08 52 +53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 92 42 +C6 1D 0C 18 EC 3F 2A 4D 04 57 49 50 45 00 39 40 +10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 42 DE 42 +B2 40 4A 4F 48 4F B2 40 80 48 7E 48 B2 40 C4 4D +0E 18 B2 40 68 69 0C 18 30 12 74 4E B2 40 E4 43 +E2 43 B2 40 6A 44 68 44 B2 40 98 42 96 42 B2 40 +52 43 50 43 B2 40 3C 1D EC 43 1B 42 32 20 0B 93 +04 24 CB 43 02 00 2B 4B FA 3F B2 40 18 00 0A 18 +37 40 1A 40 36 40 92 40 35 40 0E 40 34 40 00 40 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 B8 4E +04 57 41 52 4D 00 30 40 4A 4F 3D 40 98 50 92 C3 +30 01 1E 42 08 18 0E 93 9E 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 E2 B2 60 02 8A 20 +39 42 B0 12 8C 60 D2 C3 23 02 2C 42 B2 40 95 00 +14 20 B2 40 00 40 18 20 B0 12 02 60 02 24 30 40 +28 61 B0 12 8A 60 7A 93 FC 23 B2 40 87 AA 14 20 +92 43 16 20 B2 40 00 48 18 20 B0 12 02 60 29 42 +B0 12 8C 60 92 43 14 20 82 43 16 20 78 43 3C 42 +B2 40 00 77 18 20 B0 12 02 60 B2 40 40 69 18 20 +B0 12 48 60 03 24 58 83 F3 23 D9 3F 0C 5C A2 43 +16 20 B2 40 00 50 18 20 B0 12 48 60 D0 23 92 D3 +40 06 82 43 46 06 92 C3 40 06 B0 12 B2 60 38 40 +00 1E 92 48 C6 01 04 20 92 48 C8 01 06 20 5A 48 +C2 01 92 43 02 20 7A 80 06 00 0F 24 7A 82 0D 24 +A2 43 02 20 6A 53 09 24 5A 53 07 24 6A 52 05 24 +3A 50 0B 20 0C 4A 30 40 2E 61 B0 12 B2 60 D2 48 +0D 00 12 20 19 48 0E 00 82 49 08 20 1A 48 16 00 +0A 93 02 20 1A 48 24 00 82 4A 0A 20 09 5A 82 49 +0C 20 09 5A A2 93 02 20 04 24 82 49 0E 20 39 50 +20 00 19 82 12 20 19 82 12 20 82 49 10 20 92 42 +02 20 2C 20 3E 90 0A 00 1A 27 3E 90 16 00 17 2F +2E 93 E6 26 EF 2E 30 4D 80 44 06 0D 1B 5B 37 6D +23 00 38 44 34 42 80 44 19 46 61 73 74 46 6F 72 +74 68 20 C2 A9 4A 2E 4D 2E 54 68 6F 6F 72 65 6E +73 20 38 44 76 44 30 FF 02 47 B8 40 24 42 80 44 +0A 62 79 74 65 73 20 66 72 65 65 00 3C 42 40 49 +2C 4C 04 43 4F 4C 44 00 92 B3 CA 05 FD 23 B2 40 +04 A5 20 01 98 50 B2 40 88 5A 5C 01 B2 D3 06 02 +B2 40 FC FF 02 02 B2 43 26 02 B2 D3 22 02 E2 D2 +25 02 B2 43 42 02 B2 D3 46 02 B2 43 62 02 B2 D3 +66 02 F2 43 26 03 F2 D3 22 03 F2 40 A5 00 61 01 +82 43 62 01 82 43 66 01 39 40 10 00 B2 40 33 00 +64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 59 14 +18 83 FE 23 19 83 FA 23 F2 D0 10 00 2A 03 F2 40 +A5 00 A1 04 F2 C0 40 00 A2 04 B2 42 B0 01 39 40 +00 10 29 83 89 43 00 1C FC 23 39 40 4C 00 29 83 +B9 40 F6 50 B4 FF FB 23 B2 40 84 43 F0 FF B2 40 +81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 C8 05 +92 C3 C0 05 92 D3 DA 05 B2 40 81 A9 40 06 B2 40 +03 00 46 06 D2 D3 25 02 B2 D0 C0 04 0C 02 92 C3 +40 06 3F 40 80 1C 31 40 E0 1C 30 12 46 4F A5 3E +E2 50 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F +39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 +19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 +30 4D 58 4A 86 5B 54 48 45 4E 5D 00 30 4D 04 52 +86 5B 45 4C 53 45 5D 00 87 12 76 44 00 00 C6 40 +A4 47 E2 44 86 47 34 40 40 42 7A 52 44 40 80 44 +06 5B 54 48 45 4E 5D 00 DA 51 4A 42 4A 52 5A 44 +D0 40 58 40 4A 42 20 52 2A 40 44 40 80 44 06 5B +45 4C 53 45 5D 00 DA 51 4A 42 68 52 5A 44 D0 40 +58 40 4A 42 1E 52 2A 40 80 44 04 5B 49 46 5D 00 +DA 51 4A 42 20 52 3C 42 1E 52 5A 44 80 44 05 0D +0A 6B 6F 20 38 44 EE 43 94 47 3C 42 20 52 10 52 +84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D 90 52 +89 5B 44 45 46 49 4E 45 44 5D 87 12 A4 47 E2 44 +50 45 6A 40 2A 40 A0 52 8B 5B 55 4E 44 45 46 49 +4E 45 44 5D 87 12 A4 47 E2 44 50 45 6A 40 00 41 +2A 40 D4 52 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F +30 40 74 4E F2 4C 06 4D 41 52 4B 45 52 00 B0 12 +5E 4A BA 40 84 12 FC FF BA 40 D2 52 FE FF 9A 42 +C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 +A6 4A 1C 15 B0 12 2A 40 E2 44 50 45 4A 42 28 53 +0C 46 40 42 74 49 42 53 2A 53 39 4E 39 80 86 12 +08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 01 24 +2E 82 1B 17 30 41 32 B0 00 02 01 24 3E 4F 30 41 +3E 40 28 00 B0 12 12 53 B0 12 46 53 19 42 C6 1D +A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 +C4 1D 92 53 C4 1D B0 12 2A 40 E2 44 0C 46 40 42 +8E 53 84 53 21 53 3E 90 10 00 81 2D DA 2B 90 53 +B2 41 C4 1D D6 3F 87 12 A4 47 D6 44 9E 53 0C 43 +1B 42 C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 +29 20 92 53 C4 1D B0 12 12 53 B0 12 46 53 3C 40 +00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 3C 40 +20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 3C 40 +30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 3C 40 +30 00 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 4F +3D 41 30 4D 7A 90 26 00 09 20 3C 40 10 02 92 53 +C4 1D B0 12 12 53 B0 12 46 53 EB 3F 7A 90 40 00 +16 20 3C 40 20 00 92 53 C4 1D B0 12 6C 53 0C 20 +3C 50 10 00 3E 40 2B 00 B0 12 6C 53 92 92 C0 1D +C4 1D 02 24 92 53 C4 1D 8E 10 0C 5E D8 3F B0 12 +6C 53 FA 23 3C 50 10 00 B0 12 50 53 EF 3F 0C 43 +1B 42 C6 1D A2 53 C6 1D 87 12 A4 47 D6 44 70 54 +FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 82 00 +C6 3F B0 12 6C 53 E1 23 3C 50 80 00 B0 12 50 53 +DC 3F D6 42 04 52 45 54 49 00 87 12 76 44 00 13 +12 47 2A 40 76 44 2C 00 96 53 68 54 AE 54 09 4B +2E 4E 0E DC A2 3F A6 4B 03 4D 4F 56 84 12 A4 54 +00 40 B8 54 05 4D 4F 56 2E 42 84 12 A4 54 40 40 +00 00 03 41 44 44 84 12 A4 54 00 50 D2 54 05 41 +44 44 2E 42 84 12 A4 54 40 50 DE 54 04 41 44 44 +43 00 84 12 A4 54 00 60 EC 54 06 41 44 44 43 2E +42 00 84 12 A4 54 40 60 94 54 04 53 55 42 43 00 +84 12 A4 54 00 70 0A 55 06 53 55 42 43 2E 42 00 +84 12 A4 54 40 70 18 55 03 53 55 42 84 12 A4 54 +00 80 28 55 05 53 55 42 2E 42 84 12 A4 54 40 80 +88 4B 03 43 4D 50 84 12 A4 54 00 90 42 55 05 43 +4D 50 2E 42 84 12 A4 54 40 90 76 4B 04 44 41 44 +44 00 84 12 A4 54 00 A0 5C 55 06 44 41 44 44 2E +42 00 84 12 A4 54 40 A0 4E 55 03 42 49 54 84 12 +A4 54 00 B0 7A 55 05 42 49 54 2E 42 84 12 A4 54 +40 B0 86 55 03 42 49 43 84 12 A4 54 00 C0 94 55 +05 42 49 43 2E 42 84 12 A4 54 40 C0 A0 55 03 42 +49 53 84 12 A4 54 00 D0 AE 55 05 42 49 53 2E 42 +84 12 A4 54 40 D0 00 00 03 58 4F 52 84 12 A4 54 +00 E0 C8 55 05 58 4F 52 2E 42 84 12 A4 54 40 E0 +FA 54 03 41 4E 44 84 12 A4 54 00 F0 E2 55 05 41 +4E 44 2E 42 84 12 A4 54 40 F0 A4 47 96 53 00 56 +0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA 4F 3F +34 55 03 52 52 43 84 12 FA 55 00 10 12 56 05 52 +52 43 2E 42 84 12 FA 55 40 10 1E 56 04 53 57 50 +42 00 84 12 FA 55 80 10 2C 56 03 52 52 41 84 12 +FA 55 00 11 3A 56 05 52 52 41 2E 42 84 12 FA 55 +40 11 46 56 03 53 58 54 84 12 FA 55 80 11 00 00 +04 50 55 53 48 00 84 12 FA 55 00 12 60 56 06 50 +55 53 48 2E 42 00 84 12 FA 55 40 12 BA 55 04 43 +41 4C 4C 00 84 12 FA 55 80 12 1A 53 0E 4A 87 12 +34 42 80 44 0D 6F 75 74 20 6F 66 20 62 6F 75 6E +64 73 F2 48 A4 47 D6 44 AA 56 92 53 C4 1D 3E 40 +2C 00 B0 12 2A 40 E2 44 0C 46 40 42 74 49 5E 54 +C2 56 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 +08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 D5 2F +5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F 54 56 +06 52 52 43 4D 2E 41 00 84 12 A4 56 40 00 F0 56 +04 52 52 43 4D 00 84 12 A4 56 50 00 00 57 06 52 +52 41 4D 2E 41 00 84 12 A4 56 40 01 0E 57 04 52 +52 41 4D 00 84 12 A4 56 50 01 1E 57 06 52 4C 41 +4D 2E 41 00 84 12 A4 56 40 02 2C 57 04 52 4C 41 +4D 00 84 12 A4 56 50 02 3C 57 06 52 52 55 4D 2E +41 00 84 12 A4 56 40 03 4A 57 04 52 52 55 4D 00 +84 12 A4 56 50 03 6E 56 07 50 55 53 48 4D 2E 41 +84 12 A4 56 00 14 68 57 05 50 55 53 48 4D 84 12 +A4 56 00 15 78 57 06 50 4F 50 4D 2E 41 00 84 12 +A4 56 00 16 86 57 04 50 4F 50 4D 00 84 12 A4 56 +00 17 5A 57 03 53 3E 3D 85 12 00 38 A4 57 02 53 +3C 00 85 12 00 34 96 57 03 30 3E 3D 85 12 00 30 +B8 57 02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 +85 12 00 2C CC 57 03 55 3E 3D 85 12 00 28 C2 57 +03 30 3C 3E 85 12 00 24 E0 57 02 30 3D 00 85 12 +00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 +A2 53 C6 1D 0E 4A 30 4D D6 57 04 54 48 45 4E 00 +1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 +3A 90 00 02 33 2F 88 DA 00 00 30 4D 6A 55 04 45 +4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 +C6 1D 2F 83 8F 4A 00 00 E3 3F 0A 58 05 55 4E 54 +49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 +0A 11 3A 90 00 FE 12 3B 3A F0 FF 03 08 DA 89 48 +00 00 A2 53 C6 1D 30 4D EE 55 05 41 47 41 49 4E +0A 4E 38 40 00 3C E7 3F 00 00 05 57 48 49 4C 45 +87 12 F8 57 76 40 2A 40 AE 57 06 52 45 50 45 41 +54 00 87 12 80 58 10 58 2A 40 AC 58 3D 41 08 4E +3E 4F 2A 48 B2 92 C4 1D CD 2F 98 42 C6 1D 00 00 +30 4D 7E 56 03 42 57 31 84 12 AA 58 00 00 C4 58 +03 42 57 32 84 12 AA 58 00 00 D0 58 03 42 57 33 +84 12 AA 58 00 00 E8 58 3D 41 1A 42 C6 1D 28 4E +B2 92 C4 1D 90 2B BA 4F 00 00 A2 53 C6 1D 8E 4A +00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 E6 58 +00 00 08 59 03 46 57 32 84 12 E6 58 00 00 14 59 +03 46 57 33 84 12 E6 58 00 00 00 00 05 3F 47 4F +54 4F 3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 +02 24 3E E0 00 08 87 12 66 49 3C 47 2A 40 20 59 +04 47 4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 00 3C +F2 3F 87 12 A4 47 D6 44 6A 59 69 4E 3E 4F 3C 4F +2C 4C 1B 42 C6 1D A2 53 C6 1D 79 90 52 00 0A 20 +B0 12 6C 53 5E 0E 5E 0E 0E DC 8B 4E 00 00 0E 4B +3D 41 30 4D 79 90 23 00 0D 20 3C C0 40 00 92 53 +C4 1D A2 53 C6 1D B0 12 12 53 BB 4F 02 00 3E F0 +0F 00 E8 3F 79 90 26 00 03 20 3C E0 E0 00 EF 3F +3C C0 F0 00 79 90 40 00 12 20 92 53 C4 1D B0 12 +6C 53 D8 23 3C D0 10 00 3E 40 2B 00 B0 12 6C 53 +92 92 C0 1D C4 1D CE 27 92 53 C4 1D CB 3F 3C D0 +30 00 A2 53 C6 1D 3E 40 28 00 B0 12 12 53 BB 4F +02 00 3E 40 29 00 EA 3F 87 12 A4 47 D6 44 10 5A +3B 4F 2C 4B 69 4E 7E 40 20 00 79 90 52 00 03 20 +B0 12 6C 53 B1 3F 3C C0 F0 00 A2 53 C6 1D 79 90 +26 00 09 20 3C D0 60 00 92 53 C4 1D B0 12 12 53 +BB 4F 02 00 A1 3F 3C D0 70 00 3E 40 28 00 B0 12 +12 53 BB 4F 02 00 3E 40 29 00 E2 3F 76 44 2C 00 +62 59 08 5A 66 40 2A 40 C4 54 04 4D 4F 56 41 00 +84 12 5C 5A C0 00 DC 58 04 43 4D 50 41 00 84 12 +5C 5A D0 00 7A 58 04 41 44 44 41 00 84 12 5C 5A +E0 00 9A 58 04 53 55 42 41 00 84 12 5C 5A F0 00 +78 5A 05 43 41 4C 4C 41 87 12 A4 47 D6 44 B0 5A +1B 42 C6 1D A2 53 C6 1D 6E 4E 3C 40 34 01 7E 90 +52 00 0B 20 7E 40 20 00 B0 12 6C 53 5C 0E 0C DE +8B 4C 00 00 3E 4F 3D 41 30 4D 2C 53 7E 90 40 00 +0B 20 92 53 C4 1D 7E 40 20 00 B0 12 6C 53 EE 23 +1C 53 3E 40 2B 00 E8 3F A2 53 C6 1D 7E 90 23 00 +09 20 3C 40 3B 01 92 53 C4 1D B0 12 12 53 BB 4F +02 00 DC 3F 7E 90 26 00 02 20 2C 53 F4 3F 7E 40 +28 00 1C 83 B0 12 12 53 BB 4F 02 00 3E 40 29 00 +CB 3F 87 12 A4 47 D6 44 3A 5B 69 4E 3E 4F 3C 40 +00 18 79 90 52 00 05 20 B0 12 6C 53 0E 4C 3D 41 +30 4D 82 43 C6 5F 79 90 23 00 0B 20 92 53 C4 1D +B0 12 12 53 2F 53 3E F0 0F 00 5E 0A 5E 0E 0C DE +ED 3F 79 90 26 00 F2 27 79 90 40 00 12 20 92 53 +C4 1D B0 12 6C 53 E2 23 3E 40 2B 00 92 53 C4 1D +B0 12 6C 53 92 92 C0 1D C4 1D D8 27 92 53 C4 1D +D5 3F 3E 40 28 00 B0 12 12 53 8F 4E 00 00 3E 40 +29 00 B0 12 6C 53 3E 4F 3E F0 0F 00 0C DE EA 3F +87 12 A4 47 D6 44 C8 5B 3C 4F 69 4E 3E 40 20 00 +79 90 52 00 BB 27 82 43 C6 5F 79 90 26 00 08 20 +92 53 C4 1D B0 12 12 53 2F 53 3E F0 0F 00 BF 3F +3E 40 28 00 B0 12 12 53 F7 3F 1B 42 C6 1D A2 53 +C6 1D 0C 4E 3E 4F 1C D2 C6 5F 82 43 C6 5F 3C DE +8B 4C 00 00 B2 41 C4 1D 30 4D 76 44 C4 1D EA 40 +86 40 76 44 2C 00 32 5B C0 5B FA 5B 3C 42 A4 54 +6A 5A 04 4D 4F 56 58 00 84 12 1A 5C 40 00 00 40 +32 5C 06 4D 4F 56 58 2E 41 00 84 12 1A 5C 00 00 +40 40 42 5C 06 4D 4F 56 58 2E 42 00 84 12 1A 5C +40 00 40 40 86 5A 04 41 44 44 58 00 84 12 1A 5C +40 00 00 50 66 5C 06 41 44 44 58 2E 41 00 84 12 +1A 5C 00 00 40 50 76 5C 06 41 44 44 58 2E 42 00 +84 12 1A 5C 40 00 40 50 88 5C 05 41 44 44 43 58 +84 12 1A 5C 40 00 00 60 9A 5C 07 41 44 44 43 58 +2E 41 84 12 1A 5C 00 00 40 60 AA 5C 07 41 44 44 +43 58 2E 42 84 12 1A 5C 40 00 40 60 94 5A 05 53 +55 42 43 58 84 12 1A 5C 40 00 00 70 CE 5C 07 53 +55 42 43 58 2E 41 84 12 1A 5C 00 00 40 70 DE 5C +07 53 55 42 43 58 2E 42 84 12 1A 5C 40 00 40 70 +F0 5C 04 53 55 42 58 00 84 12 1A 5C 40 00 00 80 +02 5D 06 53 55 42 58 2E 41 00 84 12 1A 5C 00 00 +40 80 12 5D 06 53 55 42 58 2E 42 00 84 12 1A 5C +40 00 40 80 A2 5A 04 43 4D 50 58 00 84 12 1A 5C +40 00 00 90 36 5D 06 43 4D 50 58 2E 41 00 84 12 +1A 5C 00 00 40 90 46 5D 06 43 4D 50 58 2E 42 00 +84 12 1A 5C 40 00 40 90 2E 58 05 44 41 44 44 58 +84 12 1A 5C 40 00 00 A0 6A 5D 07 44 41 44 44 58 +2E 41 84 12 1A 5C 00 00 40 A0 7A 5D 07 44 41 44 +44 58 2E 42 84 12 1A 5C 40 00 40 A0 58 5D 04 42 +49 54 58 00 84 12 1A 5C 40 00 00 B0 9E 5D 06 42 +49 54 58 2E 41 00 84 12 1A 5C 00 00 40 B0 AE 5D +06 42 49 54 58 2E 42 00 84 12 1A 5C 40 00 40 B0 +C0 5D 04 42 49 43 58 00 84 12 1A 5C 40 00 00 C0 +D2 5D 06 42 49 43 58 2E 41 00 84 12 1A 5C 00 00 +40 C0 E2 5D 06 42 49 43 58 2E 42 00 84 12 1A 5C +40 00 40 C0 F4 5D 04 42 49 53 58 00 84 12 1A 5C +40 00 00 D0 06 5E 06 42 49 53 58 2E 41 00 84 12 +1A 5C 00 00 40 D0 16 5E 06 42 49 53 58 2E 42 00 +84 12 1A 5C 40 00 40 D0 D4 55 04 58 4F 52 58 00 +84 12 1A 5C 40 00 00 E0 3A 5E 06 58 4F 52 58 2E +41 00 84 12 1A 5C 00 00 40 E0 4A 5E 06 58 4F 52 +58 2E 42 00 84 12 1A 5C 40 00 40 E0 BC 5C 04 41 +4E 44 58 00 84 12 1A 5C 40 00 00 F0 6E 5E 06 41 +4E 44 58 2E 41 00 84 12 1A 5C 00 00 40 F0 7E 5E +06 41 4E 44 58 2E 42 00 84 12 1A 5C 40 00 40 F0 +76 44 C4 1D EA 40 86 40 A4 47 32 5B FA 5B 3C 42 +FA 55 24 5D 04 52 52 43 58 00 84 12 A0 5E 40 00 +00 10 B4 5E 06 52 52 43 58 2E 41 00 84 12 A0 5E +00 00 40 10 C4 5E 06 52 52 43 58 2E 42 00 84 12 +A0 5E 40 00 40 10 D6 5E 04 52 52 55 58 00 84 12 +A0 5E 40 01 00 10 E8 5E 06 52 52 55 58 2E 41 00 +84 12 A0 5E 00 01 40 10 F8 5E 06 52 52 55 58 2E +42 00 84 12 A0 5E 40 01 40 10 0A 5F 05 53 57 50 +42 58 84 12 A0 5E 40 00 80 10 1C 5F 07 53 57 50 +42 58 2E 41 84 12 A0 5E 00 00 80 10 2C 5F 04 52 +52 41 58 00 84 12 A0 5E 40 00 00 11 3E 5F 06 52 +52 41 58 2E 41 00 84 12 A0 5E 00 00 40 11 4E 5F +06 52 52 41 58 2E 42 00 84 12 A0 5E 40 00 40 11 +60 5F 04 53 58 54 58 00 84 12 A0 5E 40 00 80 11 +72 5F 06 53 58 54 58 2E 41 00 84 12 A0 5E 00 00 +80 11 EA 57 05 50 55 53 48 58 84 12 A0 5E 40 00 +00 12 94 5F 07 50 55 53 48 58 2E 41 84 12 A0 5E +00 00 40 12 A4 5F 07 50 55 53 48 58 2E 42 84 12 +A0 5E 40 00 40 12 00 00 82 5F 03 52 50 54 87 12 +A4 47 D6 44 D6 5F 29 4E 7E 40 20 00 79 90 52 00 +06 20 B0 12 6C 53 03 24 3E D0 80 00 05 3C B0 12 +12 53 1E 83 3E F0 0F 00 82 4E C6 5F 3E 4F 3D 41 +30 4D 1A 43 25 3C D2 C3 23 02 E2 B2 60 02 02 24 +30 40 E8 50 1A 52 04 20 19 62 06 20 92 43 14 20 +A2 93 02 20 07 24 0A 5A 49 69 82 4A 16 20 C2 49 +18 20 0A 3C C2 4A 15 20 8A 10 C2 4A 16 20 C2 49 +17 20 89 10 C2 49 18 20 B0 12 8A 60 5A 53 FC 23 +39 40 05 00 D2 49 14 20 4E 06 82 93 46 06 05 24 +92 B3 6C 06 FD 27 C2 93 4C 06 59 83 F3 2F 19 83 +0B 30 F2 43 4E 06 82 93 46 06 03 24 92 B3 6C 06 +FD 27 5A 92 4C 06 F3 23 30 41 19 43 3A 43 8A 10 +C2 4A 4E 06 82 93 46 06 05 24 92 B3 6C 06 FD 27 +C2 93 4C 06 19 83 F3 23 5A 42 4C 06 30 41 1A 52 +08 20 09 43 1C D3 F2 40 51 00 19 20 B0 12 06 60 +33 20 B0 12 8A 60 6A 53 04 24 FB 23 D9 42 4C 06 +FF 1D F2 43 4E 06 03 43 19 53 39 90 01 02 F6 23 +F2 43 4E 06 3C C0 03 00 D2 D3 23 02 30 41 09 43 +2C D3 F0 40 58 00 23 BF B0 12 06 60 15 20 3A 40 +FE FF 29 43 B0 12 8E 60 D2 49 00 1E 4E 06 03 43 +19 53 39 90 00 02 F8 23 39 40 03 00 B0 12 8C 60 +7A C0 E1 00 6A 92 DE 27 8C 10 1C 52 4C 06 D2 D3 +23 02 87 12 80 44 0B 3C 20 53 44 20 45 72 72 6F +72 21 44 61 2F 83 8F 4E 00 00 B2 40 10 00 DC 1D +0E 4C B0 12 2A 40 24 42 F2 48 92 4B 0E 00 22 20 +92 4B 10 00 24 20 5A 42 23 20 58 42 22 20 92 93 +02 20 08 24 59 42 24 20 89 10 0A 59 88 10 08 58 +0A 6A 88 10 08 58 30 41 82 43 1C 20 92 42 0E 20 +1A 20 C2 93 24 20 03 20 92 93 22 20 14 24 92 42 +22 20 D0 04 92 42 24 20 D2 04 92 42 12 20 C8 04 +92 42 E4 04 1A 20 92 42 E6 04 1C 20 92 52 10 20 +1A 20 82 63 1C 20 30 41 92 4B 0E 00 22 20 92 4B +10 00 24 20 B0 12 88 61 5A 4B 03 00 82 5A 1A 20 +82 63 1C 20 30 41 09 93 07 24 F8 90 20 00 00 1E +03 20 18 53 19 83 F9 23 30 41 1B 42 32 20 82 43 +1E 20 B2 90 00 02 20 20 A8 20 BB 80 00 02 12 00 +8B 73 14 00 DB 53 03 00 DB 92 12 20 03 00 11 28 +CB 43 03 00 B0 12 5A 61 B0 12 AE 60 8B 43 10 00 +9B 48 00 1E 0E 00 92 93 02 20 03 24 9B 48 02 1E +10 00 B2 40 00 02 20 20 8B 93 14 00 0B 20 92 9B +12 00 1E 20 82 2C BB 90 00 02 12 00 03 2C 92 4B +12 00 20 20 B0 12 C8 61 1A 42 1A 20 19 42 1C 20 +21 3F 3C 42 3B 40 38 20 09 43 CB 93 02 00 10 24 +9B 92 24 20 0C 00 04 20 9B 92 22 20 0A 00 07 24 +09 4B 3B 50 1C 00 3B 90 18 21 EF 23 0C 5C 30 41 +0C 43 82 4B 32 20 8B 49 00 00 09 93 0A 24 99 52 +C4 1D 16 00 4A 93 05 34 C9 93 02 00 02 34 5A 59 +02 00 CB 4A 02 00 CB 43 03 00 9B 42 1A 20 04 00 +9B 42 1C 20 06 00 18 42 30 20 8B 48 08 00 9B 48 +1A 1E 0A 00 9B 48 14 1E 0C 00 9B 48 1A 1E 0E 00 +9B 48 14 1E 10 00 9B 48 1C 1E 12 00 9B 48 1E 1E +14 00 82 43 1E 20 6A 93 5F 27 C9 37 8B 43 16 00 +7A 93 02 24 07 38 95 3F B2 40 1C 21 EC 43 B2 40 +EA 42 50 43 9B 42 C0 1D 18 00 9B 82 C4 1D 18 00 +9B 42 C2 1D 1A 00 9B 52 C4 1D 1A 00 82 3F CB 43 +02 00 2B 4B 82 4B 32 20 0B 93 06 24 92 4B 16 00 +1E 20 B0 12 42 62 22 C3 30 41 1B 42 32 20 0B 93 +FB 27 EB 93 02 00 04 20 B0 12 B0 67 B0 12 78 67 +CB 93 02 00 E4 37 1E 4B 18 00 9F 4B 1A 00 00 00 +31 50 06 00 3D 41 B0 12 3E 63 02 24 30 40 24 44 +B2 40 3C 1D EC 43 B2 40 52 43 50 43 30 40 0E 44 +9E 4E 85 52 45 41 44 22 5A 43 19 3C 40 4F 86 57 +52 49 54 45 22 00 6A 43 12 3C 06 4E 84 44 45 4C +22 00 6A 42 0C 3C D2 51 05 43 4C 4F 53 45 B0 12 +5A 63 30 4D E6 52 85 4C 4F 41 44 22 7A 43 2F 83 +8F 4E 00 00 0E 4A 82 93 BE 1D 0A 24 87 12 76 44 +76 44 12 47 12 47 9A 44 76 44 0E 64 12 47 2A 40 +87 12 76 44 22 00 E2 44 86 47 0C 64 3D 41 35 4F +0E 55 82 4E 36 20 1C 43 92 42 2C 20 22 20 92 42 +2E 20 24 20 0E 95 8D 24 F5 90 3A 00 01 00 01 20 +25 53 F5 90 5C 00 00 00 08 20 15 53 92 42 02 20 +22 20 82 43 24 20 0E 95 70 24 82 45 34 20 B0 12 +88 61 34 40 20 00 A2 93 02 20 04 24 92 92 22 20 +02 20 02 24 14 42 12 20 B0 12 68 62 2C 43 0A 43 +08 4A 58 0E 08 58 82 48 30 20 C8 93 00 1E 61 24 +39 42 F8 95 00 1E 04 20 18 53 19 83 FA 23 15 53 +F5 90 2E 00 FF FF 19 24 39 50 03 00 B0 12 E6 61 +06 20 F5 90 5C 00 FF FF 29 24 0E 95 27 28 15 42 +34 20 1A 53 3A 90 10 00 DB 23 92 53 1A 20 82 63 +1C 20 14 83 D1 23 2C 42 3C 3C F5 90 2E 00 FE FF +EE 27 B0 12 E6 61 EB 23 39 40 03 00 F8 95 00 1E +04 20 18 53 19 83 FA 23 09 3C 0E 95 E0 2F F5 90 +5C 00 FF FF DC 23 B0 12 E6 61 D9 23 18 42 30 20 +92 48 1A 1E 22 20 92 48 14 1E 24 20 F8 B0 10 00 +0B 1E 14 24 82 93 24 20 06 20 82 93 22 20 03 20 +92 42 02 20 22 20 0E 95 8E 2F 92 42 22 20 2C 20 +92 42 24 20 2E 20 8F 43 00 00 03 3C 2A 4F B0 12 +72 62 34 40 00 40 35 40 0E 40 3A 4F 3E 4F 0A 93 +04 24 7A 93 0D 20 0C 93 01 20 30 4D 87 12 80 44 +0B 3C 20 4F 70 65 6E 45 72 72 6F 72 3C 42 42 61 +1A 93 B6 20 0C 93 F2 23 30 4D A2 63 04 52 45 41 +44 00 2F 83 8F 4E 00 00 1E 42 32 20 B0 12 FA 61 +1E 82 32 20 30 4D 2C 43 12 12 2A 20 18 42 02 20 +08 58 2A 41 82 9A 0A 20 A1 24 B0 12 AE 60 09 43 +28 93 03 24 89 93 02 1E 03 20 89 93 00 1E 07 24 +09 58 39 90 00 02 F4 23 91 53 00 00 EA 3F 0C 43 +6A 41 B9 43 00 1E 28 93 0F 24 B9 40 FF 0F 02 1E +09 11 8A 10 09 5A 5A 41 01 00 0A 11 09 10 82 4A +28 20 82 49 26 20 07 3C 09 11 C2 49 26 20 C2 4A +27 20 82 43 28 20 3A 41 82 4A 2A 20 30 41 0A 12 +1A 52 08 20 B0 12 EE 60 3A 41 1A 52 0C 20 30 40 +EE 60 F2 B0 40 00 A2 04 29 20 F2 B0 10 00 A2 04 +FC 27 5A 42 B0 04 4A 11 59 42 B4 04 F2 40 20 00 +C0 04 D2 42 B1 04 C8 04 1A 52 E4 04 D2 42 B5 04 +C8 04 19 52 E4 04 D2 42 B2 04 C0 04 B2 40 00 08 +C8 04 1A 52 E4 04 92 42 B6 04 C0 04 B2 80 BC 07 +C0 04 B2 40 00 02 C8 04 19 52 E4 04 30 41 22 2A +2B 2C 2F 3A 3B 3C 3D 3E 3F 5B 5C 5D 7C 2E 29 92 +06 38 39 80 03 00 B0 12 CE 66 39 40 03 00 7A 4B +C8 4A 00 1E 82 9B 36 20 12 28 0D 12 3D 40 0F 00 +3C 40 7E 66 7A 9C F3 27 1D 83 FC 23 3D 41 6A 9C +E6 27 3A 80 21 00 EB 3B 18 53 19 83 E8 23 09 93 +06 24 F8 40 20 00 00 1E 18 53 19 83 FA 23 30 41 +2A 93 D8 20 2C 93 0D 24 0C 93 A7 24 87 12 80 44 +0C 3C 20 57 72 69 74 65 45 72 72 6F 72 00 3C 42 +42 61 B0 12 96 65 92 42 26 20 22 20 92 42 28 20 +24 20 B0 12 0E 66 B0 12 68 62 18 42 30 20 F8 40 +20 00 0B 1E B0 12 22 66 88 43 0C 1E 88 4A 0E 1E +88 49 10 1E 88 49 12 1E 98 42 24 20 14 1E 98 42 +22 20 1A 1E 88 43 1C 1E 88 43 1E 1E 1C 43 1B 42 +34 20 82 9B 36 20 CA 27 FB 90 2E 00 00 00 C6 27 +39 40 0B 00 B0 12 9E 66 B0 12 BA 67 2A 43 B0 12 +72 62 0C 93 BB 23 30 4D 1A 4B 04 00 19 4B 06 00 +B0 12 B4 60 B0 12 22 66 18 4B 08 00 88 49 12 1E +88 4A 16 1E 88 49 18 1E 98 4B 12 00 1C 1E 98 4B +14 00 1E 1E 1A 4B 04 00 19 4B 06 00 30 40 F0 60 +9B 52 1E 20 12 00 8B 63 14 00 1A 42 1A 20 19 42 +1C 20 30 40 F0 60 B2 40 00 02 1E 20 1B 42 32 20 +B0 12 B0 67 82 43 1E 20 DB 53 03 00 DB 92 12 20 +03 00 22 20 CB 43 03 00 B0 12 5A 61 08 12 0A 12 +B0 12 96 65 2A 91 05 24 B0 12 0E 66 2A 41 B0 12 +AE 60 3A 41 38 41 98 42 26 20 00 1E 92 93 02 20 +03 24 98 42 28 20 02 1E B0 12 0E 66 9B 42 26 20 +0E 00 9B 42 28 20 10 00 30 40 C8 61 AE 63 05 57 +52 49 54 45 B0 12 C6 67 30 4D 58 4B 13 00 59 4B +14 00 89 10 09 58 58 4B 15 00 5B 42 12 20 0A 43 +3C 42 08 11 09 10 4A 10 1C 83 0B 11 FA 2B 0A 11 +1C 83 FD 37 1B 42 32 20 19 5B 0A 00 18 6B 0C 00 +8B 49 0E 00 8B 48 10 00 CB 4A 03 00 1A 4B 12 00 +BB C0 FF 01 12 00 3A F0 FF 01 82 4A 1E 20 B0 12 +64 62 30 4D 0C 93 38 20 38 90 E0 01 03 2C C8 93 +20 1E 02 24 7C 40 E5 00 C8 4C 00 1E B0 12 BA 67 +B0 12 66 61 82 4A 2A 20 0B 4A B0 12 AE 60 1A 48 +00 1E 88 43 00 1E 92 93 02 20 09 24 19 48 02 1E +88 43 02 1E 39 F0 FF 0F 39 90 FF 0F 02 20 3A 93 +0E 24 82 4A 22 20 82 49 24 20 B0 12 66 61 0B 9A +E6 27 0A 12 0A 4B B0 12 0E 66 3A 41 DD 3F 0A 4B +B0 12 0E 66 B0 12 5A 63 30 4D 38 4C 08 54 45 52 +4D 32 53 44 22 00 87 12 C2 63 76 44 02 00 02 47 +86 47 0E 64 26 69 3D 41 92 C3 DC 05 08 43 B0 12 +B6 42 92 B3 DC 05 FD 27 59 42 CC 05 69 92 0D 24 +C8 49 00 1E 18 53 38 90 FF 01 F3 2B 03 24 B0 12 +C6 67 EC 3F B0 12 C8 42 EC 3F B0 12 C8 42 82 48 +1E 20 B0 12 5A 63 30 4D @FFFE -BC 53 +F6 50 q diff --git a/binaries/MSP_EXP430FR5994_4MHz.txt b/binaries/MSP_EXP430FR5994_4MHz.txt deleted file mode 100644 index 3cb2256..0000000 --- a/binaries/MSP_EXP430FR5994_4MHz.txt +++ /dev/null @@ -1,709 +0,0 @@ -@1800 -10 00 02 00 21 BB A0 0F 05 00 18 00 DE 6B 46 4F -2C 01 FF B3 5A 44 6C 44 FC 62 38 63 -@4000 -2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 -8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 40 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 40 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 40 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 40 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 40 02 3E 52 00 -0E 12 3E 4F 30 4D 96 40 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 40 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 40 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 40 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 41 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 40 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 41 02 31 2D 00 -1E 83 30 4D D8 40 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 41 -02 30 3D 00 1E 83 0E 7E 30 4D 60 41 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 41 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 40 01 3E 3E 8F F4 3B EB 37 0E 41 02 42 4C 00 -85 12 20 00 AC 41 04 42 41 53 45 00 85 12 DC 1D -C8 40 05 53 54 41 54 45 85 12 BE 1D 96 41 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 41 06 55 4D 2F -4D 4F 44 00 30 12 62 40 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 40 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 41 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 41 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 42 -02 23 53 00 87 12 32 42 6A 42 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 42 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 41 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 41 -02 44 2E 00 87 12 D2 41 44 40 B0 40 4C 41 64 42 -BC 40 A2 42 7E 42 7C 45 44 45 2A 40 DC 41 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 40 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 42 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 40 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 42 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 42 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 42 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 41 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 43 03 4B 45 59 30 40 A0 43 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 5A 44 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 6C 44 30 4D 0D 12 -3D 40 DE 43 1B 42 32 20 9B 42 1E 20 16 00 3A 4F -09 4E 0E 43 1C 42 1E 20 1B 42 20 20 02 3C E0 43 -2D 83 0C 9B 14 2C 58 4C 00 1E 1C 53 78 90 20 00 -07 2C 78 90 0A 00 F5 23 82 4C 1E 20 3D 41 30 4D -0E 99 56 24 CA 48 00 00 1A 53 1E 53 51 3C 1A 15 -B0 12 40 64 19 17 DE 3F 00 43 06 41 43 43 45 50 -54 00 30 40 26 44 3C 40 C8 44 3B 40 92 44 2D 15 -0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 -BC 44 92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 -04 20 21 53 39 40 80 44 4D 15 A2 B3 DC 05 FD 27 -B2 40 11 00 CE 05 E2 C2 23 02 30 41 B2 40 13 00 -CE 05 E2 D2 23 02 30 41 00 00 05 53 4C 45 45 50 -30 40 84 44 12 D2 0A 18 FB 3F 21 52 3A 17 58 42 -CC 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 2E 9F -0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 1E 53 -A2 B3 DC 05 FD 27 82 48 CE 05 30 4D BE 44 2D 83 -92 B3 DC 05 E4 23 FC 27 82 93 DE 1D 02 24 92 53 -DE 1D 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D B0 42 -04 45 4D 49 54 00 30 40 EA 44 08 4E 3E 4F E0 3F -10 43 03 43 49 42 85 12 3C 1D 3F 80 06 00 8F 4E -04 00 3E 40 54 00 9F 42 F8 44 00 00 AF 4F 02 00 -88 3F E0 44 04 45 43 48 4F 00 B2 40 82 48 B6 44 -82 43 DE 1D 30 4D E0 42 06 4E 4F 45 43 48 4F 00 -B2 40 30 4D B6 44 92 43 DE 1D 30 4D 9C 42 05 53 -50 41 43 45 2F 83 8F 4E 00 00 3E 40 20 00 CB 3F -3E 45 06 53 50 41 43 45 53 00 0E 93 09 24 0D 12 -3D 40 66 45 EF 3F 68 45 2D 83 1E 83 EB 23 3D 41 -3E 4F 30 4D 66 43 04 54 59 50 45 00 0E 93 0F 24 -1E 15 3D 40 92 45 28 4F 7E 48 8F 48 00 00 2F 83 -AA 3F 94 45 2D 83 91 83 02 00 F5 23 1D 17 2F 53 -3E 4F 30 4D F2 44 02 43 52 00 30 40 AE 45 87 12 -BA 45 02 0D 0A 00 7C 45 2A 40 2F 82 8F 4E 02 00 -7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 30 4D 52 45 -82 53 22 00 82 43 B4 1D 87 12 34 40 BA 45 30 48 -34 40 22 00 1E 46 E8 45 3D 41 B2 40 20 00 B4 1D -6E 4E 1E 83 82 5E C6 1D 3E 4F 92 B3 C6 1D A2 63 -C6 1D 30 4D 28 45 82 2E 22 00 87 12 D4 45 34 40 -7C 45 30 48 2A 40 00 00 04 57 4F 52 44 00 3C 40 -C0 1D 39 4C 3A 4C 09 5A 3A 5C 28 4C 09 9A 19 24 -7E 9A FC 27 1A 83 3B 40 60 00 C8 4C 00 00 09 9A -0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 -7B 00 F3 2F 5C 82 B4 1D F0 3F 1A 82 C2 1D 82 4A -C4 1D 1E 42 C6 1D 08 8E CE 48 00 00 30 4D 00 00 -04 46 49 4E 44 00 2F 83 0C 4E 65 4C 74 40 80 00 -3B 40 CA 1D 3E 4B 0E 93 1E 24 58 4C 01 00 78 F0 -1E 00 0E 58 2E 53 1E 4E FE FF 0E 93 F3 27 09 4E -78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 -1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 -4A 93 01 30 2E 83 8F 4C 00 00 35 40 0E 40 34 40 -00 40 30 4D A2 41 07 3E 4E 55 4D 42 45 52 3C 4F -38 4F 29 4F 2F 82 1B 42 DC 1D 6A 4C 7A 80 30 00 -7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 -0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B -C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 -1E 83 E3 23 8F 4C 00 00 8F 48 02 00 8F 49 04 00 -30 4D 1B 42 DC 1D 0C 43 2D 15 3D 40 78 47 09 43 -08 43 3F 82 8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 -2D 00 04 28 CB 23 B1 43 02 00 E1 3F 2B 43 7A 80 -25 00 07 24 3B 52 6A 53 04 24 3B 40 10 00 5A 83 -BC 23 1C 53 1E 83 EA 3F 7A 47 2F 24 2D 83 7A 90 -28 00 CD 27 32 D0 00 02 7A 90 F7 00 C8 27 7A 90 -F5 00 23 20 0A 4E 09 43 8F 49 02 00 5A 83 09 4A -09 5C 69 49 79 80 30 00 79 90 0A 00 05 28 79 80 -07 00 79 90 0A 00 0A 28 09 9B 08 2C 8F 49 00 00 -0E 4B 2C 15 B0 12 E8 41 2A 17 E6 3F 9F 4F 04 00 -02 00 AF 4F 04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B -DC 1D 06 24 32 C0 00 02 3F 50 06 00 0E F3 30 4D -2F 53 9F 4F 02 00 04 00 BF 4F 00 00 3E E3 09 20 -3E E3 BF E3 02 00 BF E3 00 00 9F 53 02 00 8F 63 -00 00 32 B0 00 02 01 20 2F 53 30 4D 14 45 07 45 -58 45 43 55 54 45 0A 4E 3E 4F 00 4A 26 41 01 2C -1A 42 C6 1D A2 53 C6 1D 8A 4E 00 00 3E 4F 30 4D -2E 48 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 -1A 42 C6 1D A2 52 C6 1D BA 40 34 40 00 00 8A 4E -02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A -02 00 8A 4E 02 00 0E 49 EB 3F 30 4D A6 45 05 43 -4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF -30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D -30 4D 87 12 92 48 B0 41 1E 46 AC 48 3D 40 B4 48 -E2 22 5D 3E B6 48 0A 4E 3E 4F 3D 40 CC 48 39 27 -3D 40 A6 48 1A E2 BE 1D B3 27 AD 23 CE 48 3E 4F -3D 40 A6 48 BA 23 DE 53 00 00 68 4E 08 5E F8 40 -3F 00 00 00 3D 40 EC 4B CD 3F 1E 48 08 45 56 41 -4C 55 41 54 45 00 39 40 C0 1D 3C 49 3B 49 3A 49 -3D 15 B0 12 2A 40 A2 48 0A 49 B2 41 C4 1D B2 41 -C2 1D B2 41 C0 1D 3D 41 30 4D 82 43 08 18 31 40 -E0 1C B2 40 00 1C 00 1C 82 43 BE 1D 30 4D 7E 48 -04 42 4F 4F 54 00 82 93 08 18 1D 24 E2 B2 60 02 -1A 20 2F 83 8F 4E 00 00 1E 42 08 18 B0 12 2A 40 -30 45 1A 49 BA 45 0F 4C 4F 41 44 22 20 42 4F 4F -54 2E 34 54 48 22 24 43 82 49 6C 41 04 51 55 49 -54 00 30 40 76 49 B0 12 2A 40 1A 49 AA 45 FA 44 -44 45 A2 48 DE 40 70 41 BA 45 0C 73 74 61 63 6B -20 65 6D 70 74 79 21 00 DA 49 34 40 30 FF F2 42 -8A 41 BA 45 0A 46 52 41 4D 20 66 75 6C 6C 21 00 -DA 49 24 43 7C 49 1A 44 05 41 42 4F 52 54 3F 40 -80 1C D7 3F B8 49 86 41 42 4F 52 54 22 00 87 12 -D4 45 34 40 DA 49 30 48 2A 40 8F 93 02 00 03 20 -2F 52 3E 4F 30 4D B0 12 B2 51 1B 42 32 20 0B 93 -04 24 CB 43 02 00 2B 4B FA 3F B0 12 5A 44 92 C3 -DC 05 38 40 A8 2A 39 42 09 59 03 43 19 83 FD 23 -18 83 F9 23 92 B3 DC 05 F2 23 87 12 26 51 34 40 -DE 1D F2 40 1A 45 BA 45 04 1B 5B 37 6D 00 7C 45 -54 40 28 43 46 4A AA 45 BA 45 05 6C 69 6E 65 3A -7C 45 40 41 D2 42 7C 45 BA 45 04 1B 5B 30 6D 00 -7C 45 BE 49 00 00 83 5B 27 5D 87 12 6C 4A 34 40 -34 40 30 48 30 48 2A 40 70 46 01 27 87 12 B0 41 -1E 46 76 46 28 43 7A 4A 2A 40 D6 48 CE 41 81 5C -92 42 C0 1D C4 1D 30 4D 56 4A 81 5B 82 43 BE 1D -30 4D 7E 4A 01 5D B2 43 BE 1D 30 4D BE 4F 02 00 -3E 4F 30 4D 72 43 82 49 53 00 87 12 C8 41 F2 40 -28 43 BE 4A 5A 4A 34 40 9C 4A 30 48 2A 40 6C 4A -9C 4A 2A 40 A6 4A 09 49 4D 4D 45 44 49 41 54 45 -1A 42 B6 1D FA D0 80 00 00 00 30 4D D0 45 87 52 -45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D 00 00 -A2 53 C6 1D 30 4D 6C 49 88 50 4F 53 54 50 4F 4E -45 00 87 12 B0 41 1E 46 76 46 54 40 28 43 7A 4A -70 41 28 43 22 4B 34 40 34 40 30 48 30 48 34 40 -30 48 30 48 2A 40 8A 4A 81 3B 82 93 BE 1D A8 27 -87 12 34 40 2A 40 30 48 C0 4B 8C 4A 2A 40 28 4B -07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 1E 42 -C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 AC 4B -BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 82 4F -BC 1D 30 4D 40 4B 01 3A 30 12 60 4B 87 12 FA 45 -B0 41 1E 46 86 4B 3D 41 08 4E 7A 4E 5A D3 5A 53 -0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E 3E 4F -BA 40 30 40 00 00 BA 40 72 4B 02 00 82 48 B6 1D -82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D 30 41 -82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D A8 49 -FE FF 89 48 00 00 30 4D 87 12 BA 45 0F 73 74 61 -63 6B 20 6D 69 73 6D 61 74 63 68 21 E6 49 18 46 -08 56 41 52 49 41 42 4C 45 00 B0 12 7C 4B BA 40 -86 12 FC FF E4 3F 30 49 08 43 4F 4E 53 54 41 4E -54 00 B0 12 7C 4B BA 40 85 12 FC FF 8A 4E FE FF -3E 4F D5 3F 08 4C 06 43 52 45 41 54 45 00 B0 12 -7C 4B BA 40 85 12 FC FF 8A 4A FE FF C8 3F EC 48 -05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 -8A 4D 02 00 3D 41 30 4D 40 4C 05 44 45 46 45 52 -30 12 CE 4B 8B 3F D6 46 05 3E 42 4F 44 59 2E 52 -30 4D 26 4C 04 43 4F 44 45 00 B0 12 7C 4B 2A 82 -82 4A C6 1D 87 12 6E 4B 50 4F 22 4F 2A 40 74 4C -07 43 4F 44 45 4E 4E 4D 87 12 48 4B 8C 4A 7E 4C -2A 40 00 00 07 45 4E 44 43 4F 44 45 87 12 6A 4F -C0 4B 2A 40 C6 49 03 41 53 4D 92 42 DA 1D EC 1D -B2 40 26 4F DA 1D D9 3F A4 4C 06 45 4E 44 41 53 -4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 4F 4C -4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 C6 1D -B2 43 BE 1D 30 40 6A 4F 00 00 05 4C 4F 32 48 49 -1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 40 02 00 -A2 52 C6 1D ED 3F C6 4A 85 48 49 32 4C 4F 87 12 -F2 42 48 4D 30 48 8C 4A 50 4F 22 4F 2A 40 18 4D -82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D A2 52 -C6 1D BE 40 28 43 00 00 2E 53 30 4D 5A 4C 84 45 -4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 24 43 -FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 76 45 84 54 -48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D 90 4C -85 42 45 47 49 4E 30 40 F2 42 6E 4D 85 55 4E 54 -49 4C 39 40 28 43 A2 52 C6 1D 1A 42 C6 1D 8A 49 -FC FF 8A 4E FE FF 3E 4F 30 4D B6 4C 85 41 47 41 -49 4E 39 40 24 43 EF 3F F0 4B 85 57 48 49 4C 45 -87 12 34 4D 78 40 2A 40 DE 4A 86 52 45 50 45 41 -54 00 87 12 B2 4D 74 4D 2A 40 4E 4D 82 44 4F 00 -2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D BE 40 -3C 43 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 00 00 -30 4D 42 48 84 4C 4F 4F 50 00 39 40 5E 43 A2 52 -C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 -00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A 00 00 -F6 3F 3E 4F 30 4D 98 43 85 2B 4C 4F 4F 50 39 40 -4C 43 E5 3F 04 4E 85 4C 45 41 56 45 1A 42 C6 1D -BA 40 6E 43 00 00 BA 40 24 43 02 00 B2 50 06 00 -C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A 00 00 -30 4D 46 4E 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F -3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 -18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 -E8 49 00 00 1A 83 FA 23 30 4D BA 4D 0A 56 4F 43 -41 42 55 4C 41 52 59 00 87 12 2E 4C 34 40 10 00 -34 40 00 00 3C 43 34 40 00 00 30 48 5E 43 C6 4E -F2 42 34 40 C8 1D 44 40 F2 40 30 48 FA 40 46 4C -34 40 CA 1D FA 40 2A 40 6A 4A 05 46 4F 52 54 48 -84 12 E0 4E 4A 4F 0E 66 02 66 EA 4E 30 4D 38 4E -1C 66 7A 4F 4A 51 8C 6A 82 6B 7E 6A 00 00 88 50 -94 4A 68 4C 00 00 AC 4D 09 41 53 53 45 4D 42 4C -45 52 84 12 E0 4E DC 60 74 60 D8 5F 6A 5B 12 5A -8E 5B A0 5E 00 00 02 62 14 62 6A 5A A8 5A A8 60 -00 00 00 00 9C 5B 14 4F 18 4F 04 41 4C 53 4F 00 -3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F F8 4A -08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 39 40 -CC 1D 38 40 CA 1D 8A 3F 06 46 04 4F 4E 4C 59 00 -82 43 CC 1D 30 4D DC 4D 0B 44 45 46 49 4E 49 54 -49 4F 4E 53 92 42 CA 1D DA 1D 30 4D 80 4D 07 43 -4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B -0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 -FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D 76 4B -86 5B 54 48 45 4E 5D 00 30 4D D0 4F 86 5B 45 4C -53 45 5D 00 87 12 34 40 00 00 36 41 B0 41 1E 46 -84 48 44 40 28 43 4A 50 8A 40 8A 40 BA 45 06 5B -54 48 45 4E 5D 00 A6 4F 32 43 18 50 9E 45 40 41 -54 40 32 43 EC 4F 2A 40 8A 40 8A 40 BA 45 06 5B -45 4C 53 45 5D 00 A6 4F 32 43 38 50 9E 45 40 41 -54 40 32 43 EA 4F 2A 40 BA 45 04 5B 49 46 5D 00 -A6 4F 32 43 EC 4F 24 43 EA 4F 9E 45 BA 45 05 0D -0A 6B 6F 20 7C 45 FA 44 92 48 24 43 EC 4F DC 4F -84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D 60 50 -89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 41 1E 46 -76 46 6C 40 2A 40 70 50 8B 5B 55 4E 44 45 46 49 -4E 45 44 5D 87 12 B0 41 1E 46 76 46 6C 40 64 41 -2A 40 A4 50 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F -44 3C 74 4E 06 4D 41 52 4B 45 52 00 B0 12 7C 4B -BA 40 84 12 FC FF BA 40 A2 50 FE FF 9A 42 C8 1D -00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 C6 4B -F0 4E 80 4F 94 4F E8 50 3A 4E 82 4A C8 1D 2E 4E -82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 18 48 -FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 2A 4A -0A 93 F0 23 3E 4F 3D 41 30 4D 60 4F 09 50 57 52 -5F 53 54 41 54 45 84 12 E0 50 46 4F DE 6B CA 4D -09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 2A 51 -92 42 0C 18 2C 51 EF 3F 1C 51 08 50 57 52 5F 48 -45 52 45 00 92 42 C8 1D 2A 51 92 42 C6 1D 2C 51 -30 4D 30 51 08 52 53 54 5F 48 45 52 45 00 92 42 -C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F AC 4E 04 57 -49 50 45 00 39 40 10 00 29 83 B9 43 80 FF FC 23 -B2 40 84 44 82 44 B2 40 0C 52 0A 52 B2 40 76 49 -74 49 B2 40 46 4F 0E 18 B2 40 DE 6B 0C 18 30 12 -3A 51 B2 40 EA 44 E8 44 B2 40 AE 45 AC 45 B2 40 -A0 43 9E 43 B2 40 26 44 24 44 B2 40 3C 1D F8 44 -B2 40 18 00 0A 18 37 40 1A 40 36 40 BC 40 35 40 -0E 40 34 40 00 40 39 40 10 00 29 83 89 43 E0 1D -FC 23 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 -7E 51 04 57 41 52 4D 00 30 40 0C 52 3D 40 5A 53 -92 C3 30 01 1E 42 08 18 0E 93 9E 24 D2 B3 01 02 -02 20 3E E3 1E 53 F2 D0 03 00 0D 02 E2 B2 60 02 -8A 20 39 42 B0 12 D4 62 D2 C3 23 02 2C 42 B2 40 -95 00 14 20 B2 40 00 40 18 20 B0 12 4A 62 02 24 -30 40 70 63 B0 12 D2 62 7A 93 FC 23 B2 40 87 AA -14 20 92 43 16 20 B2 40 00 48 18 20 B0 12 4A 62 -29 42 B0 12 D4 62 92 43 14 20 82 43 16 20 78 43 -3C 42 B2 40 00 77 18 20 B0 12 4A 62 B2 40 40 69 -18 20 B0 12 90 62 03 24 58 83 F3 23 D9 3F 0C 5C -A2 43 16 20 B2 40 00 50 18 20 B0 12 90 62 D0 23 -92 D3 40 06 82 43 46 06 92 C3 40 06 B0 12 FA 62 -38 40 00 1E 92 48 C6 01 04 20 92 48 C8 01 06 20 -5A 48 C2 01 92 43 02 20 7A 80 06 00 0F 24 7A 82 -0D 24 A2 43 02 20 6A 53 09 24 5A 53 07 24 6A 52 -05 24 3A 50 0B 20 0C 4A 30 40 76 63 B0 12 FA 62 -D2 48 0D 00 12 20 19 48 0E 00 82 49 08 20 1A 48 -16 00 0A 93 02 20 1A 48 24 00 82 4A 0A 20 09 5A -82 49 0C 20 09 5A A2 93 02 20 04 24 82 49 0E 20 -39 50 20 00 19 82 12 20 19 82 12 20 82 49 10 20 -92 42 02 20 2C 20 3E 90 0A 00 1C 27 3E 90 16 00 -19 2F 2E 93 E8 26 F1 2E 30 4D BA 45 06 0D 1B 5B -37 6D 23 00 7C 45 E2 42 BA 45 1F 46 61 73 74 46 -6F 72 74 68 20 56 33 30 30 20 28 43 29 4A 2E 4D -2E 54 68 6F 6F 72 65 6E 73 20 7C 45 34 40 80 FF -F2 42 28 41 D2 42 BA 45 0B 62 79 74 65 73 20 66 -72 65 65 20 24 43 46 4A 9E 4F 04 43 4F 4C 44 00 -92 B3 CA 05 FD 23 B2 40 04 A5 20 01 B2 40 88 5A -5C 01 B2 D0 03 00 04 02 B2 40 FC FF 02 02 B2 C0 -03 00 06 02 B2 43 26 02 B2 43 22 02 E2 D2 25 02 -B2 43 42 02 B2 D3 46 02 B2 43 62 02 B2 D3 66 02 -F2 43 26 03 F2 D3 22 03 F2 40 A5 00 61 01 B2 40 -06 00 62 01 82 43 66 01 39 40 40 00 B2 40 33 00 -64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 59 14 -18 83 FE 23 19 83 FA 23 F2 D0 10 00 2A 03 F2 40 -A5 00 A1 04 F2 C0 40 00 A2 04 B2 42 B0 01 39 40 -00 10 29 83 89 43 00 1C FC 23 39 40 4C 00 29 83 -B9 40 BC 53 B4 FF FB 23 B2 40 8A 44 F0 FF B2 40 -81 00 C0 05 92 42 02 18 C6 05 92 42 04 18 C8 05 -92 C3 C0 05 92 D3 DA 05 B2 40 81 A9 40 06 B2 40 -0C 00 46 06 D2 D3 25 02 B2 D0 C0 04 0C 02 92 C3 -40 06 3F 40 80 1C 31 40 E0 1C 30 12 08 52 98 3E -38 40 C0 1D 39 48 2A 48 09 5A 1A 52 C4 1D 09 9A -03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D -30 4D 64 51 09 32 43 4F 4E 53 54 41 4E 54 87 12 -2E 4C 30 48 30 48 46 4C DA 54 2F 83 9F 4E 02 00 -00 00 2E 4E 3D 41 30 4D C4 54 09 32 56 41 52 49 -41 42 4C 45 87 12 2E 4C 34 40 04 00 06 43 46 4C -2A 40 1C 15 B0 12 2A 40 1E 46 76 46 32 43 18 55 -32 47 28 43 7A 4A 50 55 1A 55 29 4E 39 90 86 12 -02 20 2E 53 15 3C 39 90 85 12 03 20 1E 4E 02 00 -0F 3C 39 90 84 12 0C 20 2E 52 B9 90 D8 54 02 00 -04 24 B9 90 00 55 02 00 03 20 B0 12 DA 54 50 55 -1B 17 30 41 32 B0 00 02 01 24 3E 4F 30 41 3E 40 -28 00 B0 12 02 55 B0 12 54 55 19 42 C6 1D A2 53 -C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D -92 53 C4 1D B0 12 2A 40 1E 46 32 47 28 43 9C 55 -92 55 21 53 3E 90 10 00 87 2D DA 2B 9E 55 B2 41 -C4 1D D6 3F 87 12 B0 41 A0 54 AC 55 0C 43 1B 42 -C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 2F 20 -92 53 C4 1D B0 12 02 55 B0 12 54 55 0E 93 03 20 -3C 40 00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C -2E 93 03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 -20 02 12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 -03 20 3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 1D -A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 -26 00 09 20 3C 40 10 02 92 53 C4 1D B0 12 02 55 -B0 12 54 55 EB 3F 7A 90 40 00 16 20 3C 40 20 00 -92 53 C4 1D B0 12 7A 55 0C 20 3C 50 10 00 3E 40 -2B 00 B0 12 7A 55 92 92 C0 1D C4 1D 02 24 92 53 -C4 1D 8E 10 0C 5E D8 3F B0 12 7A 55 FA 23 3C 50 -10 00 B0 12 5E 55 EF 3F 0C 43 1B 42 C6 1D A2 53 -C6 1D 87 12 B0 41 A0 54 8A 56 FE 90 26 00 00 00 -3E 40 20 00 03 20 3C 50 82 00 C6 3F B0 12 7A 55 -E1 23 3C 50 80 00 B0 12 5E 55 DC 3F 7A 44 04 52 -45 54 49 00 87 12 34 40 00 13 30 48 2A 40 34 40 -2C 00 A4 55 82 56 C8 56 2E 4E 0E DC 09 4B A2 3F -FA 4C 03 4D 4F 56 84 12 BE 56 00 40 D2 56 05 4D -4F 56 2E 42 84 12 BE 56 40 40 00 00 03 41 44 44 -84 12 BE 56 00 50 EC 56 05 41 44 44 2E 42 84 12 -BE 56 40 50 F8 56 04 41 44 44 43 00 84 12 BE 56 -00 60 06 57 06 41 44 44 43 2E 42 00 84 12 BE 56 -40 60 AE 56 04 53 55 42 43 00 84 12 BE 56 00 70 -24 57 06 53 55 42 43 2E 42 00 84 12 BE 56 40 70 -32 57 03 53 55 42 84 12 BE 56 00 80 42 57 05 53 -55 42 2E 42 84 12 BE 56 40 80 DC 4C 03 43 4D 50 -84 12 BE 56 00 90 5C 57 05 43 4D 50 2E 42 84 12 -BE 56 40 90 CA 4C 04 44 41 44 44 00 84 12 BE 56 -00 A0 76 57 06 44 41 44 44 2E 42 00 84 12 BE 56 -40 A0 68 57 03 42 49 54 84 12 BE 56 00 B0 94 57 -05 42 49 54 2E 42 84 12 BE 56 40 B0 A0 57 03 42 -49 43 84 12 BE 56 00 C0 AE 57 05 42 49 43 2E 42 -84 12 BE 56 40 C0 BA 57 03 42 49 53 84 12 BE 56 -00 D0 C8 57 05 42 49 53 2E 42 84 12 BE 56 40 D0 -00 00 03 58 4F 52 84 12 BE 56 00 E0 E2 57 05 58 -4F 52 2E 42 84 12 BE 56 40 E0 14 57 03 41 4E 44 -84 12 BE 56 00 F0 FC 57 05 41 4E 44 2E 42 84 12 -BE 56 40 F0 B0 41 A4 55 1A 58 0A 4C 3C F0 70 00 -8A 10 3A F0 0F 00 0C DA 4F 3F 4E 57 03 52 52 43 -84 12 14 58 00 10 2C 58 05 52 52 43 2E 42 84 12 -14 58 40 10 38 58 04 53 57 50 42 00 84 12 14 58 -80 10 46 58 03 52 52 41 84 12 14 58 00 11 54 58 -05 52 52 41 2E 42 84 12 14 58 40 11 60 58 03 53 -58 54 84 12 14 58 80 11 00 00 04 50 55 53 48 00 -84 12 14 58 00 12 7A 58 06 50 55 53 48 2E 42 00 -84 12 14 58 40 12 D4 57 04 43 41 4C 4C 00 84 12 -14 58 80 12 1A 53 0E 4A 87 12 E2 42 BA 45 0D 6F -75 74 20 6F 66 20 62 6F 75 6E 64 73 E6 49 B0 41 -A0 54 C4 58 92 53 C4 1D 3E 40 2C 00 B0 12 2A 40 -1E 46 32 47 28 43 7A 4A 78 56 DC 58 0A 4E 3E 4F -1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 -0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 -D1 2F 8A 10 5A 06 8F 3F 6E 58 06 52 52 43 4D 2E -41 00 84 12 BE 58 40 00 0A 59 04 52 52 43 4D 00 -84 12 BE 58 50 00 1A 59 06 52 52 41 4D 2E 41 00 -84 12 BE 58 40 01 28 59 04 52 52 41 4D 00 84 12 -BE 58 50 01 38 59 06 52 4C 41 4D 2E 41 00 84 12 -BE 58 40 02 46 59 04 52 4C 41 4D 00 84 12 BE 58 -50 02 56 59 06 52 52 55 4D 2E 41 00 84 12 BE 58 -40 03 64 59 04 52 52 55 4D 00 84 12 BE 58 50 03 -88 58 07 50 55 53 48 4D 2E 41 84 12 BE 58 00 14 -82 59 05 50 55 53 48 4D 84 12 BE 58 00 15 92 59 -06 50 4F 50 4D 2E 41 00 84 12 BE 58 00 16 A0 59 -04 50 4F 50 4D 00 84 12 BE 58 00 17 85 12 00 3C -74 59 03 53 3E 3D 85 12 00 38 C2 59 02 53 3C 00 -85 12 00 34 B0 59 03 30 3E 3D 85 12 00 30 D6 59 -02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 -00 2C EA 59 03 55 3E 3D 85 12 00 28 E0 59 03 30 -3C 3E 85 12 00 24 FE 59 02 30 3D 00 85 12 00 20 -00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 -C6 1D 0E 4A 30 4D F4 59 04 54 48 45 4E 00 1A 42 -C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 -00 02 31 2F 88 DA 00 00 30 4D 84 57 04 45 4C 53 -45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D -2F 83 8F 4A 00 00 E3 3F 28 5A 05 55 4E 54 49 4C -3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 -3A 90 00 FE 10 3B 3A F0 FF 03 08 DA 89 48 00 00 -A2 53 C6 1D 30 4D 08 58 05 41 47 41 49 4E 87 12 -BC 59 70 5A 2A 40 00 00 05 57 48 49 4C 45 87 12 -16 5A 78 40 2A 40 CC 59 06 52 45 50 45 41 54 00 -87 12 BC 59 70 5A 2E 5A 2A 40 CC 5A 3D 41 2E 4E -08 4E 3E 4F 2A 48 0A 93 88 43 00 00 CA 23 98 42 -C6 1D 00 00 30 4D 98 58 03 42 57 31 84 12 CA 5A -E0 1D E8 5A 03 42 57 32 84 12 CA 5A E2 1D F4 5A -03 42 57 33 84 12 CA 5A E4 1D 0C 5B 3D 41 1A 42 -C6 1D 2E 4E 28 4E 08 93 8E 43 00 00 8B 23 BA 4F -00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 -03 46 57 31 84 12 0A 5B E6 1D 30 5B 03 46 57 32 -84 12 0A 5B E8 1D 3C 5B 03 46 57 33 84 12 0A 5B -EA 1D 3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 -02 24 3E E0 00 08 30 4D 48 5B 04 47 4F 54 4F 00 -87 12 BC 59 6C 4A 26 48 2A 40 00 00 05 3F 47 4F -54 4F 87 12 52 5B 6C 4A 26 48 2A 40 00 00 03 4A -4D 50 87 12 6C 4A 9E 5A 2A 40 7C 5B 04 3F 4A 4D -50 00 87 12 52 5B 6C 4A 78 40 70 5A 2A 40 87 12 -B0 41 A0 54 B6 5B 69 4E 3E 4F 3C 4F 2C 4C 1B 42 -C6 1D A2 53 C6 1D 79 90 52 00 0A 20 B0 12 7A 55 -5E 0E 5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D -79 90 23 00 0D 20 3C C0 40 00 92 53 C4 1D A2 53 -C6 1D B0 12 02 55 BB 4F 02 00 3E F0 0F 00 E8 3F -79 90 26 00 03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 -79 90 40 00 12 20 92 53 C4 1D B0 12 7A 55 D8 23 -3C D0 10 00 3E 40 2B 00 B0 12 7A 55 92 92 C0 1D -C4 1D CE 27 92 53 C4 1D CB 3F 3C D0 30 00 A2 53 -C6 1D 3E 40 28 00 B0 12 02 55 BB 4F 02 00 3E 40 -29 00 EA 3F 87 12 B0 41 A0 54 5C 5C 3B 4F 2C 4B -69 4E 7E 40 20 00 79 90 52 00 03 20 B0 12 7A 55 -B1 3F 3C C0 F0 00 A2 53 C6 1D 79 90 26 00 09 20 -3C D0 60 00 92 53 C4 1D B0 12 02 55 BB 4F 02 00 -A1 3F 3C D0 70 00 3E 40 28 00 B0 12 02 55 BB 4F -02 00 3E 40 29 00 E2 3F 34 40 2C 00 AE 5B 54 5C -62 40 2A 40 DE 56 04 4D 4F 56 41 00 84 12 A8 5C -C0 00 00 5B 04 43 4D 50 41 00 84 12 A8 5C D0 00 -98 5A 04 41 44 44 41 00 84 12 A8 5C E0 00 B8 5A -04 53 55 42 41 00 84 12 A8 5C F0 00 C4 5C 05 43 -41 4C 4C 41 87 12 B0 41 A0 54 FC 5C 1B 42 C6 1D -A2 53 C6 1D 6E 4E 3C 40 34 01 7E 90 52 00 0B 20 -7E 40 20 00 B0 12 7A 55 5C 0E 0C DE 8B 4C 00 00 -3E 4F 3D 41 30 4D 2C 53 7E 90 40 00 0B 20 92 53 -C4 1D 7E 40 20 00 B0 12 7A 55 EE 23 1C 53 3E 40 -2B 00 E8 3F A2 53 C6 1D 7E 90 23 00 09 20 3C 40 -3B 01 92 53 C4 1D B0 12 02 55 BB 4F 02 00 DC 3F -7E 90 26 00 02 20 2C 53 F4 3F 7E 40 28 00 1C 83 -B0 12 02 55 BB 4F 02 00 3E 40 29 00 CB 3F 87 12 -B0 41 A0 54 86 5D 69 4E 3E 4F 3C 40 00 18 79 90 -52 00 05 20 B0 12 7A 55 0E 4C 3D 41 30 4D 82 43 -EE 1D 79 90 23 00 0B 20 92 53 C4 1D B0 12 02 55 -2F 53 3E F0 0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 -26 00 F2 27 79 90 40 00 12 20 92 53 C4 1D B0 12 -7A 55 E2 23 3E 40 2B 00 92 53 C4 1D B0 12 7A 55 -92 92 C0 1D C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 -28 00 B0 12 02 55 8F 4E 00 00 3E 40 29 00 B0 12 -7A 55 3E 4F 3E F0 0F 00 0C DE EA 3F 87 12 B0 41 -A0 54 14 5E 3C 4F 69 4E 3E 40 20 00 79 90 52 00 -BB 27 82 43 EE 1D 79 90 26 00 08 20 92 53 C4 1D -B0 12 02 55 2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 -B0 12 02 55 F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E -3E 4F 1C D2 EE 1D 82 43 EE 1D 3C DE 8B 4C 00 00 -B2 41 C4 1D 30 4D 34 40 C4 1D F2 40 B0 40 34 40 -2C 00 7E 5D 0C 5E 46 5E 24 43 BE 56 B6 5C 04 4D -4F 56 58 00 84 12 66 5E 40 00 00 40 7E 5E 06 4D -4F 56 58 2E 41 00 84 12 66 5E 00 00 40 40 8E 5E -06 4D 4F 56 58 2E 42 00 84 12 66 5E 40 00 40 40 -D2 5C 04 41 44 44 58 00 84 12 66 5E 40 00 00 50 -B2 5E 06 41 44 44 58 2E 41 00 84 12 66 5E 00 00 -40 50 C2 5E 06 41 44 44 58 2E 42 00 84 12 66 5E -40 00 40 50 D4 5E 05 41 44 44 43 58 84 12 66 5E -40 00 00 60 E6 5E 07 41 44 44 43 58 2E 41 84 12 -66 5E 00 00 40 60 F6 5E 07 41 44 44 43 58 2E 42 -84 12 66 5E 40 00 40 60 E0 5C 05 53 55 42 43 58 -84 12 66 5E 40 00 00 70 1A 5F 07 53 55 42 43 58 -2E 41 84 12 66 5E 00 00 40 70 2A 5F 07 53 55 42 -43 58 2E 42 84 12 66 5E 40 00 40 70 3C 5F 04 53 -55 42 58 00 84 12 66 5E 40 00 00 80 4E 5F 06 53 -55 42 58 2E 41 00 84 12 66 5E 00 00 40 80 5E 5F -06 53 55 42 58 2E 42 00 84 12 66 5E 40 00 40 80 -EE 5C 04 43 4D 50 58 00 84 12 66 5E 40 00 00 90 -82 5F 06 43 4D 50 58 2E 41 00 84 12 66 5E 00 00 -40 90 92 5F 06 43 4D 50 58 2E 42 00 84 12 66 5E -40 00 40 90 4C 5A 05 44 41 44 44 58 84 12 66 5E -40 00 00 A0 B6 5F 07 44 41 44 44 58 2E 41 84 12 -66 5E 00 00 40 A0 C6 5F 07 44 41 44 44 58 2E 42 -84 12 66 5E 40 00 40 A0 A4 5F 04 42 49 54 58 00 -84 12 66 5E 40 00 00 B0 EA 5F 06 42 49 54 58 2E -41 00 84 12 66 5E 00 00 40 B0 FA 5F 06 42 49 54 -58 2E 42 00 84 12 66 5E 40 00 40 B0 0C 60 04 42 -49 43 58 00 84 12 66 5E 40 00 00 C0 1E 60 06 42 -49 43 58 2E 41 00 84 12 66 5E 00 00 40 C0 2E 60 -06 42 49 43 58 2E 42 00 84 12 66 5E 40 00 40 C0 -40 60 04 42 49 53 58 00 84 12 66 5E 40 00 00 D0 -52 60 06 42 49 53 58 2E 41 00 84 12 66 5E 00 00 -40 D0 62 60 06 42 49 53 58 2E 42 00 84 12 66 5E -40 00 40 D0 EE 57 04 58 4F 52 58 00 84 12 66 5E -40 00 00 E0 86 60 06 58 4F 52 58 2E 41 00 84 12 -66 5E 00 00 40 E0 96 60 06 58 4F 52 58 2E 42 00 -84 12 66 5E 40 00 40 E0 08 5F 04 41 4E 44 58 00 -84 12 66 5E 40 00 00 F0 BA 60 06 41 4E 44 58 2E -41 00 84 12 66 5E 00 00 40 F0 CA 60 06 41 4E 44 -58 2E 42 00 84 12 66 5E 40 00 40 F0 34 40 C4 1D -F2 40 B0 40 B0 41 7E 5D 46 5E 24 43 14 58 70 5F -04 52 52 43 58 00 84 12 EC 60 40 00 00 10 00 61 -06 52 52 43 58 2E 41 00 84 12 EC 60 00 00 40 10 -10 61 06 52 52 43 58 2E 42 00 84 12 EC 60 40 00 -40 10 22 61 04 52 52 55 58 00 84 12 EC 60 40 01 -00 10 34 61 06 52 52 55 58 2E 41 00 84 12 EC 60 -00 01 40 10 44 61 06 52 52 55 58 2E 42 00 84 12 -EC 60 40 01 40 10 56 61 05 53 57 50 42 58 84 12 -EC 60 40 00 80 10 68 61 07 53 57 50 42 58 2E 41 -84 12 EC 60 00 00 80 10 78 61 04 52 52 41 58 00 -84 12 EC 60 40 00 00 11 8A 61 06 52 52 41 58 2E -41 00 84 12 EC 60 00 00 40 11 9A 61 06 52 52 41 -58 2E 42 00 84 12 EC 60 40 00 40 11 AC 61 04 53 -58 54 58 00 84 12 EC 60 40 00 80 11 BE 61 06 53 -58 54 58 2E 41 00 84 12 EC 60 00 00 80 11 08 5A -05 50 55 53 48 58 84 12 EC 60 40 00 00 12 E0 61 -07 50 55 53 48 58 2E 41 84 12 EC 60 00 00 40 12 -F0 61 07 50 55 53 48 58 2E 42 84 12 EC 60 40 00 -40 12 CE 61 03 52 50 54 87 12 B0 41 A0 54 20 62 -29 4E 7E 40 20 00 79 90 52 00 06 20 B0 12 7A 55 -03 24 3E D0 80 00 04 3C B0 12 02 55 3E F0 0F 00 -82 4E EE 1D 3E 4F 3D 41 30 4D 1A 43 25 3C D2 C3 -23 02 E2 B2 60 02 02 24 30 40 B0 53 1A 52 04 20 -19 62 06 20 92 43 14 20 A2 93 02 20 07 24 0A 5A -49 69 82 4A 16 20 C2 49 18 20 0A 3C C2 4A 15 20 -8A 10 C2 4A 16 20 C2 49 17 20 89 10 C2 49 18 20 -B0 12 D2 62 5A 53 FC 23 39 40 05 00 D2 49 14 20 -4E 06 82 93 46 06 05 24 92 B3 6C 06 FD 27 C2 93 -4C 06 59 83 F3 2F 19 83 0B 30 F2 43 4E 06 82 93 -46 06 03 24 92 B3 6C 06 FD 27 5A 92 4C 06 F3 23 -30 41 19 43 3A 43 8A 10 C2 4A 4E 06 82 93 46 06 -05 24 92 B3 6C 06 FD 27 C2 93 4C 06 19 83 F3 23 -5A 42 4C 06 30 41 1A 52 08 20 09 43 1C D3 F2 40 -51 00 19 20 B0 12 4E 62 33 20 B0 12 D2 62 6A 53 -04 24 FB 23 D9 42 4C 06 FF 1D F2 43 4E 06 03 43 -19 53 39 90 01 02 F6 23 F2 43 4E 06 3C C0 03 00 -D2 D3 23 02 30 41 09 43 2C D3 F0 40 58 00 DB BC -B0 12 4E 62 15 20 3A 40 FE FF 29 43 B0 12 D6 62 -D2 49 00 1E 4E 06 03 43 19 53 39 90 00 02 F8 23 -39 40 03 00 B0 12 D4 62 7A C0 E1 00 6A 92 DE 27 -8C 10 1C 52 4C 06 D2 D3 23 02 87 12 1A 45 BA 45 -0B 3C 20 53 44 20 45 72 72 6F 72 21 8E 63 2F 83 -B2 40 10 00 DC 1D 0E 4C B0 12 2A 40 D2 42 E6 49 -92 4B 0E 00 22 20 92 4B 10 00 24 20 5A 42 23 20 -58 42 22 20 92 93 02 20 08 24 59 42 24 20 89 10 -0A 59 88 10 08 58 0A 6A 88 10 08 58 30 41 82 43 -1C 20 92 42 0E 20 1A 20 C2 93 24 20 03 20 92 93 -22 20 14 24 92 42 22 20 D0 04 92 42 24 20 D2 04 -92 42 12 20 C8 04 92 42 E4 04 1A 20 92 42 E6 04 -1C 20 92 52 10 20 1A 20 82 63 1C 20 30 41 92 4B -0E 00 22 20 92 4B 10 00 24 20 B0 12 CE 63 5A 4B -03 00 82 5A 1A 20 82 63 1C 20 30 41 09 93 07 24 -F8 90 20 00 00 1E 03 20 18 53 19 83 F9 23 30 41 -1B 42 32 20 82 43 1E 20 B2 90 00 02 20 20 A8 20 -BB 80 00 02 12 00 8B 73 14 00 DB 53 03 00 DB 92 -12 20 03 00 11 28 CB 43 03 00 B0 12 A0 63 B0 12 -F6 62 8B 43 10 00 9B 48 00 1E 0E 00 92 93 02 20 -03 24 9B 48 02 1E 10 00 B2 40 00 02 20 20 8B 93 -14 00 0B 20 92 9B 12 00 1E 20 82 2C BB 90 00 02 -12 00 03 2C 92 4B 12 00 20 20 B0 12 0E 64 1A 42 -1A 20 19 42 1C 20 22 3F 3C 42 3B 40 38 20 09 43 -CB 93 02 00 10 24 9B 92 24 20 0C 00 04 20 9B 92 -22 20 0A 00 07 24 09 4B 3B 50 1C 00 3B 90 18 21 -EF 23 0C 5C 30 41 0C 43 82 4B 32 20 8B 49 00 00 -09 93 0A 24 99 52 C4 1D 16 00 4A 93 05 34 C9 93 -02 00 02 34 5A 59 02 00 CB 4A 02 00 CB 43 03 00 -9B 42 1A 20 04 00 9B 42 1C 20 06 00 18 42 30 20 -8B 48 08 00 9B 48 1A 1E 0A 00 9B 48 14 1E 0C 00 -9B 48 1A 1E 0E 00 9B 48 14 1E 10 00 9B 48 1C 1E -12 00 9B 48 1E 1E 14 00 82 43 1E 20 6A 93 5F 27 -C9 37 8B 43 16 00 7A 93 02 24 07 38 95 3F B2 40 -1C 21 F8 44 B2 40 BE 43 24 44 9B 42 C0 1D 18 00 -9B 82 C4 1D 18 00 9B 42 C2 1D 1A 00 9B 52 C4 1D -1A 00 82 3F CB 43 02 00 2B 4B 82 4B 32 20 0B 93 -06 24 92 4B 16 00 1E 20 B0 12 88 64 22 C3 30 41 -1B 42 32 20 0B 93 FB 27 EB 93 02 00 04 20 B0 12 -00 6A B0 12 C8 69 CB 93 02 00 E4 37 1E 4B 18 00 -9F 4B 1A 00 00 00 31 50 06 00 3D 41 B0 12 84 65 -02 24 30 40 30 45 B2 40 3C 1D F8 44 B2 40 26 44 -24 44 30 40 1A 45 EA 54 85 52 45 41 44 22 5A 43 -19 3C 02 52 86 57 52 49 54 45 22 00 6A 43 12 3C -88 4F 84 44 45 4C 22 00 6A 42 0C 3C AA 53 05 43 -4C 4F 53 45 B0 12 A0 65 30 4D B4 50 85 4C 4F 41 -44 22 7A 43 2F 83 8F 4E 00 00 0E 4A 82 93 BE 1D -0A 24 87 12 34 40 34 40 30 48 30 48 D4 45 34 40 -54 66 30 48 2A 40 87 12 34 40 22 00 1E 46 84 48 -52 66 3D 41 35 4F 0E 55 82 4E 36 20 1C 43 92 42 -2C 20 22 20 92 42 2E 20 24 20 0E 95 8D 24 F5 90 -3A 00 01 00 01 20 25 53 F5 90 5C 00 00 00 08 20 -15 53 92 42 02 20 22 20 82 43 24 20 0E 95 70 24 -82 45 34 20 B0 12 CE 63 34 40 20 00 A2 93 02 20 -04 24 92 92 22 20 02 20 02 24 14 42 12 20 B0 12 -AE 64 2C 43 0A 43 08 4A 58 0E 08 58 82 48 30 20 -C8 93 00 1E 61 24 39 42 F8 95 00 1E 04 20 18 53 -19 83 FA 23 15 53 F5 90 2E 00 FF FF 19 24 39 50 -03 00 B0 12 2C 64 06 20 F5 90 5C 00 FF FF 29 24 -0E 95 27 28 15 42 34 20 1A 53 3A 90 10 00 DB 23 -92 53 1A 20 82 63 1C 20 14 83 D1 23 2C 42 3C 3C -F5 90 2E 00 FE FF EE 27 B0 12 2C 64 EB 23 39 40 -03 00 F8 95 00 1E 04 20 18 53 19 83 FA 23 09 3C -0E 95 E0 2F F5 90 5C 00 FF FF DC 23 B0 12 2C 64 -D9 23 18 42 30 20 92 48 1A 1E 22 20 92 48 14 1E -24 20 F8 B0 10 00 0B 1E 14 24 82 93 24 20 06 20 -82 93 22 20 03 20 92 42 02 20 22 20 0E 95 8E 2F -92 42 22 20 2C 20 92 42 24 20 2E 20 8F 43 00 00 -03 3C 2A 4F B0 12 B8 64 34 40 00 40 35 40 0E 40 -3A 4F 3E 4F 0A 93 04 24 7A 93 12 20 0C 93 01 20 -30 4D 87 12 BA 45 0B 3C 20 4F 70 65 6E 45 72 72 -6F 72 1A 45 F2 42 84 48 7C 45 44 45 24 43 8C 63 -1A 93 B6 20 0C 93 ED 23 30 4D E8 65 04 52 45 41 -44 00 2F 83 8F 4E 00 00 1E 42 32 20 B0 12 40 64 -1E 82 32 20 30 4D 2C 43 12 12 2A 20 18 42 02 20 -08 58 2A 41 82 9A 0A 20 A1 24 B0 12 F6 62 09 43 -28 93 03 24 89 93 02 1E 03 20 89 93 00 1E 07 24 -09 58 39 90 00 02 F4 23 91 53 00 00 EA 3F 0C 43 -6A 41 B9 43 00 1E 28 93 0F 24 B9 40 FF 0F 02 1E -09 11 8A 10 09 5A 5A 41 01 00 0A 11 09 10 82 4A -28 20 82 49 26 20 07 3C 09 11 C2 49 26 20 C2 4A -27 20 82 43 28 20 3A 41 82 4A 2A 20 30 41 0A 12 -1A 52 08 20 B0 12 36 63 3A 41 1A 52 0C 20 30 40 -36 63 F2 B0 40 00 A2 04 29 20 F2 B0 10 00 A2 04 -FC 27 5A 42 B0 04 4A 11 59 42 B4 04 F2 40 20 00 -C0 04 D2 42 B1 04 C8 04 1A 52 E4 04 D2 42 B5 04 -C8 04 19 52 E4 04 D2 42 B2 04 C0 04 B2 40 00 08 -C8 04 1A 52 E4 04 92 42 B6 04 C0 04 B2 80 BC 07 -C0 04 B2 40 00 02 C8 04 19 52 E4 04 30 41 22 2A -2B 2C 2F 3A 3B 3C 3D 3E 3F 5B 5C 5D 7C 2E 29 92 -06 38 39 80 03 00 B0 12 1E 69 39 40 03 00 7A 4B -C8 4A 00 1E 82 9B 36 20 12 28 0D 12 3D 40 0F 00 -3C 40 CE 68 7A 9C F3 27 1D 83 FC 23 3D 41 6A 9C -E6 27 3A 80 21 00 EB 3B 18 53 19 83 E8 23 09 93 -06 24 F8 40 20 00 00 1E 18 53 19 83 FA 23 30 41 -2A 93 EB 20 2C 93 0D 24 0C 93 BA 24 87 12 BA 45 -0C 3C 20 57 72 69 74 65 45 72 72 6F 72 00 24 43 -B2 67 B0 12 E6 67 92 42 26 20 22 20 92 42 28 20 -24 20 B0 12 5E 68 B0 12 AE 64 18 42 30 20 F8 40 -20 00 0B 1E B0 12 72 68 88 43 0C 1E 88 4A 0E 1E -88 49 10 1E 88 49 12 1E 98 42 24 20 14 1E 98 42 -22 20 1A 1E 88 43 1C 1E 88 43 1E 1E 1C 43 1B 42 -34 20 82 9B 36 20 CA 27 FB 90 2E 00 00 00 C6 27 -39 40 0B 00 B0 12 EE 68 B0 12 0A 6A 2A 43 B0 12 -B8 64 0C 93 BB 23 30 4D 1A 4B 04 00 19 4B 06 00 -B0 12 FC 62 B0 12 72 68 18 4B 08 00 88 49 12 1E -88 4A 16 1E 88 49 18 1E 98 4B 12 00 1C 1E 98 4B -14 00 1E 1E 1A 4B 04 00 19 4B 06 00 30 40 38 63 -9B 52 1E 20 12 00 8B 63 14 00 1A 42 1A 20 19 42 -1C 20 30 40 38 63 B2 40 00 02 1E 20 1B 42 32 20 -B0 12 00 6A 82 43 1E 20 DB 53 03 00 DB 92 12 20 -03 00 22 20 CB 43 03 00 B0 12 A0 63 08 12 0A 12 -B0 12 E6 67 2A 91 05 24 B0 12 5E 68 2A 41 B0 12 -F6 62 3A 41 38 41 98 42 26 20 00 1E 92 93 02 20 -03 24 98 42 28 20 02 1E B0 12 5E 68 9B 42 26 20 -0E 00 9B 42 28 20 10 00 30 40 0E 64 F4 65 05 57 -52 49 54 45 B0 12 16 6A 30 4D CC 67 07 53 44 5F -45 4D 49 54 B2 90 00 02 1E 20 02 28 B0 12 16 6A -18 42 1E 20 C8 4E 00 1E 92 53 1E 20 3E 4F 30 4D -58 4B 13 00 59 4B 14 00 89 10 09 58 58 4B 15 00 -5B 42 12 20 0A 43 3C 42 08 11 09 10 4A 10 1C 83 -0B 11 FA 2B 0A 11 1C 83 FD 37 1B 42 32 20 19 5B -0A 00 18 6B 0C 00 8B 49 0E 00 8B 48 10 00 CB 4A -03 00 1A 4B 12 00 BB C0 FF 01 12 00 3A F0 FF 01 -82 4A 1E 20 B0 12 AA 64 30 4D 0C 93 38 20 38 90 -E0 01 03 2C C8 93 20 1E 02 24 7C 40 E5 00 C8 4C -00 1E B0 12 0A 6A B0 12 AC 63 82 4A 2A 20 0B 4A -B0 12 F6 62 1A 48 00 1E 88 43 00 1E 92 93 02 20 -09 24 19 48 02 1E 88 43 02 1E 39 F0 FF 0F 39 90 -FF 0F 02 20 3A 93 0E 24 82 4A 22 20 82 49 24 20 -B0 12 AC 63 0B 9A E6 27 0A 12 0A 4B B0 12 5E 68 -3A 41 DD 3F 0A 4B B0 12 5E 68 B0 12 A0 65 30 4D -8C 4D 08 54 45 52 4D 32 53 44 22 00 87 12 08 66 -34 40 02 00 F2 42 84 48 54 66 9C 6B 3D 41 92 C3 -DC 05 08 43 B0 12 5A 44 92 B3 DC 05 FD 27 59 42 -CC 05 69 92 0D 24 C8 49 00 1E 18 53 38 90 FF 01 -F3 2B 03 24 B0 12 16 6A EC 3F B0 12 6C 44 EC 3F -B0 12 6C 44 82 48 1E 20 B0 12 A0 65 30 4D -@FFFE -BC 53 -q diff --git a/binaries/MSP_EXP430FR5994_8MHz.txt b/binaries/MSP_EXP430FR5994_8MHz.txt index e805720..ba46cda 100644 --- a/binaries/MSP_EXP430FR5994_8MHz.txt +++ b/binaries/MSP_EXP430FR5994_8MHz.txt @@ -1,709 +1,670 @@ @1800 -10 00 04 00 51 55 40 1F 05 00 18 00 D8 6B 46 4F -2C 01 FF B3 5A 44 6C 44 F6 62 32 63 +10 00 04 00 51 55 40 1F 05 00 18 00 64 69 C4 4D +2D 01 FF B3 B6 42 C8 42 B0 60 EC 60 @4000 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 40 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 40 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 40 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 40 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 40 02 3E 52 00 -0E 12 3E 4F 30 4D 96 40 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 40 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 40 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 40 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 41 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 40 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 41 02 31 2D 00 -1E 83 30 4D D8 40 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 41 -02 30 3D 00 1E 83 0E 7E 30 4D 60 41 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 41 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 40 01 3E 3E 8F F4 3B EB 37 0E 41 02 42 4C 00 -85 12 20 00 AC 41 04 42 41 53 45 00 85 12 DC 1D -C8 40 05 53 54 41 54 45 85 12 BE 1D 96 41 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 41 06 55 4D 2F -4D 4F 44 00 30 12 62 40 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 40 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 41 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 41 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 42 -02 23 53 00 87 12 32 42 6A 42 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 42 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 41 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 41 -02 44 2E 00 87 12 D2 41 44 40 B0 40 4C 41 64 42 -BC 40 A2 42 7E 42 7C 45 44 45 2A 40 DC 41 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 40 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 42 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 40 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 42 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 42 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 42 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 41 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 43 03 4B 45 59 30 40 A0 43 -18 42 CC 05 2F 83 8F 4E 00 00 B0 12 5A 44 92 B3 -DC 05 FD 27 1E 42 CC 05 B0 12 6C 44 30 4D 0D 12 -3D 40 DE 43 1B 42 32 20 9B 42 1E 20 16 00 3A 4F -09 4E 0E 43 1C 42 1E 20 1B 42 20 20 02 3C E0 43 -2D 83 0C 9B 14 2C 58 4C 00 1E 1C 53 78 90 20 00 -07 2C 78 90 0A 00 F5 23 82 4C 1E 20 3D 41 30 4D -0E 99 56 24 CA 48 00 00 1A 53 1E 53 51 3C 1A 15 -B0 12 3A 64 19 17 DE 3F 00 43 06 41 43 43 45 50 -54 00 30 40 26 44 3C 40 C8 44 3B 40 92 44 2D 15 -0A 4E 2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 -BC 44 92 B3 DC 05 05 24 18 42 CC 05 38 90 0A 00 -04 20 21 53 39 40 80 44 4D 15 A2 B3 DC 05 FD 27 -B2 40 11 00 CE 05 E2 C2 23 02 30 41 B2 40 13 00 -CE 05 E2 D2 23 02 30 41 00 00 05 53 4C 45 45 50 -30 40 84 44 12 D2 0A 18 FB 3F 21 52 3A 17 58 42 -CC 05 48 9C 08 2C 48 9B E9 27 78 92 11 20 2E 9F -0F 24 1E 83 05 3C 0E 9A 03 24 CE 48 00 00 1E 53 -A2 B3 DC 05 FD 27 82 48 CE 05 30 4D BE 44 2D 83 -92 B3 DC 05 E4 23 FC 27 82 93 DE 1D 02 24 92 53 -DE 1D 3E 8F 3D 41 B2 40 18 00 0A 18 30 4D B0 42 -04 45 4D 49 54 00 30 40 EA 44 08 4E 3E 4F E0 3F -10 43 03 43 49 42 85 12 3C 1D 3F 80 06 00 8F 4E -04 00 3E 40 54 00 9F 42 F8 44 00 00 AF 4F 02 00 -88 3F E0 44 04 45 43 48 4F 00 B2 40 82 48 B6 44 -82 43 DE 1D 30 4D E0 42 06 4E 4F 45 43 48 4F 00 -B2 40 30 4D B6 44 92 43 DE 1D 30 4D 9C 42 05 53 -50 41 43 45 2F 83 8F 4E 00 00 3E 40 20 00 CB 3F -3E 45 06 53 50 41 43 45 53 00 0E 93 09 24 0D 12 -3D 40 66 45 EF 3F 68 45 2D 83 1E 83 EB 23 3D 41 -3E 4F 30 4D 66 43 04 54 59 50 45 00 0E 93 0F 24 -1E 15 3D 40 92 45 28 4F 7E 48 8F 48 00 00 2F 83 -AA 3F 94 45 2D 83 91 83 02 00 F5 23 1D 17 2F 53 -3E 4F 30 4D F2 44 02 43 52 00 30 40 AE 45 87 12 -BA 45 02 0D 0A 00 7C 45 2A 40 2F 82 8F 4E 02 00 -7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 30 4D 52 45 -82 53 22 00 82 43 B4 1D 87 12 34 40 BA 45 30 48 -34 40 22 00 1E 46 E8 45 3D 41 B2 40 20 00 B4 1D -6E 4E 1E 83 82 5E C6 1D 3E 4F 92 B3 C6 1D A2 63 -C6 1D 30 4D 28 45 82 2E 22 00 87 12 D4 45 34 40 -7C 45 30 48 2A 40 00 00 04 57 4F 52 44 00 3C 40 -C0 1D 39 4C 3A 4C 09 5A 3A 5C 28 4C 09 9A 19 24 -7E 9A FC 27 1A 83 3B 40 60 00 C8 4C 00 00 09 9A -0C 24 7C 4A 4E 9C 09 24 18 53 4B 9C F6 2F 7C 90 -7B 00 F3 2F 5C 82 B4 1D F0 3F 1A 82 C2 1D 82 4A -C4 1D 1E 42 C6 1D 08 8E CE 48 00 00 30 4D 00 00 -04 46 49 4E 44 00 2F 83 0C 4E 65 4C 74 40 80 00 -3B 40 CA 1D 3E 4B 0E 93 1E 24 58 4C 01 00 78 F0 -1E 00 0E 58 2E 53 1E 4E FE FF 0E 93 F3 27 09 4E -78 49 48 C4 48 95 F7 23 0A 4C FA 99 01 00 F3 23 -1A 53 58 83 FA 23 19 B3 09 63 0C 49 6A 4E 1E 43 -4A 93 01 30 2E 83 8F 4C 00 00 35 40 0E 40 34 40 -00 40 30 4D A2 41 07 3E 4E 55 4D 42 45 52 3C 4F -38 4F 29 4F 2F 82 1B 42 DC 1D 6A 4C 7A 80 30 00 -7A 90 0A 00 05 28 7A 80 07 00 7A 90 0A 00 12 28 -0A 9B 22 C3 0F 2C 82 49 D0 04 82 48 D2 04 82 4B -C8 04 19 42 E4 04 18 42 E6 04 09 5A 08 63 1C 53 -1E 83 E3 23 8F 4C 00 00 8F 48 02 00 8F 49 04 00 -30 4D 1B 42 DC 1D 0C 43 2D 15 3D 40 78 47 09 43 -08 43 3F 82 8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 -2D 00 04 28 CB 23 B1 43 02 00 E1 3F 2B 43 7A 80 -25 00 07 24 3B 52 6A 53 04 24 3B 40 10 00 5A 83 -BC 23 1C 53 1E 83 EA 3F 7A 47 2F 24 2D 83 7A 90 -28 00 CD 27 32 D0 00 02 7A 90 F7 00 C8 27 7A 90 -F5 00 23 20 0A 4E 09 43 8F 49 02 00 5A 83 09 4A -09 5C 69 49 79 80 30 00 79 90 0A 00 05 28 79 80 -07 00 79 90 0A 00 0A 28 09 9B 08 2C 8F 49 00 00 -0E 4B 2C 15 B0 12 E8 41 2A 17 E6 3F 9F 4F 04 00 -02 00 AF 4F 04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B -DC 1D 06 24 32 C0 00 02 3F 50 06 00 0E F3 30 4D -2F 53 9F 4F 02 00 04 00 BF 4F 00 00 3E E3 09 20 -3E E3 BF E3 02 00 BF E3 00 00 9F 53 02 00 8F 63 -00 00 32 B0 00 02 01 20 2F 53 30 4D 14 45 07 45 -58 45 43 55 54 45 0A 4E 3E 4F 00 4A 26 41 01 2C -1A 42 C6 1D A2 53 C6 1D 8A 4E 00 00 3E 4F 30 4D -2E 48 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 -1A 42 C6 1D A2 52 C6 1D BA 40 34 40 00 00 8A 4E -02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A -02 00 8A 4E 02 00 0E 49 EB 3F 30 4D A6 45 05 43 -4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF -30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D -30 4D 87 12 92 48 B0 41 1E 46 AC 48 3D 40 B4 48 -E2 22 5D 3E B6 48 0A 4E 3E 4F 3D 40 CC 48 39 27 -3D 40 A6 48 1A E2 BE 1D B3 27 AD 23 CE 48 3E 4F -3D 40 A6 48 BA 23 DE 53 00 00 68 4E 08 5E F8 40 -3F 00 00 00 3D 40 EC 4B CD 3F 1E 48 08 45 56 41 -4C 55 41 54 45 00 39 40 C0 1D 3C 49 3B 49 3A 49 -3D 15 B0 12 2A 40 A2 48 0A 49 B2 41 C4 1D B2 41 -C2 1D B2 41 C0 1D 3D 41 30 4D 82 43 08 18 31 40 -E0 1C B2 40 00 1C 00 1C 82 43 BE 1D 30 4D 7E 48 -04 42 4F 4F 54 00 82 93 08 18 1D 24 E2 B2 60 02 -1A 20 2F 83 8F 4E 00 00 1E 42 08 18 B0 12 2A 40 -30 45 1A 49 BA 45 0F 4C 4F 41 44 22 20 42 4F 4F -54 2E 34 54 48 22 24 43 82 49 6C 41 04 51 55 49 -54 00 30 40 76 49 B0 12 2A 40 1A 49 AA 45 FA 44 -44 45 A2 48 DE 40 70 41 BA 45 0C 73 74 61 63 6B -20 65 6D 70 74 79 21 00 DA 49 34 40 30 FF F2 42 -8A 41 BA 45 0A 46 52 41 4D 20 66 75 6C 6C 21 00 -DA 49 24 43 7C 49 1A 44 05 41 42 4F 52 54 3F 40 -80 1C D7 3F B8 49 86 41 42 4F 52 54 22 00 87 12 -D4 45 34 40 DA 49 30 48 2A 40 8F 93 02 00 03 20 -2F 52 3E 4F 30 4D B0 12 B2 51 1B 42 32 20 0B 93 -04 24 CB 43 02 00 2B 4B FA 3F B0 12 5A 44 92 C3 -DC 05 38 40 50 55 39 42 09 59 03 43 19 83 FD 23 -18 83 F9 23 92 B3 DC 05 F2 23 87 12 26 51 34 40 -DE 1D F2 40 1A 45 BA 45 04 1B 5B 37 6D 00 7C 45 -54 40 28 43 46 4A AA 45 BA 45 05 6C 69 6E 65 3A -7C 45 40 41 D2 42 7C 45 BA 45 04 1B 5B 30 6D 00 -7C 45 BE 49 00 00 83 5B 27 5D 87 12 6C 4A 34 40 -34 40 30 48 30 48 2A 40 70 46 01 27 87 12 B0 41 -1E 46 76 46 28 43 7A 4A 2A 40 D6 48 CE 41 81 5C -92 42 C0 1D C4 1D 30 4D 56 4A 81 5B 82 43 BE 1D -30 4D 7E 4A 01 5D B2 43 BE 1D 30 4D BE 4F 02 00 -3E 4F 30 4D 72 43 82 49 53 00 87 12 C8 41 F2 40 -28 43 BE 4A 5A 4A 34 40 9C 4A 30 48 2A 40 6C 4A -9C 4A 2A 40 A6 4A 09 49 4D 4D 45 44 49 41 54 45 -1A 42 B6 1D FA D0 80 00 00 00 30 4D D0 45 87 52 -45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D 00 00 -A2 53 C6 1D 30 4D 6C 49 88 50 4F 53 54 50 4F 4E -45 00 87 12 B0 41 1E 46 76 46 54 40 28 43 7A 4A -70 41 28 43 22 4B 34 40 34 40 30 48 30 48 34 40 -30 48 30 48 2A 40 8A 4A 81 3B 82 93 BE 1D A8 27 -87 12 34 40 2A 40 30 48 C0 4B 8C 4A 2A 40 28 4B -07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 1E 42 -C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 AC 4B -BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 82 4F -BC 1D 30 4D 40 4B 01 3A 30 12 60 4B 87 12 FA 45 -B0 41 1E 46 86 4B 3D 41 08 4E 7A 4E 5A D3 5A 53 -0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E 3E 4F -BA 40 30 40 00 00 BA 40 72 4B 02 00 82 48 B6 1D -82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D 30 41 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 40 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 40 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 40 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 40 02 3E 52 00 0E 12 3E 4F 30 4D 70 40 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 40 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 40 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 40 +01 21 BE 4F 00 00 3E 4F 30 4D CC 40 02 30 3D 00 +1E 83 0E 7E 30 4D FC 40 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 41 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 40 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 41 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 41 02 23 53 00 87 12 88 41 C0 41 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 41 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 40 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 41 34 40 86 40 D4 40 BA 41 +92 40 F8 41 D4 41 38 44 A4 47 E0 43 2A 40 22 41 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 41 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 42 18 42 CC 05 2F 83 8F 4E +00 00 B0 12 B6 42 92 B3 DC 05 FD 27 1E 42 CC 05 +B0 12 C8 42 30 4D A2 B3 DC 05 FD 27 B2 40 11 00 +CE 05 E2 C2 23 02 30 41 B2 40 13 00 CE 05 E2 D2 +23 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 42 +B0 12 B6 42 12 D2 0A 18 F9 3F 0D 12 3D 40 0A 43 +1B 42 32 20 9B 42 1E 20 16 00 3A 4F 09 4E 0E 43 +1C 42 1E 20 1B 42 20 20 02 3C 0C 43 2D 83 0C 9B +14 2C 58 4C 00 1E 1C 53 78 90 20 00 07 2C 78 90 +0A 00 F5 23 82 4C 1E 20 3D 41 30 4D 0E 99 3D 24 +CA 48 00 00 1A 53 1E 53 38 3C 1A 15 B0 12 F6 61 +19 17 DE 3F F0 40 06 41 43 43 45 50 54 00 30 40 +52 43 3C 40 C2 43 3B 40 8C 43 2D 15 0A 4E 2E 4F +0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 B6 43 92 B3 +DC 05 05 24 18 42 CC 05 38 90 0A 00 9C 23 21 53 +3D 15 AC 3F 21 52 3A 17 58 42 CC 05 48 9C 08 2C +48 9B 9A 27 78 92 11 20 2E 9F 0F 24 1E 83 05 3C +0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 DC 05 FD 27 +82 48 CE 05 30 4D B8 43 2D 83 92 B3 DC 05 E4 23 +FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 +B2 40 18 00 0A 18 30 4D 9E 40 04 45 4D 49 54 00 +30 40 E4 43 08 4E 3E 4F E0 3F 85 12 3C 1D 3F 80 +06 00 8F 4E 04 00 3E 40 54 00 9F 42 EC 43 00 00 +AF 4F 02 00 A4 3F DA 43 04 45 43 48 4F 00 B2 40 +82 48 B0 43 82 43 DE 1D 30 4D 32 42 06 4E 4F 45 +43 48 4F 00 B2 40 30 4D B0 43 92 43 DE 1D 30 4D +20 42 04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 +4E 44 28 4F 7E 48 8F 48 00 00 2F 83 C9 3F 50 44 +2D 83 91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D +D0 41 02 43 52 00 30 40 6A 44 87 12 80 44 02 0D +0A 00 38 44 2A 40 2F 83 8F 4E 00 00 3E 4D 30 4D +2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 +0D 63 30 4D F2 41 82 53 22 00 82 43 B4 1D 87 12 +76 44 80 44 12 47 76 44 22 00 E2 44 AE 44 B2 40 +20 00 B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 +3E 4F 30 4D 1C 44 82 2E 22 00 87 12 9A 44 76 44 +38 44 12 47 2A 40 48 43 05 3C 00 00 04 57 4F 52 +44 00 48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 +C4 1D 09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 +0E 4A 1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D +3B 40 60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C +09 24 18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 +B4 1D F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D +08 8E CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 +2F 83 0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B +0E 93 1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 +1E 4E FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 +F7 23 0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 +19 B3 09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 +8F 4C 00 00 35 40 0E 40 34 40 00 40 30 4D 82 40 +07 3E 4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 +1B 42 DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 +7A 80 07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C +82 49 D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 +18 42 E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C +00 00 8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 +1B 42 DC 1D 0C 43 2D 15 3D 40 56 46 09 43 08 43 +3F 82 8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 +04 28 C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 +07 24 3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 +1C 53 1E 83 EA 3F 58 46 2F 24 2D 83 7A 90 28 00 +CB 27 32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 +23 20 0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C +69 49 79 80 30 00 79 90 0A 00 05 28 79 80 07 00 +79 90 0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B +2C 15 B0 12 3E 41 2A 17 E6 3F 9F 4F 04 00 02 00 +AF 4F 04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D +06 24 32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 +9F 4F 02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 +BF E3 02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 +32 B0 00 02 01 20 2F 53 30 4D 7E 42 04 48 45 52 +45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 40 +01 2C 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F +30 4D 46 43 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F +30 4D 08 44 07 45 58 45 43 55 54 45 0A 4E 3E 4F +00 4A 10 47 87 4C 49 54 45 52 41 4C 82 93 BE 1D +0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 76 44 00 00 +8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 +19 4A 02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 62 44 +05 43 4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E +FF FF 30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 +C4 1D 30 4D 85 12 20 00 87 12 94 47 A4 47 E2 44 +B2 47 3D 40 BA 47 CC 22 82 3E BC 47 0A 4E 3E 4F +3D 40 D2 47 23 27 3D 40 AC 47 1A E2 BE 1D A1 27 +B5 23 D4 47 3E 4F 3D 40 AC 47 B8 23 DE 53 00 00 +68 4E 08 5E F8 40 3F 00 00 00 3D 40 CC 4A CB 3F +34 47 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D +3C 49 3B 49 3A 49 3D 15 B0 12 2A 40 A8 47 10 48 +B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D +85 12 BE 1D 82 43 08 18 31 40 E0 1C B2 40 00 1C +00 1C 82 43 BE 1D 30 4D 80 47 04 42 4F 4F 54 00 +82 93 08 18 1D 24 E2 B2 60 02 1A 20 2F 83 8F 4E +00 00 1E 42 08 18 B0 12 2A 40 24 44 24 48 80 44 +0F 4C 4F 41 44 22 20 42 4F 4F 54 2E 34 54 48 22 +3C 42 8E 48 08 41 04 51 55 49 54 00 30 40 80 48 +B0 12 2A 40 24 48 66 44 EE 43 A4 47 E0 43 A8 47 +A4 40 0C 41 80 44 0C 73 74 61 63 6B 20 65 6D 70 +74 79 21 00 E6 48 76 44 30 FF 02 47 26 41 80 44 +0A 46 52 41 4D 20 66 75 6C 6C 21 00 E6 48 3C 42 +86 48 24 47 05 41 42 4F 52 54 3F 40 80 1C D6 3F +C4 48 86 41 42 4F 52 54 22 00 87 12 9A 44 76 44 +E6 48 12 47 2A 40 8F 93 02 00 03 20 2F 52 3E 4F +30 4D B0 12 EC 4E B0 12 B6 42 92 C3 DC 05 38 40 +50 55 39 42 03 43 19 83 FD 23 18 83 FA 23 92 B3 +DC 05 F3 23 87 12 60 4E 76 44 DE 1D EA 40 0E 44 +80 44 04 1B 5B 37 6D 00 38 44 58 40 40 42 40 49 +66 44 80 44 05 6C 69 6E 65 3A 38 44 D0 40 24 42 +38 44 80 44 04 1B 5B 30 6D 00 38 44 CA 48 00 00 +83 5B 27 5D 87 12 66 49 76 44 76 44 12 47 12 47 +2A 40 4A 45 01 27 87 12 A4 47 E2 44 50 45 40 42 +74 49 2A 40 DC 47 32 41 81 5C 92 42 C0 1D C4 1D +30 4D 50 49 81 5B 82 43 BE 1D 30 4D 78 49 01 5D +B2 43 BE 1D 30 4D BE 4F 02 00 3E 4F 30 4D FC 46 +82 49 53 00 87 12 20 48 EA 40 40 42 B8 49 54 49 +76 44 96 49 12 47 2A 40 66 49 96 49 2A 40 A0 49 +09 49 4D 4D 45 44 49 41 54 45 1A 42 B6 1D FA D0 +80 00 00 00 30 4D 76 48 88 50 4F 53 54 50 4F 4E +45 00 87 12 A4 47 E2 44 50 45 58 40 40 42 74 49 +0C 41 40 42 02 4A 76 44 76 44 12 47 12 47 76 44 +12 47 12 47 2A 40 84 49 81 3B 82 93 BE 1D B5 27 +87 12 76 44 2A 40 12 47 A0 4A 86 49 2A 40 08 4A +07 3A 4E 4F 4E 41 4D 45 30 12 46 4A 2F 83 8F 4E +00 00 1E 42 C6 1D 1E B3 0E 63 0A 4E 39 40 00 02 +38 40 02 02 21 3C BA 40 87 12 FC FF A2 83 C6 1D +B2 43 BE 1D 30 4D 20 4A 01 3A 30 12 46 4A 92 B3 +C6 1D A2 63 C6 1D 87 12 A4 47 E2 44 6E 4A 3D 41 +08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E +3E F0 1E 00 09 5E 3E 4F 82 48 B6 1D 82 49 B8 1D +82 4A BA 1D 82 4F BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D A8 49 -FE FF 89 48 00 00 30 4D 87 12 BA 45 0F 73 74 61 -63 6B 20 6D 69 73 6D 61 74 63 68 21 E6 49 18 46 -08 56 41 52 49 41 42 4C 45 00 B0 12 7C 4B BA 40 -86 12 FC FF E4 3F 30 49 08 43 4F 4E 53 54 41 4E -54 00 B0 12 7C 4B BA 40 85 12 FC FF 8A 4E FE FF -3E 4F D5 3F 08 4C 06 43 52 45 41 54 45 00 B0 12 -7C 4B BA 40 85 12 FC FF 8A 4A FE FF C8 3F EC 48 -05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 -8A 4D 02 00 3D 41 30 4D 40 4C 05 44 45 46 45 52 -30 12 CE 4B 8B 3F D6 46 05 3E 42 4F 44 59 2E 52 -30 4D 26 4C 04 43 4F 44 45 00 B0 12 7C 4B 2A 82 -82 4A C6 1D 87 12 6E 4B 50 4F 22 4F 2A 40 74 4C -07 43 4F 44 45 4E 4E 4D 87 12 48 4B 8C 4A 7E 4C -2A 40 00 00 07 45 4E 44 43 4F 44 45 87 12 6A 4F -C0 4B 2A 40 C6 49 03 41 53 4D 92 42 DA 1D EC 1D -B2 40 26 4F DA 1D D9 3F A4 4C 06 45 4E 44 41 53 -4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 4F 4C -4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 C6 1D -B2 43 BE 1D 30 40 6A 4F 00 00 05 4C 4F 32 48 49 -1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 40 02 00 -A2 52 C6 1D ED 3F C6 4A 85 48 49 32 4C 4F 87 12 -F2 42 48 4D 30 48 8C 4A 50 4F 22 4F 2A 40 18 4D -82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D A2 52 -C6 1D BE 40 28 43 00 00 2E 53 30 4D 5A 4C 84 45 -4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 24 43 -FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 76 45 84 54 -48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D 90 4C -85 42 45 47 49 4E 30 40 F2 42 6E 4D 85 55 4E 54 -49 4C 39 40 28 43 A2 52 C6 1D 1A 42 C6 1D 8A 49 -FC FF 8A 4E FE FF 3E 4F 30 4D B6 4C 85 41 47 41 -49 4E 39 40 24 43 EF 3F F0 4B 85 57 48 49 4C 45 -87 12 34 4D 78 40 2A 40 DE 4A 86 52 45 50 45 41 -54 00 87 12 B2 4D 74 4D 2A 40 4E 4D 82 44 4F 00 -2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D BE 40 -3C 43 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 00 00 -30 4D 42 48 84 4C 4F 4F 50 00 39 40 5E 43 A2 52 -C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 -00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A 00 00 -F6 3F 3E 4F 30 4D 98 43 85 2B 4C 4F 4F 50 39 40 -4C 43 E5 3F 04 4E 85 4C 45 41 56 45 1A 42 C6 1D -BA 40 6E 43 00 00 BA 40 24 43 02 00 B2 50 06 00 -C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A 00 00 -30 4D 46 4E 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F -3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 -18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 -E8 49 00 00 1A 83 FA 23 30 4D BA 4D 0A 56 4F 43 -41 42 55 4C 41 52 59 00 87 12 2E 4C 34 40 10 00 -34 40 00 00 3C 43 34 40 00 00 30 48 5E 43 C6 4E -F2 42 34 40 C8 1D 44 40 F2 40 30 48 FA 40 46 4C -34 40 CA 1D FA 40 2A 40 6A 4A 05 46 4F 52 54 48 -84 12 E0 4E 4A 4F 08 66 FC 65 EA 4E 30 4D 38 4E -16 66 7A 4F 4A 51 86 6A 7C 6B 78 6A 00 00 88 50 -94 4A 68 4C 00 00 AC 4D 09 41 53 53 45 4D 42 4C -45 52 84 12 E0 4E D6 60 6E 60 D2 5F 64 5B 0C 5A -88 5B 9A 5E 00 00 FC 61 0E 62 64 5A A2 5A A2 60 -00 00 00 00 96 5B 14 4F 18 4F 04 41 4C 53 4F 00 -3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F F8 4A -08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 39 40 -CC 1D 38 40 CA 1D 8A 3F 06 46 04 4F 4E 4C 59 00 -82 43 CC 1D 30 4D DC 4D 0B 44 45 46 49 4E 49 54 -49 4F 4E 53 92 42 CA 1D DA 1D 30 4D 80 4D 07 43 +FE FF 89 48 00 00 30 4D 87 12 80 44 0F 73 74 61 +63 6B 20 6D 69 73 6D 61 74 63 68 21 F2 48 F2 47 +05 44 45 46 45 52 B0 12 5E 4A BA 40 30 40 FC FF +BA 40 54 4A FE FF E3 3F 3A 48 06 43 52 45 41 54 +45 00 B0 12 5E 4A BA 40 85 12 FC FF 8A 4A FE FF +D6 3F D0 4A 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 +84 12 00 00 8A 4D 02 00 3D 41 30 4D B0 45 05 3E +42 4F 44 59 2E 52 30 4D EA 4A 04 43 4F 44 45 00 +B0 12 5E 4A 82 43 C2 5F A2 82 C6 1D 87 12 CE 4D +A0 4D 2A 40 2A 4B 07 43 4F 44 45 4E 4E 4D B0 12 +2C 4A F0 3F 00 00 07 45 4E 44 43 4F 44 45 87 12 +E8 4D A0 4A 2A 40 D2 48 03 41 53 4D B2 40 A4 4D +DA 1D DE 3F 56 4B 06 45 4E 44 41 53 4D 00 87 12 +5E 4B 12 4E 2A 40 00 00 05 43 4F 4C 4F 4E 1A 42 +C6 1D BA 40 87 12 00 00 A2 53 C6 1D B2 43 BE 1D +30 40 E8 4D 00 00 05 4C 4F 32 48 49 1A 42 C6 1D +BA 40 B0 12 00 00 BA 40 2A 40 02 00 A2 52 C6 1D +ED 3F C0 49 85 48 49 32 4C 4F 87 12 02 47 F4 4B +12 47 86 49 CE 4D A0 4D 2A 40 C4 4B 82 49 46 00 +2F 83 8F 4E 00 00 1E 42 C6 1D A2 52 C6 1D BE 40 +40 42 00 00 2E 53 30 4D 04 4B 84 45 4C 53 45 00 +A2 52 C6 1D 1A 42 C6 1D BA 40 3C 42 FC FF 8E 4A +00 00 2A 83 0E 4A 30 4D 32 44 84 54 48 45 4E 00 +9E 42 C6 1D 00 00 3E 4F 30 4D 46 4B 85 42 45 47 +49 4E 30 40 02 47 1A 4C 85 55 4E 54 49 4C 39 40 +40 42 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E +FE FF 3E 4F 30 4D 68 4B 85 41 47 41 49 4E 39 40 +3C 42 EF 3F DC 44 85 57 48 49 4C 45 87 12 E0 4B +76 40 2A 40 96 44 86 52 45 50 45 41 54 00 87 12 +5E 4C 20 4C 2A 40 FA 4B 82 44 4F 00 2F 83 8F 4E +00 00 A2 53 C6 1D 1E 42 C6 1D BE 40 54 42 FE FF +A2 53 00 1C 1A 42 00 1C 8A 43 00 00 30 4D 44 47 +84 4C 4F 4F 50 00 39 40 76 42 A2 52 C6 1D 1A 42 +C6 1D 8A 49 FC FF 8A 4E FE FF 1E 42 00 1C A2 83 +00 1C 2E 4E 0E 93 03 24 8E 4A 00 00 F6 3F 3E 4F +30 4D 90 42 85 2B 4C 4F 4F 50 39 40 64 42 E5 3F +B0 4C 04 4D 4F 56 45 00 0A 4E 38 4F 39 4F 3E 4F +0A 93 11 24 08 99 0F 24 06 2C F8 49 00 00 18 53 +1A 83 FB 23 30 4D 08 5A 09 5A 19 83 18 83 E8 49 +00 00 1A 83 FA 23 30 4D 66 4C 0A 56 4F 43 41 42 +55 4C 41 52 59 00 87 12 F2 4A 76 44 10 00 76 44 +00 00 54 42 76 44 00 00 12 47 76 42 44 4D 02 47 +76 44 C8 1D 34 40 EA 40 12 47 F2 40 0A 4B 76 44 +CA 1D F2 40 2A 40 64 49 05 46 4F 52 54 48 84 12 +5E 4D C8 4D C4 63 B8 63 68 4D DC 4B E4 4C D2 63 +F8 4D 84 4E 78 65 08 69 2A 68 00 00 B4 52 8E 49 +1E 4B 00 00 58 4C 09 41 53 53 45 4D 42 4C 45 52 +84 12 5E 4D 8C 5E 24 5E 88 5D 4C 59 F0 57 00 00 +50 5C 00 00 B2 5F C6 5F 48 58 86 58 58 5E 00 00 +00 00 28 59 92 4D 96 4D 04 41 4C 53 4F 00 3A 40 +0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F D8 49 08 50 +52 45 56 49 4F 55 53 00 3A 40 0E 00 39 40 CC 1D +38 40 CA 1D 8A 3F C6 44 04 4F 4E 4C 59 00 82 43 +CC 1D 30 4D 88 4C 0B 44 45 46 49 4E 49 54 49 4F +4E 53 92 42 CA 1D DA 1D 30 4D 6E 4D FE 4D 12 4E +22 4E 3A 4E 82 4A C8 1D 2E 4E 82 4E C6 1D 3D 40 +10 00 09 4A 08 49 29 83 18 48 FE FF 0E 98 FC 2B +89 48 00 00 1D 83 F6 23 2A 4A 0A 93 F0 23 3E 4F +3D 41 30 4D DE 4D 09 50 57 52 5F 53 54 41 54 45 +84 12 1A 4E C4 4D 64 69 76 4C 09 52 53 54 5F 53 +54 41 54 45 92 42 0E 18 64 4E 92 42 0C 18 66 4E +EF 3F 56 4E 08 50 57 52 5F 48 45 52 45 00 92 42 +C8 1D 64 4E 92 42 C6 1D 66 4E 30 4D 6A 4E 08 52 +53 54 5F 48 45 52 45 00 92 42 C8 1D 0E 18 92 42 +C6 1D 0C 18 EC 3F 2A 4D 04 57 49 50 45 00 39 40 +10 00 29 83 B9 43 80 FF FC 23 B2 40 E0 42 DE 42 +B2 40 4A 4F 48 4F B2 40 80 48 7E 48 B2 40 C4 4D +0E 18 B2 40 64 69 0C 18 30 12 74 4E B2 40 E4 43 +E2 43 B2 40 6A 44 68 44 B2 40 98 42 96 42 B2 40 +52 43 50 43 B2 40 3C 1D EC 43 1B 42 32 20 0B 93 +04 24 CB 43 02 00 2B 4B FA 3F B2 40 18 00 0A 18 +37 40 1A 40 36 40 92 40 35 40 0E 40 34 40 00 40 +B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 B8 4E +04 57 41 52 4D 00 30 40 4A 4F 3D 40 98 50 92 C3 +30 01 1E 42 08 18 0E 93 9E 24 D2 B3 01 02 02 20 +3E E3 1E 53 F2 D0 03 00 0D 02 E2 B2 60 02 8A 20 +39 42 B0 12 88 60 D2 C3 23 02 2C 42 B2 40 95 00 +14 20 B2 40 00 40 18 20 B0 12 FE 5F 02 24 30 40 +24 61 B0 12 86 60 7A 93 FC 23 B2 40 87 AA 14 20 +92 43 16 20 B2 40 00 48 18 20 B0 12 FE 5F 29 42 +B0 12 88 60 92 43 14 20 82 43 16 20 78 43 3C 42 +B2 40 00 77 18 20 B0 12 FE 5F B2 40 40 69 18 20 +B0 12 44 60 03 24 58 83 F3 23 D9 3F 0C 5C A2 43 +16 20 B2 40 00 50 18 20 B0 12 44 60 D0 23 92 D3 +40 06 82 43 46 06 92 C3 40 06 B0 12 AE 60 38 40 +00 1E 92 48 C6 01 04 20 92 48 C8 01 06 20 5A 48 +C2 01 92 43 02 20 7A 80 06 00 0F 24 7A 82 0D 24 +A2 43 02 20 6A 53 09 24 5A 53 07 24 6A 52 05 24 +3A 50 0B 20 0C 4A 30 40 2A 61 B0 12 AE 60 D2 48 +0D 00 12 20 19 48 0E 00 82 49 08 20 1A 48 16 00 +0A 93 02 20 1A 48 24 00 82 4A 0A 20 09 5A 82 49 +0C 20 09 5A A2 93 02 20 04 24 82 49 0E 20 39 50 +20 00 19 82 12 20 19 82 12 20 82 49 10 20 92 42 +02 20 2C 20 3E 90 0A 00 1A 27 3E 90 16 00 17 2F +2E 93 E6 26 EF 2E 30 4D 80 44 06 0D 1B 5B 37 6D +23 00 38 44 34 42 80 44 19 46 61 73 74 46 6F 72 +74 68 20 C2 A9 4A 2E 4D 2E 54 68 6F 6F 72 65 6E +73 20 38 44 76 44 30 FF 02 47 B8 40 24 42 80 44 +0A 62 79 74 65 73 20 66 72 65 65 00 3C 42 40 49 +2C 4C 04 43 4F 4C 44 00 92 B3 CA 05 FD 23 B2 40 +04 A5 20 01 98 50 B2 40 88 5A 5C 01 B2 D3 06 02 +B2 40 FC FF 02 02 B2 43 26 02 B2 D3 22 02 E2 D2 +25 02 B2 43 42 02 B2 D3 46 02 B2 43 62 02 B2 D3 +66 02 F2 43 26 03 F2 D3 22 03 F2 40 A5 00 61 01 +82 43 66 01 39 40 80 00 B2 40 33 00 64 01 D2 43 +61 01 92 D2 9E 01 08 18 38 40 59 14 18 83 FE 23 +19 83 FA 23 F2 D0 10 00 2A 03 F2 40 A5 00 A1 04 +F2 C0 40 00 A2 04 B2 42 B0 01 39 40 00 10 29 83 +89 43 00 1C FC 23 39 40 4C 00 29 83 B9 40 F6 50 +B4 FF FB 23 B2 40 84 43 F0 FF B2 40 81 00 C0 05 +92 42 02 18 C6 05 92 42 04 18 C8 05 92 C3 C0 05 +92 D3 DA 05 B2 40 81 A9 40 06 B2 40 18 00 46 06 +D2 D3 25 02 B2 D0 C0 04 0C 02 92 C3 40 06 3F 40 +80 1C 31 40 E0 1C 30 12 46 4F A7 3E E2 50 07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 F9 98 -FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D 76 4B -86 5B 54 48 45 4E 5D 00 30 4D D0 4F 86 5B 45 4C -53 45 5D 00 87 12 34 40 00 00 36 41 B0 41 1E 46 -84 48 44 40 28 43 4A 50 8A 40 8A 40 BA 45 06 5B -54 48 45 4E 5D 00 A6 4F 32 43 18 50 9E 45 40 41 -54 40 32 43 EC 4F 2A 40 8A 40 8A 40 BA 45 06 5B -45 4C 53 45 5D 00 A6 4F 32 43 38 50 9E 45 40 41 -54 40 32 43 EA 4F 2A 40 BA 45 04 5B 49 46 5D 00 -A6 4F 32 43 EC 4F 24 43 EA 4F 9E 45 BA 45 05 0D -0A 6B 6F 20 7C 45 FA 44 92 48 24 43 EC 4F DC 4F -84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D 60 50 -89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 41 1E 46 -76 46 6C 40 2A 40 70 50 8B 5B 55 4E 44 45 46 49 -4E 45 44 5D 87 12 B0 41 1E 46 76 46 6C 40 64 41 -2A 40 A4 50 3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F -44 3C 74 4E 06 4D 41 52 4B 45 52 00 B0 12 7C 4B -BA 40 84 12 FC FF BA 40 A2 50 FE FF 9A 42 C8 1D -00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 C6 4B -F0 4E 80 4F 94 4F E8 50 3A 4E 82 4A C8 1D 2E 4E -82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 18 48 -FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 2A 4A -0A 93 F0 23 3E 4F 3D 41 30 4D 60 4F 09 50 57 52 -5F 53 54 41 54 45 84 12 E0 50 46 4F D8 6B CA 4D -09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 2A 51 -92 42 0C 18 2C 51 EF 3F 1C 51 08 50 57 52 5F 48 -45 52 45 00 92 42 C8 1D 2A 51 92 42 C6 1D 2C 51 -30 4D 30 51 08 52 53 54 5F 48 45 52 45 00 92 42 -C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F AC 4E 04 57 -49 50 45 00 39 40 10 00 29 83 B9 43 80 FF FC 23 -B2 40 84 44 82 44 B2 40 0C 52 0A 52 B2 40 76 49 -74 49 B2 40 46 4F 0E 18 B2 40 D8 6B 0C 18 30 12 -3A 51 B2 40 EA 44 E8 44 B2 40 AE 45 AC 45 B2 40 -A0 43 9E 43 B2 40 26 44 24 44 B2 40 3C 1D F8 44 -B2 40 18 00 0A 18 37 40 1A 40 36 40 BC 40 35 40 -0E 40 34 40 00 40 39 40 10 00 29 83 89 43 E0 1D -FC 23 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D 30 41 -7E 51 04 57 41 52 4D 00 30 40 0C 52 3D 40 5A 53 -92 C3 30 01 1E 42 08 18 0E 93 9E 24 D2 B3 01 02 -02 20 3E E3 1E 53 F2 D0 03 00 0D 02 E2 B2 60 02 -8A 20 39 42 B0 12 CE 62 D2 C3 23 02 2C 42 B2 40 -95 00 14 20 B2 40 00 40 18 20 B0 12 44 62 02 24 -30 40 6A 63 B0 12 CC 62 7A 93 FC 23 B2 40 87 AA -14 20 92 43 16 20 B2 40 00 48 18 20 B0 12 44 62 -29 42 B0 12 CE 62 92 43 14 20 82 43 16 20 78 43 -3C 42 B2 40 00 77 18 20 B0 12 44 62 B2 40 40 69 -18 20 B0 12 8A 62 03 24 58 83 F3 23 D9 3F 0C 5C -A2 43 16 20 B2 40 00 50 18 20 B0 12 8A 62 D0 23 -92 D3 40 06 82 43 46 06 92 C3 40 06 B0 12 F4 62 -38 40 00 1E 92 48 C6 01 04 20 92 48 C8 01 06 20 -5A 48 C2 01 92 43 02 20 7A 80 06 00 0F 24 7A 82 -0D 24 A2 43 02 20 6A 53 09 24 5A 53 07 24 6A 52 -05 24 3A 50 0B 20 0C 4A 30 40 70 63 B0 12 F4 62 -D2 48 0D 00 12 20 19 48 0E 00 82 49 08 20 1A 48 -16 00 0A 93 02 20 1A 48 24 00 82 4A 0A 20 09 5A -82 49 0C 20 09 5A A2 93 02 20 04 24 82 49 0E 20 -39 50 20 00 19 82 12 20 19 82 12 20 82 49 10 20 -92 42 02 20 2C 20 3E 90 0A 00 1C 27 3E 90 16 00 -19 2F 2E 93 E8 26 F1 2E 30 4D BA 45 06 0D 1B 5B -37 6D 23 00 7C 45 E2 42 BA 45 1F 46 61 73 74 46 -6F 72 74 68 20 56 33 30 30 20 28 43 29 4A 2E 4D -2E 54 68 6F 6F 72 65 6E 73 20 7C 45 34 40 80 FF -F2 42 28 41 D2 42 BA 45 0B 62 79 74 65 73 20 66 -72 65 65 20 24 43 46 4A 9E 4F 04 43 4F 4C 44 00 -92 B3 CA 05 FD 23 B2 40 04 A5 20 01 B2 40 88 5A -5C 01 B2 D0 03 00 04 02 B2 40 FC FF 02 02 B2 C0 -03 00 06 02 B2 43 26 02 B2 43 22 02 E2 D2 25 02 -B2 43 42 02 B2 D3 46 02 B2 43 62 02 B2 D3 66 02 -F2 43 26 03 F2 D3 22 03 F2 40 A5 00 61 01 82 43 -66 01 39 40 80 00 B2 40 33 00 64 01 D2 43 61 01 -92 D2 9E 01 08 18 38 40 59 14 18 83 FE 23 19 83 -FA 23 F2 D0 10 00 2A 03 F2 40 A5 00 A1 04 F2 C0 -40 00 A2 04 B2 42 B0 01 39 40 00 10 29 83 89 43 -00 1C FC 23 39 40 4C 00 29 83 B9 40 BC 53 B4 FF -FB 23 B2 40 8A 44 F0 FF B2 40 81 00 C0 05 92 42 -02 18 C6 05 92 42 04 18 C8 05 92 C3 C0 05 92 D3 -DA 05 B2 40 81 A9 40 06 B2 40 18 00 46 06 D2 D3 -25 02 B2 D0 C0 04 0C 02 92 C3 40 06 3F 40 80 1C -31 40 E0 1C 30 12 08 52 9B 3E 38 40 C0 1D 39 48 -2A 48 09 5A 1A 52 C4 1D 09 9A 03 24 7E 9A FC 27 -1A 83 0E 4A 2A 88 82 4A C4 1D 30 4D 64 51 09 32 -43 4F 4E 53 54 41 4E 54 87 12 2E 4C 30 48 30 48 -46 4C D4 54 2F 83 9F 4E 02 00 00 00 2E 4E 3D 41 -30 4D BE 54 09 32 56 41 52 49 41 42 4C 45 87 12 -2E 4C 34 40 04 00 06 43 46 4C 2A 40 1C 15 B0 12 -2A 40 1E 46 76 46 32 43 12 55 32 47 28 43 7A 4A -4A 55 14 55 29 4E 39 90 86 12 02 20 2E 53 15 3C -39 90 85 12 03 20 1E 4E 02 00 0F 3C 39 90 84 12 -0C 20 2E 52 B9 90 D2 54 02 00 04 24 B9 90 FA 54 -02 00 03 20 B0 12 D4 54 4A 55 1B 17 30 41 32 B0 -00 02 01 24 3E 4F 30 41 3E 40 28 00 B0 12 FC 54 -B0 12 4E 55 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 -3E 40 29 00 1C 15 12 12 C4 1D 92 53 C4 1D B0 12 -2A 40 1E 46 32 47 28 43 96 55 8C 55 21 53 3E 90 -10 00 87 2D DA 2B 98 55 B2 41 C4 1D D6 3F 87 12 -B0 41 9A 54 A6 55 0C 43 1B 42 C6 1D A2 53 C6 1D -6A 4E 3E 4F 7A 90 23 00 2F 20 92 53 C4 1D B0 12 -FC 54 B0 12 4E 55 0E 93 03 20 3C 40 00 03 21 3C -1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 3C 40 -20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C 3E 92 -03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 30 03 -08 3C 3C 40 30 00 19 42 C6 1D A2 53 C6 1D 89 4E -00 00 3E 4F 3D 41 30 4D 7A 90 26 00 09 20 3C 40 -10 02 92 53 C4 1D B0 12 FC 54 B0 12 4E 55 EB 3F -7A 90 40 00 16 20 3C 40 20 00 92 53 C4 1D B0 12 -74 55 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 74 55 -92 92 C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 0C 5E -D8 3F B0 12 74 55 FA 23 3C 50 10 00 B0 12 58 55 -EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 B0 41 -9A 54 84 56 FE 90 26 00 00 00 3E 40 20 00 03 20 -3C 50 82 00 C6 3F B0 12 74 55 E1 23 3C 50 80 00 -B0 12 58 55 DC 3F 7A 44 04 52 45 54 49 00 87 12 -34 40 00 13 30 48 2A 40 34 40 2C 00 9E 55 7C 56 -C2 56 2E 4E 0E DC 09 4B A2 3F FA 4C 03 4D 4F 56 -84 12 B8 56 00 40 CC 56 05 4D 4F 56 2E 42 84 12 -B8 56 40 40 00 00 03 41 44 44 84 12 B8 56 00 50 -E6 56 05 41 44 44 2E 42 84 12 B8 56 40 50 F2 56 -04 41 44 44 43 00 84 12 B8 56 00 60 00 57 06 41 -44 44 43 2E 42 00 84 12 B8 56 40 60 A8 56 04 53 -55 42 43 00 84 12 B8 56 00 70 1E 57 06 53 55 42 -43 2E 42 00 84 12 B8 56 40 70 2C 57 03 53 55 42 -84 12 B8 56 00 80 3C 57 05 53 55 42 2E 42 84 12 -B8 56 40 80 DC 4C 03 43 4D 50 84 12 B8 56 00 90 -56 57 05 43 4D 50 2E 42 84 12 B8 56 40 90 CA 4C -04 44 41 44 44 00 84 12 B8 56 00 A0 70 57 06 44 -41 44 44 2E 42 00 84 12 B8 56 40 A0 62 57 03 42 -49 54 84 12 B8 56 00 B0 8E 57 05 42 49 54 2E 42 -84 12 B8 56 40 B0 9A 57 03 42 49 43 84 12 B8 56 -00 C0 A8 57 05 42 49 43 2E 42 84 12 B8 56 40 C0 -B4 57 03 42 49 53 84 12 B8 56 00 D0 C2 57 05 42 -49 53 2E 42 84 12 B8 56 40 D0 00 00 03 58 4F 52 -84 12 B8 56 00 E0 DC 57 05 58 4F 52 2E 42 84 12 -B8 56 40 E0 0E 57 03 41 4E 44 84 12 B8 56 00 F0 -F6 57 05 41 4E 44 2E 42 84 12 B8 56 40 F0 B0 41 -9E 55 14 58 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 -0C DA 4F 3F 48 57 03 52 52 43 84 12 0E 58 00 10 -26 58 05 52 52 43 2E 42 84 12 0E 58 40 10 32 58 -04 53 57 50 42 00 84 12 0E 58 80 10 40 58 03 52 -52 41 84 12 0E 58 00 11 4E 58 05 52 52 41 2E 42 -84 12 0E 58 40 11 5A 58 03 53 58 54 84 12 0E 58 -80 11 00 00 04 50 55 53 48 00 84 12 0E 58 00 12 -74 58 06 50 55 53 48 2E 42 00 84 12 0E 58 40 12 -CE 57 04 43 41 4C 4C 00 84 12 0E 58 80 12 1A 53 -0E 4A 87 12 E2 42 BA 45 0D 6F 75 74 20 6F 66 20 -62 6F 75 6E 64 73 E6 49 B0 41 9A 54 BE 58 92 53 -C4 1D 3E 40 2C 00 B0 12 2A 40 1E 46 32 47 28 43 -7A 4A 72 56 D6 58 0A 4E 3E 4F 1A 83 E0 33 29 4E -59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 -10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 -8F 3F 68 58 06 52 52 43 4D 2E 41 00 84 12 B8 58 -40 00 04 59 04 52 52 43 4D 00 84 12 B8 58 50 00 -14 59 06 52 52 41 4D 2E 41 00 84 12 B8 58 40 01 -22 59 04 52 52 41 4D 00 84 12 B8 58 50 01 32 59 -06 52 4C 41 4D 2E 41 00 84 12 B8 58 40 02 40 59 -04 52 4C 41 4D 00 84 12 B8 58 50 02 50 59 06 52 -52 55 4D 2E 41 00 84 12 B8 58 40 03 5E 59 04 52 -52 55 4D 00 84 12 B8 58 50 03 82 58 07 50 55 53 -48 4D 2E 41 84 12 B8 58 00 14 7C 59 05 50 55 53 -48 4D 84 12 B8 58 00 15 8C 59 06 50 4F 50 4D 2E -41 00 84 12 B8 58 00 16 9A 59 04 50 4F 50 4D 00 -84 12 B8 58 00 17 85 12 00 3C 6E 59 03 53 3E 3D -85 12 00 38 BC 59 02 53 3C 00 85 12 00 34 AA 59 -03 30 3E 3D 85 12 00 30 D0 59 02 30 3C 00 85 12 -00 30 00 00 02 55 3C 00 85 12 00 2C E4 59 03 55 -3E 3D 85 12 00 28 DA 59 03 30 3C 3E 85 12 00 24 -F8 59 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 -1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 0E 4A 30 4D -EE 59 04 54 48 45 4E 00 1A 42 C6 1D 08 4E 3E 4F -09 48 29 53 0A 89 0A 11 3A 90 00 02 31 2F 88 DA -00 00 30 4D 7E 57 04 45 4C 53 45 00 1A 42 C6 1D -BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 8F 4A 00 00 -E3 3F 22 5A 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F -19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE 10 3B -3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 1D 30 4D -02 58 05 41 47 41 49 4E 87 12 B6 59 6A 5A 2A 40 -00 00 05 57 48 49 4C 45 87 12 10 5A 78 40 2A 40 -C6 59 06 52 45 50 45 41 54 00 87 12 B6 59 6A 5A -28 5A 2A 40 C6 5A 3D 41 2E 4E 08 4E 3E 4F 2A 48 -0A 93 88 43 00 00 CA 23 98 42 C6 1D 00 00 30 4D -92 58 03 42 57 31 84 12 C4 5A E0 1D E2 5A 03 42 -57 32 84 12 C4 5A E2 1D EE 5A 03 42 57 33 84 12 -C4 5A E4 1D 06 5B 3D 41 1A 42 C6 1D 2E 4E 28 4E -08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 C6 1D -8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 -04 5B E6 1D 2A 5B 03 46 57 32 84 12 04 5B E8 1D -36 5B 03 46 57 33 84 12 04 5B EA 1D 3E 90 00 30 -07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 -30 4D 42 5B 04 47 4F 54 4F 00 87 12 B6 59 6C 4A -26 48 2A 40 00 00 05 3F 47 4F 54 4F 87 12 4C 5B -6C 4A 26 48 2A 40 00 00 03 4A 4D 50 87 12 6C 4A -98 5A 2A 40 76 5B 04 3F 4A 4D 50 00 87 12 4C 5B -6C 4A 78 40 6A 5A 2A 40 87 12 B0 41 9A 54 B0 5B -69 4E 3E 4F 3C 4F 2C 4C 1B 42 C6 1D A2 53 C6 1D -79 90 52 00 0A 20 B0 12 74 55 5E 0E 5E 0E 0E DC -8B 4E 00 00 0E 4B 3D 41 30 4D 79 90 23 00 0D 20 -3C C0 40 00 92 53 C4 1D A2 53 C6 1D B0 12 FC 54 -BB 4F 02 00 3E F0 0F 00 E8 3F 79 90 26 00 03 20 -3C E0 E0 00 EF 3F 3C C0 F0 00 79 90 40 00 12 20 -92 53 C4 1D B0 12 74 55 D8 23 3C D0 10 00 3E 40 -2B 00 B0 12 74 55 92 92 C0 1D C4 1D CE 27 92 53 -C4 1D CB 3F 3C D0 30 00 A2 53 C6 1D 3E 40 28 00 -B0 12 FC 54 BB 4F 02 00 3E 40 29 00 EA 3F 87 12 -B0 41 9A 54 56 5C 3B 4F 2C 4B 69 4E 7E 40 20 00 -79 90 52 00 03 20 B0 12 74 55 B1 3F 3C C0 F0 00 -A2 53 C6 1D 79 90 26 00 09 20 3C D0 60 00 92 53 -C4 1D B0 12 FC 54 BB 4F 02 00 A1 3F 3C D0 70 00 -3E 40 28 00 B0 12 FC 54 BB 4F 02 00 3E 40 29 00 -E2 3F 34 40 2C 00 A8 5B 4E 5C 62 40 2A 40 D8 56 -04 4D 4F 56 41 00 84 12 A2 5C C0 00 FA 5A 04 43 -4D 50 41 00 84 12 A2 5C D0 00 92 5A 04 41 44 44 -41 00 84 12 A2 5C E0 00 B2 5A 04 53 55 42 41 00 -84 12 A2 5C F0 00 BE 5C 05 43 41 4C 4C 41 87 12 -B0 41 9A 54 F6 5C 1B 42 C6 1D A2 53 C6 1D 6E 4E -3C 40 34 01 7E 90 52 00 0B 20 7E 40 20 00 B0 12 -74 55 5C 0E 0C DE 8B 4C 00 00 3E 4F 3D 41 30 4D -2C 53 7E 90 40 00 0B 20 92 53 C4 1D 7E 40 20 00 -B0 12 74 55 EE 23 1C 53 3E 40 2B 00 E8 3F A2 53 -C6 1D 7E 90 23 00 09 20 3C 40 3B 01 92 53 C4 1D -B0 12 FC 54 BB 4F 02 00 DC 3F 7E 90 26 00 02 20 -2C 53 F4 3F 7E 40 28 00 1C 83 B0 12 FC 54 BB 4F -02 00 3E 40 29 00 CB 3F 87 12 B0 41 9A 54 80 5D -69 4E 3E 4F 3C 40 00 18 79 90 52 00 05 20 B0 12 -74 55 0E 4C 3D 41 30 4D 82 43 EE 1D 79 90 23 00 -0B 20 92 53 C4 1D B0 12 FC 54 2F 53 3E F0 0F 00 -5E 0A 5E 0E 0C DE ED 3F 79 90 26 00 F2 27 79 90 -40 00 12 20 92 53 C4 1D B0 12 74 55 E2 23 3E 40 -2B 00 92 53 C4 1D B0 12 74 55 92 92 C0 1D C4 1D -D8 27 92 53 C4 1D D5 3F 3E 40 28 00 B0 12 FC 54 -8F 4E 00 00 3E 40 29 00 B0 12 74 55 3E 4F 3E F0 -0F 00 0C DE EA 3F 87 12 B0 41 9A 54 0E 5E 3C 4F -69 4E 3E 40 20 00 79 90 52 00 BB 27 82 43 EE 1D -79 90 26 00 08 20 92 53 C4 1D B0 12 FC 54 2F 53 -3E F0 0F 00 BF 3F 3E 40 28 00 B0 12 FC 54 F7 3F -1B 42 C6 1D A2 53 C6 1D 0C 4E 3E 4F 1C D2 EE 1D -82 43 EE 1D 3C DE 8B 4C 00 00 B2 41 C4 1D 30 4D -34 40 C4 1D F2 40 B0 40 34 40 2C 00 78 5D 06 5E -40 5E 24 43 B8 56 B0 5C 04 4D 4F 56 58 00 84 12 -60 5E 40 00 00 40 78 5E 06 4D 4F 56 58 2E 41 00 -84 12 60 5E 00 00 40 40 88 5E 06 4D 4F 56 58 2E -42 00 84 12 60 5E 40 00 40 40 CC 5C 04 41 44 44 -58 00 84 12 60 5E 40 00 00 50 AC 5E 06 41 44 44 -58 2E 41 00 84 12 60 5E 00 00 40 50 BC 5E 06 41 -44 44 58 2E 42 00 84 12 60 5E 40 00 40 50 CE 5E -05 41 44 44 43 58 84 12 60 5E 40 00 00 60 E0 5E -07 41 44 44 43 58 2E 41 84 12 60 5E 00 00 40 60 -F0 5E 07 41 44 44 43 58 2E 42 84 12 60 5E 40 00 -40 60 DA 5C 05 53 55 42 43 58 84 12 60 5E 40 00 -00 70 14 5F 07 53 55 42 43 58 2E 41 84 12 60 5E -00 00 40 70 24 5F 07 53 55 42 43 58 2E 42 84 12 -60 5E 40 00 40 70 36 5F 04 53 55 42 58 00 84 12 -60 5E 40 00 00 80 48 5F 06 53 55 42 58 2E 41 00 -84 12 60 5E 00 00 40 80 58 5F 06 53 55 42 58 2E -42 00 84 12 60 5E 40 00 40 80 E8 5C 04 43 4D 50 -58 00 84 12 60 5E 40 00 00 90 7C 5F 06 43 4D 50 -58 2E 41 00 84 12 60 5E 00 00 40 90 8C 5F 06 43 -4D 50 58 2E 42 00 84 12 60 5E 40 00 40 90 46 5A -05 44 41 44 44 58 84 12 60 5E 40 00 00 A0 B0 5F -07 44 41 44 44 58 2E 41 84 12 60 5E 00 00 40 A0 -C0 5F 07 44 41 44 44 58 2E 42 84 12 60 5E 40 00 -40 A0 9E 5F 04 42 49 54 58 00 84 12 60 5E 40 00 -00 B0 E4 5F 06 42 49 54 58 2E 41 00 84 12 60 5E -00 00 40 B0 F4 5F 06 42 49 54 58 2E 42 00 84 12 -60 5E 40 00 40 B0 06 60 04 42 49 43 58 00 84 12 -60 5E 40 00 00 C0 18 60 06 42 49 43 58 2E 41 00 -84 12 60 5E 00 00 40 C0 28 60 06 42 49 43 58 2E -42 00 84 12 60 5E 40 00 40 C0 3A 60 04 42 49 53 -58 00 84 12 60 5E 40 00 00 D0 4C 60 06 42 49 53 -58 2E 41 00 84 12 60 5E 00 00 40 D0 5C 60 06 42 -49 53 58 2E 42 00 84 12 60 5E 40 00 40 D0 E8 57 -04 58 4F 52 58 00 84 12 60 5E 40 00 00 E0 80 60 -06 58 4F 52 58 2E 41 00 84 12 60 5E 00 00 40 E0 -90 60 06 58 4F 52 58 2E 42 00 84 12 60 5E 40 00 -40 E0 02 5F 04 41 4E 44 58 00 84 12 60 5E 40 00 -00 F0 B4 60 06 41 4E 44 58 2E 41 00 84 12 60 5E -00 00 40 F0 C4 60 06 41 4E 44 58 2E 42 00 84 12 -60 5E 40 00 40 F0 34 40 C4 1D F2 40 B0 40 B0 41 -78 5D 40 5E 24 43 0E 58 6A 5F 04 52 52 43 58 00 -84 12 E6 60 40 00 00 10 FA 60 06 52 52 43 58 2E -41 00 84 12 E6 60 00 00 40 10 0A 61 06 52 52 43 -58 2E 42 00 84 12 E6 60 40 00 40 10 1C 61 04 52 -52 55 58 00 84 12 E6 60 40 01 00 10 2E 61 06 52 -52 55 58 2E 41 00 84 12 E6 60 00 01 40 10 3E 61 -06 52 52 55 58 2E 42 00 84 12 E6 60 40 01 40 10 -50 61 05 53 57 50 42 58 84 12 E6 60 40 00 80 10 -62 61 07 53 57 50 42 58 2E 41 84 12 E6 60 00 00 -80 10 72 61 04 52 52 41 58 00 84 12 E6 60 40 00 -00 11 84 61 06 52 52 41 58 2E 41 00 84 12 E6 60 -00 00 40 11 94 61 06 52 52 41 58 2E 42 00 84 12 -E6 60 40 00 40 11 A6 61 04 53 58 54 58 00 84 12 -E6 60 40 00 80 11 B8 61 06 53 58 54 58 2E 41 00 -84 12 E6 60 00 00 80 11 02 5A 05 50 55 53 48 58 -84 12 E6 60 40 00 00 12 DA 61 07 50 55 53 48 58 -2E 41 84 12 E6 60 00 00 40 12 EA 61 07 50 55 53 -48 58 2E 42 84 12 E6 60 40 00 40 12 C8 61 03 52 -50 54 87 12 B0 41 9A 54 1A 62 29 4E 7E 40 20 00 -79 90 52 00 06 20 B0 12 74 55 03 24 3E D0 80 00 -04 3C B0 12 FC 54 3E F0 0F 00 82 4E EE 1D 3E 4F -3D 41 30 4D 1A 43 25 3C D2 C3 23 02 E2 B2 60 02 -02 24 30 40 B0 53 1A 52 04 20 19 62 06 20 92 43 -14 20 A2 93 02 20 07 24 0A 5A 49 69 82 4A 16 20 -C2 49 18 20 0A 3C C2 4A 15 20 8A 10 C2 4A 16 20 -C2 49 17 20 89 10 C2 49 18 20 B0 12 CC 62 5A 53 -FC 23 39 40 05 00 D2 49 14 20 4E 06 82 93 46 06 -05 24 92 B3 6C 06 FD 27 C2 93 4C 06 59 83 F3 2F -19 83 0B 30 F2 43 4E 06 82 93 46 06 03 24 92 B3 -6C 06 FD 27 5A 92 4C 06 F3 23 30 41 19 43 3A 43 -8A 10 C2 4A 4E 06 82 93 46 06 05 24 92 B3 6C 06 -FD 27 C2 93 4C 06 19 83 F3 23 5A 42 4C 06 30 41 -1A 52 08 20 09 43 1C D3 F2 40 51 00 19 20 B0 12 -48 62 33 20 B0 12 CC 62 6A 53 04 24 FB 23 D9 42 -4C 06 FF 1D F2 43 4E 06 03 43 19 53 39 90 01 02 -F6 23 F2 43 4E 06 3C C0 03 00 D2 D3 23 02 30 41 -09 43 2C D3 F0 40 58 00 E1 BC B0 12 48 62 15 20 -3A 40 FE FF 29 43 B0 12 D0 62 D2 49 00 1E 4E 06 -03 43 19 53 39 90 00 02 F8 23 39 40 03 00 B0 12 -CE 62 7A C0 E1 00 6A 92 DE 27 8C 10 1C 52 4C 06 -D2 D3 23 02 87 12 1A 45 BA 45 0B 3C 20 53 44 20 -45 72 72 6F 72 21 88 63 2F 83 B2 40 10 00 DC 1D -0E 4C B0 12 2A 40 D2 42 E6 49 92 4B 0E 00 22 20 -92 4B 10 00 24 20 5A 42 23 20 58 42 22 20 92 93 -02 20 08 24 59 42 24 20 89 10 0A 59 88 10 08 58 -0A 6A 88 10 08 58 30 41 82 43 1C 20 92 42 0E 20 -1A 20 C2 93 24 20 03 20 92 93 22 20 14 24 92 42 -22 20 D0 04 92 42 24 20 D2 04 92 42 12 20 C8 04 -92 42 E4 04 1A 20 92 42 E6 04 1C 20 92 52 10 20 -1A 20 82 63 1C 20 30 41 92 4B 0E 00 22 20 92 4B -10 00 24 20 B0 12 C8 63 5A 4B 03 00 82 5A 1A 20 -82 63 1C 20 30 41 09 93 07 24 F8 90 20 00 00 1E -03 20 18 53 19 83 F9 23 30 41 1B 42 32 20 82 43 -1E 20 B2 90 00 02 20 20 A8 20 BB 80 00 02 12 00 -8B 73 14 00 DB 53 03 00 DB 92 12 20 03 00 11 28 -CB 43 03 00 B0 12 9A 63 B0 12 F0 62 8B 43 10 00 -9B 48 00 1E 0E 00 92 93 02 20 03 24 9B 48 02 1E -10 00 B2 40 00 02 20 20 8B 93 14 00 0B 20 92 9B -12 00 1E 20 82 2C BB 90 00 02 12 00 03 2C 92 4B -12 00 20 20 B0 12 08 64 1A 42 1A 20 19 42 1C 20 -22 3F 3C 42 3B 40 38 20 09 43 CB 93 02 00 10 24 -9B 92 24 20 0C 00 04 20 9B 92 22 20 0A 00 07 24 -09 4B 3B 50 1C 00 3B 90 18 21 EF 23 0C 5C 30 41 -0C 43 82 4B 32 20 8B 49 00 00 09 93 0A 24 99 52 -C4 1D 16 00 4A 93 05 34 C9 93 02 00 02 34 5A 59 -02 00 CB 4A 02 00 CB 43 03 00 9B 42 1A 20 04 00 -9B 42 1C 20 06 00 18 42 30 20 8B 48 08 00 9B 48 -1A 1E 0A 00 9B 48 14 1E 0C 00 9B 48 1A 1E 0E 00 -9B 48 14 1E 10 00 9B 48 1C 1E 12 00 9B 48 1E 1E -14 00 82 43 1E 20 6A 93 5F 27 C9 37 8B 43 16 00 -7A 93 02 24 07 38 95 3F B2 40 1C 21 F8 44 B2 40 -BE 43 24 44 9B 42 C0 1D 18 00 9B 82 C4 1D 18 00 -9B 42 C2 1D 1A 00 9B 52 C4 1D 1A 00 82 3F CB 43 -02 00 2B 4B 82 4B 32 20 0B 93 06 24 92 4B 16 00 -1E 20 B0 12 82 64 22 C3 30 41 1B 42 32 20 0B 93 -FB 27 EB 93 02 00 04 20 B0 12 FA 69 B0 12 C2 69 -CB 93 02 00 E4 37 1E 4B 18 00 9F 4B 1A 00 00 00 -31 50 06 00 3D 41 B0 12 7E 65 02 24 30 40 30 45 -B2 40 3C 1D F8 44 B2 40 26 44 24 44 30 40 1A 45 -E4 54 85 52 45 41 44 22 5A 43 19 3C 02 52 86 57 -52 49 54 45 22 00 6A 43 12 3C 88 4F 84 44 45 4C -22 00 6A 42 0C 3C AA 53 05 43 4C 4F 53 45 B0 12 -9A 65 30 4D B4 50 85 4C 4F 41 44 22 7A 43 2F 83 -8F 4E 00 00 0E 4A 82 93 BE 1D 0A 24 87 12 34 40 -34 40 30 48 30 48 D4 45 34 40 4E 66 30 48 2A 40 -87 12 34 40 22 00 1E 46 84 48 4C 66 3D 41 35 4F -0E 55 82 4E 36 20 1C 43 92 42 2C 20 22 20 92 42 -2E 20 24 20 0E 95 8D 24 F5 90 3A 00 01 00 01 20 -25 53 F5 90 5C 00 00 00 08 20 15 53 92 42 02 20 -22 20 82 43 24 20 0E 95 70 24 82 45 34 20 B0 12 -C8 63 34 40 20 00 A2 93 02 20 04 24 92 92 22 20 -02 20 02 24 14 42 12 20 B0 12 A8 64 2C 43 0A 43 -08 4A 58 0E 08 58 82 48 30 20 C8 93 00 1E 61 24 -39 42 F8 95 00 1E 04 20 18 53 19 83 FA 23 15 53 -F5 90 2E 00 FF FF 19 24 39 50 03 00 B0 12 26 64 -06 20 F5 90 5C 00 FF FF 29 24 0E 95 27 28 15 42 -34 20 1A 53 3A 90 10 00 DB 23 92 53 1A 20 82 63 -1C 20 14 83 D1 23 2C 42 3C 3C F5 90 2E 00 FE FF -EE 27 B0 12 26 64 EB 23 39 40 03 00 F8 95 00 1E -04 20 18 53 19 83 FA 23 09 3C 0E 95 E0 2F F5 90 -5C 00 FF FF DC 23 B0 12 26 64 D9 23 18 42 30 20 -92 48 1A 1E 22 20 92 48 14 1E 24 20 F8 B0 10 00 -0B 1E 14 24 82 93 24 20 06 20 82 93 22 20 03 20 -92 42 02 20 22 20 0E 95 8E 2F 92 42 22 20 2C 20 -92 42 24 20 2E 20 8F 43 00 00 03 3C 2A 4F B0 12 -B2 64 34 40 00 40 35 40 0E 40 3A 4F 3E 4F 0A 93 -04 24 7A 93 12 20 0C 93 01 20 30 4D 87 12 BA 45 -0B 3C 20 4F 70 65 6E 45 72 72 6F 72 1A 45 F2 42 -84 48 7C 45 44 45 24 43 86 63 1A 93 B6 20 0C 93 -ED 23 30 4D E2 65 04 52 45 41 44 00 2F 83 8F 4E -00 00 1E 42 32 20 B0 12 3A 64 1E 82 32 20 30 4D -2C 43 12 12 2A 20 18 42 02 20 08 58 2A 41 82 9A -0A 20 A1 24 B0 12 F0 62 09 43 28 93 03 24 89 93 -02 1E 03 20 89 93 00 1E 07 24 09 58 39 90 00 02 -F4 23 91 53 00 00 EA 3F 0C 43 6A 41 B9 43 00 1E -28 93 0F 24 B9 40 FF 0F 02 1E 09 11 8A 10 09 5A -5A 41 01 00 0A 11 09 10 82 4A 28 20 82 49 26 20 -07 3C 09 11 C2 49 26 20 C2 4A 27 20 82 43 28 20 -3A 41 82 4A 2A 20 30 41 0A 12 1A 52 08 20 B0 12 -30 63 3A 41 1A 52 0C 20 30 40 30 63 F2 B0 40 00 -A2 04 29 20 F2 B0 10 00 A2 04 FC 27 5A 42 B0 04 -4A 11 59 42 B4 04 F2 40 20 00 C0 04 D2 42 B1 04 -C8 04 1A 52 E4 04 D2 42 B5 04 C8 04 19 52 E4 04 -D2 42 B2 04 C0 04 B2 40 00 08 C8 04 1A 52 E4 04 -92 42 B6 04 C0 04 B2 80 BC 07 C0 04 B2 40 00 02 -C8 04 19 52 E4 04 30 41 22 2A 2B 2C 2F 3A 3B 3C -3D 3E 3F 5B 5C 5D 7C 2E 29 92 06 38 39 80 03 00 -B0 12 18 69 39 40 03 00 7A 4B C8 4A 00 1E 82 9B -36 20 12 28 0D 12 3D 40 0F 00 3C 40 C8 68 7A 9C -F3 27 1D 83 FC 23 3D 41 6A 9C E6 27 3A 80 21 00 -EB 3B 18 53 19 83 E8 23 09 93 06 24 F8 40 20 00 -00 1E 18 53 19 83 FA 23 30 41 2A 93 EB 20 2C 93 -0D 24 0C 93 BA 24 87 12 BA 45 0C 3C 20 57 72 69 -74 65 45 72 72 6F 72 00 24 43 AC 67 B0 12 E0 67 -92 42 26 20 22 20 92 42 28 20 24 20 B0 12 58 68 -B0 12 A8 64 18 42 30 20 F8 40 20 00 0B 1E B0 12 -6C 68 88 43 0C 1E 88 4A 0E 1E 88 49 10 1E 88 49 -12 1E 98 42 24 20 14 1E 98 42 22 20 1A 1E 88 43 -1C 1E 88 43 1E 1E 1C 43 1B 42 34 20 82 9B 36 20 -CA 27 FB 90 2E 00 00 00 C6 27 39 40 0B 00 B0 12 -E8 68 B0 12 04 6A 2A 43 B0 12 B2 64 0C 93 BB 23 -30 4D 1A 4B 04 00 19 4B 06 00 B0 12 F6 62 B0 12 -6C 68 18 4B 08 00 88 49 12 1E 88 4A 16 1E 88 49 -18 1E 98 4B 12 00 1C 1E 98 4B 14 00 1E 1E 1A 4B -04 00 19 4B 06 00 30 40 32 63 9B 52 1E 20 12 00 -8B 63 14 00 1A 42 1A 20 19 42 1C 20 30 40 32 63 -B2 40 00 02 1E 20 1B 42 32 20 B0 12 FA 69 82 43 -1E 20 DB 53 03 00 DB 92 12 20 03 00 22 20 CB 43 -03 00 B0 12 9A 63 08 12 0A 12 B0 12 E0 67 2A 91 -05 24 B0 12 58 68 2A 41 B0 12 F0 62 3A 41 38 41 -98 42 26 20 00 1E 92 93 02 20 03 24 98 42 28 20 -02 1E B0 12 58 68 9B 42 26 20 0E 00 9B 42 28 20 -10 00 30 40 08 64 EE 65 05 57 52 49 54 45 B0 12 -10 6A 30 4D C6 67 07 53 44 5F 45 4D 49 54 B2 90 -00 02 1E 20 02 28 B0 12 10 6A 18 42 1E 20 C8 4E -00 1E 92 53 1E 20 3E 4F 30 4D 58 4B 13 00 59 4B -14 00 89 10 09 58 58 4B 15 00 5B 42 12 20 0A 43 -3C 42 08 11 09 10 4A 10 1C 83 0B 11 FA 2B 0A 11 -1C 83 FD 37 1B 42 32 20 19 5B 0A 00 18 6B 0C 00 -8B 49 0E 00 8B 48 10 00 CB 4A 03 00 1A 4B 12 00 -BB C0 FF 01 12 00 3A F0 FF 01 82 4A 1E 20 B0 12 -A4 64 30 4D 0C 93 38 20 38 90 E0 01 03 2C C8 93 -20 1E 02 24 7C 40 E5 00 C8 4C 00 1E B0 12 04 6A -B0 12 A6 63 82 4A 2A 20 0B 4A B0 12 F0 62 1A 48 -00 1E 88 43 00 1E 92 93 02 20 09 24 19 48 02 1E -88 43 02 1E 39 F0 FF 0F 39 90 FF 0F 02 20 3A 93 -0E 24 82 4A 22 20 82 49 24 20 B0 12 A6 63 0B 9A -E6 27 0A 12 0A 4B B0 12 58 68 3A 41 DD 3F 0A 4B -B0 12 58 68 B0 12 9A 65 30 4D 8C 4D 08 54 45 52 -4D 32 53 44 22 00 87 12 02 66 34 40 02 00 F2 42 -84 48 4E 66 96 6B 3D 41 92 C3 DC 05 08 43 B0 12 -5A 44 92 B3 DC 05 FD 27 59 42 CC 05 69 92 0D 24 -C8 49 00 1E 18 53 38 90 FF 01 F3 2B 03 24 B0 12 -10 6A EC 3F B0 12 6C 44 EC 3F B0 12 6C 44 82 48 -1E 20 B0 12 9A 65 30 4D +FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D 58 4A +86 5B 54 48 45 4E 5D 00 30 4D 00 52 86 5B 45 4C +53 45 5D 00 87 12 76 44 00 00 C6 40 A4 47 E2 44 +86 47 34 40 40 42 76 52 44 40 80 44 06 5B 54 48 +45 4E 5D 00 D6 51 4A 42 46 52 5A 44 D0 40 58 40 +4A 42 1C 52 2A 40 44 40 80 44 06 5B 45 4C 53 45 +5D 00 D6 51 4A 42 64 52 5A 44 D0 40 58 40 4A 42 +1A 52 2A 40 80 44 04 5B 49 46 5D 00 D6 51 4A 42 +1C 52 3C 42 1A 52 5A 44 80 44 05 0D 0A 6B 6F 20 +38 44 EE 43 94 47 3C 42 1C 52 0C 52 84 5B 49 46 +5D 00 0E 93 3E 4F BE 27 30 4D 8C 52 89 5B 44 45 +46 49 4E 45 44 5D 87 12 A4 47 E2 44 50 45 6A 40 +2A 40 9C 52 8B 5B 55 4E 44 45 46 49 4E 45 44 5D +87 12 A4 47 E2 44 50 45 6A 40 00 41 2A 40 D0 52 +3D 41 B2 4E 0E 18 A2 4E 0C 18 3E 4F 30 40 74 4E +F2 4C 06 4D 41 52 4B 45 52 00 B0 12 5E 4A BA 40 +84 12 FC FF BA 40 CE 52 FE FF 9A 42 C8 1D 00 00 +28 83 8A 48 02 00 A2 52 C6 1D 30 40 A6 4A 1C 15 +B0 12 2A 40 E2 44 50 45 4A 42 24 53 0C 46 40 42 +74 49 3E 53 26 53 39 4E 39 80 86 12 08 24 19 53 +02 20 2E 4E 04 3C 2E 53 19 53 01 24 2E 82 1B 17 +30 41 32 B0 00 02 01 24 3E 4F 30 41 3E 40 28 00 +B0 12 0E 53 B0 12 42 53 19 42 C6 1D A2 53 C6 1D +89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D 92 53 +C4 1D B0 12 2A 40 E2 44 0C 46 40 42 8A 53 80 53 +21 53 3E 90 10 00 81 2D DA 2B 8C 53 B2 41 C4 1D +D6 3F 87 12 A4 47 D6 44 9A 53 0C 43 1B 42 C6 1D +A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 29 20 92 53 +C4 1D B0 12 0E 53 B0 12 42 53 3C 40 00 03 0E 93 +1C 24 3C 40 10 03 1E 93 18 24 3C 40 20 03 2E 93 +14 24 3C 40 20 02 2E 92 10 24 3C 40 30 02 3E 92 +0C 24 3C 40 30 03 3E 93 08 24 3C 40 30 00 19 42 +C6 1D A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D +7A 90 26 00 09 20 3C 40 10 02 92 53 C4 1D B0 12 +0E 53 B0 12 42 53 EB 3F 7A 90 40 00 16 20 3C 40 +20 00 92 53 C4 1D B0 12 68 53 0C 20 3C 50 10 00 +3E 40 2B 00 B0 12 68 53 92 92 C0 1D C4 1D 02 24 +92 53 C4 1D 8E 10 0C 5E D8 3F B0 12 68 53 FA 23 +3C 50 10 00 B0 12 4C 53 EF 3F 0C 43 1B 42 C6 1D +A2 53 C6 1D 87 12 A4 47 D6 44 6C 54 FE 90 26 00 +00 00 3E 40 20 00 03 20 3C 50 82 00 C6 3F B0 12 +68 53 E1 23 3C 50 80 00 B0 12 4C 53 DC 3F D6 42 +04 52 45 54 49 00 87 12 76 44 00 13 12 47 2A 40 +76 44 2C 00 92 53 64 54 AA 54 09 4B 2E 4E 0E DC +A2 3F A6 4B 03 4D 4F 56 84 12 A0 54 00 40 B4 54 +05 4D 4F 56 2E 42 84 12 A0 54 40 40 00 00 03 41 +44 44 84 12 A0 54 00 50 CE 54 05 41 44 44 2E 42 +84 12 A0 54 40 50 DA 54 04 41 44 44 43 00 84 12 +A0 54 00 60 E8 54 06 41 44 44 43 2E 42 00 84 12 +A0 54 40 60 90 54 04 53 55 42 43 00 84 12 A0 54 +00 70 06 55 06 53 55 42 43 2E 42 00 84 12 A0 54 +40 70 14 55 03 53 55 42 84 12 A0 54 00 80 24 55 +05 53 55 42 2E 42 84 12 A0 54 40 80 88 4B 03 43 +4D 50 84 12 A0 54 00 90 3E 55 05 43 4D 50 2E 42 +84 12 A0 54 40 90 76 4B 04 44 41 44 44 00 84 12 +A0 54 00 A0 58 55 06 44 41 44 44 2E 42 00 84 12 +A0 54 40 A0 4A 55 03 42 49 54 84 12 A0 54 00 B0 +76 55 05 42 49 54 2E 42 84 12 A0 54 40 B0 82 55 +03 42 49 43 84 12 A0 54 00 C0 90 55 05 42 49 43 +2E 42 84 12 A0 54 40 C0 9C 55 03 42 49 53 84 12 +A0 54 00 D0 AA 55 05 42 49 53 2E 42 84 12 A0 54 +40 D0 00 00 03 58 4F 52 84 12 A0 54 00 E0 C4 55 +05 58 4F 52 2E 42 84 12 A0 54 40 E0 F6 54 03 41 +4E 44 84 12 A0 54 00 F0 DE 55 05 41 4E 44 2E 42 +84 12 A0 54 40 F0 A4 47 92 53 FC 55 0A 4C 3C F0 +70 00 8A 10 3A F0 0F 00 0C DA 4F 3F 30 55 03 52 +52 43 84 12 F6 55 00 10 0E 56 05 52 52 43 2E 42 +84 12 F6 55 40 10 1A 56 04 53 57 50 42 00 84 12 +F6 55 80 10 28 56 03 52 52 41 84 12 F6 55 00 11 +36 56 05 52 52 41 2E 42 84 12 F6 55 40 11 42 56 +03 53 58 54 84 12 F6 55 80 11 00 00 04 50 55 53 +48 00 84 12 F6 55 00 12 5C 56 06 50 55 53 48 2E +42 00 84 12 F6 55 40 12 B6 55 04 43 41 4C 4C 00 +84 12 F6 55 80 12 1A 53 0E 4A 87 12 34 42 80 44 +0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 F2 48 +A4 47 D6 44 A6 56 92 53 C4 1D 3E 40 2C 00 B0 12 +2A 40 E2 44 0C 46 40 42 74 49 5A 54 BE 56 0A 4E +3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A +01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F +2A 92 D1 2F 8A 10 5A 06 8F 3F 50 56 06 52 52 43 +4D 2E 41 00 84 12 A0 56 40 00 EC 56 04 52 52 43 +4D 00 84 12 A0 56 50 00 FC 56 06 52 52 41 4D 2E +41 00 84 12 A0 56 40 01 0A 57 04 52 52 41 4D 00 +84 12 A0 56 50 01 1A 57 06 52 4C 41 4D 2E 41 00 +84 12 A0 56 40 02 28 57 04 52 4C 41 4D 00 84 12 +A0 56 50 02 38 57 06 52 52 55 4D 2E 41 00 84 12 +A0 56 40 03 46 57 04 52 52 55 4D 00 84 12 A0 56 +50 03 6A 56 07 50 55 53 48 4D 2E 41 84 12 A0 56 +00 14 64 57 05 50 55 53 48 4D 84 12 A0 56 00 15 +74 57 06 50 4F 50 4D 2E 41 00 84 12 A0 56 00 16 +82 57 04 50 4F 50 4D 00 84 12 A0 56 00 17 56 57 +03 53 3E 3D 85 12 00 38 A0 57 02 53 3C 00 85 12 +00 34 92 57 03 30 3E 3D 85 12 00 30 B4 57 02 30 +3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 00 2C +C8 57 03 55 3E 3D 85 12 00 28 BE 57 03 30 3C 3E +85 12 00 24 DC 57 02 30 3D 00 85 12 00 20 00 00 +02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D +0E 4A 30 4D D2 57 04 54 48 45 4E 00 1A 42 C6 1D +08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 +33 2F 88 DA 00 00 30 4D 66 55 04 45 4C 53 45 00 +1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 +8F 4A 00 00 E3 3F 06 58 05 55 4E 54 49 4C 3A 4F +08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 +00 FE 12 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 +C6 1D 30 4D EA 55 05 41 47 41 49 4E 0A 4E 38 40 +00 3C E7 3F 00 00 05 57 48 49 4C 45 87 12 F4 57 +76 40 2A 40 AA 57 06 52 45 50 45 41 54 00 87 12 +7C 58 0C 58 2A 40 A8 58 3D 41 08 4E 3E 4F 2A 48 +B2 92 C4 1D CD 2F 98 42 C6 1D 00 00 30 4D 7A 56 +03 42 57 31 84 12 A6 58 00 00 C0 58 03 42 57 32 +84 12 A6 58 00 00 CC 58 03 42 57 33 84 12 A6 58 +00 00 E4 58 3D 41 1A 42 C6 1D 28 4E B2 92 C4 1D +90 2B BA 4F 00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F +30 4D 00 00 03 46 57 31 84 12 E2 58 00 00 04 59 +03 46 57 32 84 12 E2 58 00 00 10 59 03 46 57 33 +84 12 E2 58 00 00 00 00 05 3F 47 4F 54 4F 3E 90 +00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 +00 08 87 12 66 49 3C 47 2A 40 1C 59 04 47 4F 54 +4F 00 2F 83 8F 4E 00 00 3E 40 00 3C F2 3F 87 12 +A4 47 D6 44 66 59 69 4E 3E 4F 3C 4F 2C 4C 1B 42 +C6 1D A2 53 C6 1D 79 90 52 00 0A 20 B0 12 68 53 +5E 0E 5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D +79 90 23 00 0D 20 3C C0 40 00 92 53 C4 1D A2 53 +C6 1D B0 12 0E 53 BB 4F 02 00 3E F0 0F 00 E8 3F +79 90 26 00 03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 +79 90 40 00 12 20 92 53 C4 1D B0 12 68 53 D8 23 +3C D0 10 00 3E 40 2B 00 B0 12 68 53 92 92 C0 1D +C4 1D CE 27 92 53 C4 1D CB 3F 3C D0 30 00 A2 53 +C6 1D 3E 40 28 00 B0 12 0E 53 BB 4F 02 00 3E 40 +29 00 EA 3F 87 12 A4 47 D6 44 0C 5A 3B 4F 2C 4B +69 4E 7E 40 20 00 79 90 52 00 03 20 B0 12 68 53 +B1 3F 3C C0 F0 00 A2 53 C6 1D 79 90 26 00 09 20 +3C D0 60 00 92 53 C4 1D B0 12 0E 53 BB 4F 02 00 +A1 3F 3C D0 70 00 3E 40 28 00 B0 12 0E 53 BB 4F +02 00 3E 40 29 00 E2 3F 76 44 2C 00 5E 59 04 5A +66 40 2A 40 C0 54 04 4D 4F 56 41 00 84 12 58 5A +C0 00 D8 58 04 43 4D 50 41 00 84 12 58 5A D0 00 +76 58 04 41 44 44 41 00 84 12 58 5A E0 00 96 58 +04 53 55 42 41 00 84 12 58 5A F0 00 74 5A 05 43 +41 4C 4C 41 87 12 A4 47 D6 44 AC 5A 1B 42 C6 1D +A2 53 C6 1D 6E 4E 3C 40 34 01 7E 90 52 00 0B 20 +7E 40 20 00 B0 12 68 53 5C 0E 0C DE 8B 4C 00 00 +3E 4F 3D 41 30 4D 2C 53 7E 90 40 00 0B 20 92 53 +C4 1D 7E 40 20 00 B0 12 68 53 EE 23 1C 53 3E 40 +2B 00 E8 3F A2 53 C6 1D 7E 90 23 00 09 20 3C 40 +3B 01 92 53 C4 1D B0 12 0E 53 BB 4F 02 00 DC 3F +7E 90 26 00 02 20 2C 53 F4 3F 7E 40 28 00 1C 83 +B0 12 0E 53 BB 4F 02 00 3E 40 29 00 CB 3F 87 12 +A4 47 D6 44 36 5B 69 4E 3E 4F 3C 40 00 18 79 90 +52 00 05 20 B0 12 68 53 0E 4C 3D 41 30 4D 82 43 +C2 5F 79 90 23 00 0B 20 92 53 C4 1D B0 12 0E 53 +2F 53 3E F0 0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 +26 00 F2 27 79 90 40 00 12 20 92 53 C4 1D B0 12 +68 53 E2 23 3E 40 2B 00 92 53 C4 1D B0 12 68 53 +92 92 C0 1D C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 +28 00 B0 12 0E 53 8F 4E 00 00 3E 40 29 00 B0 12 +68 53 3E 4F 3E F0 0F 00 0C DE EA 3F 87 12 A4 47 +D6 44 C4 5B 3C 4F 69 4E 3E 40 20 00 79 90 52 00 +BB 27 82 43 C2 5F 79 90 26 00 08 20 92 53 C4 1D +B0 12 0E 53 2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 +B0 12 0E 53 F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E +3E 4F 1C D2 C2 5F 82 43 C2 5F 3C DE 8B 4C 00 00 +B2 41 C4 1D 30 4D 76 44 C4 1D EA 40 86 40 76 44 +2C 00 2E 5B BC 5B F6 5B 3C 42 A0 54 66 5A 04 4D +4F 56 58 00 84 12 16 5C 40 00 00 40 2E 5C 06 4D +4F 56 58 2E 41 00 84 12 16 5C 00 00 40 40 3E 5C +06 4D 4F 56 58 2E 42 00 84 12 16 5C 40 00 40 40 +82 5A 04 41 44 44 58 00 84 12 16 5C 40 00 00 50 +62 5C 06 41 44 44 58 2E 41 00 84 12 16 5C 00 00 +40 50 72 5C 06 41 44 44 58 2E 42 00 84 12 16 5C +40 00 40 50 84 5C 05 41 44 44 43 58 84 12 16 5C +40 00 00 60 96 5C 07 41 44 44 43 58 2E 41 84 12 +16 5C 00 00 40 60 A6 5C 07 41 44 44 43 58 2E 42 +84 12 16 5C 40 00 40 60 90 5A 05 53 55 42 43 58 +84 12 16 5C 40 00 00 70 CA 5C 07 53 55 42 43 58 +2E 41 84 12 16 5C 00 00 40 70 DA 5C 07 53 55 42 +43 58 2E 42 84 12 16 5C 40 00 40 70 EC 5C 04 53 +55 42 58 00 84 12 16 5C 40 00 00 80 FE 5C 06 53 +55 42 58 2E 41 00 84 12 16 5C 00 00 40 80 0E 5D +06 53 55 42 58 2E 42 00 84 12 16 5C 40 00 40 80 +9E 5A 04 43 4D 50 58 00 84 12 16 5C 40 00 00 90 +32 5D 06 43 4D 50 58 2E 41 00 84 12 16 5C 00 00 +40 90 42 5D 06 43 4D 50 58 2E 42 00 84 12 16 5C +40 00 40 90 2A 58 05 44 41 44 44 58 84 12 16 5C +40 00 00 A0 66 5D 07 44 41 44 44 58 2E 41 84 12 +16 5C 00 00 40 A0 76 5D 07 44 41 44 44 58 2E 42 +84 12 16 5C 40 00 40 A0 54 5D 04 42 49 54 58 00 +84 12 16 5C 40 00 00 B0 9A 5D 06 42 49 54 58 2E +41 00 84 12 16 5C 00 00 40 B0 AA 5D 06 42 49 54 +58 2E 42 00 84 12 16 5C 40 00 40 B0 BC 5D 04 42 +49 43 58 00 84 12 16 5C 40 00 00 C0 CE 5D 06 42 +49 43 58 2E 41 00 84 12 16 5C 00 00 40 C0 DE 5D +06 42 49 43 58 2E 42 00 84 12 16 5C 40 00 40 C0 +F0 5D 04 42 49 53 58 00 84 12 16 5C 40 00 00 D0 +02 5E 06 42 49 53 58 2E 41 00 84 12 16 5C 00 00 +40 D0 12 5E 06 42 49 53 58 2E 42 00 84 12 16 5C +40 00 40 D0 D0 55 04 58 4F 52 58 00 84 12 16 5C +40 00 00 E0 36 5E 06 58 4F 52 58 2E 41 00 84 12 +16 5C 00 00 40 E0 46 5E 06 58 4F 52 58 2E 42 00 +84 12 16 5C 40 00 40 E0 B8 5C 04 41 4E 44 58 00 +84 12 16 5C 40 00 00 F0 6A 5E 06 41 4E 44 58 2E +41 00 84 12 16 5C 00 00 40 F0 7A 5E 06 41 4E 44 +58 2E 42 00 84 12 16 5C 40 00 40 F0 76 44 C4 1D +EA 40 86 40 A4 47 2E 5B F6 5B 3C 42 F6 55 20 5D +04 52 52 43 58 00 84 12 9C 5E 40 00 00 10 B0 5E +06 52 52 43 58 2E 41 00 84 12 9C 5E 00 00 40 10 +C0 5E 06 52 52 43 58 2E 42 00 84 12 9C 5E 40 00 +40 10 D2 5E 04 52 52 55 58 00 84 12 9C 5E 40 01 +00 10 E4 5E 06 52 52 55 58 2E 41 00 84 12 9C 5E +00 01 40 10 F4 5E 06 52 52 55 58 2E 42 00 84 12 +9C 5E 40 01 40 10 06 5F 05 53 57 50 42 58 84 12 +9C 5E 40 00 80 10 18 5F 07 53 57 50 42 58 2E 41 +84 12 9C 5E 00 00 80 10 28 5F 04 52 52 41 58 00 +84 12 9C 5E 40 00 00 11 3A 5F 06 52 52 41 58 2E +41 00 84 12 9C 5E 00 00 40 11 4A 5F 06 52 52 41 +58 2E 42 00 84 12 9C 5E 40 00 40 11 5C 5F 04 53 +58 54 58 00 84 12 9C 5E 40 00 80 11 6E 5F 06 53 +58 54 58 2E 41 00 84 12 9C 5E 00 00 80 11 E6 57 +05 50 55 53 48 58 84 12 9C 5E 40 00 00 12 90 5F +07 50 55 53 48 58 2E 41 84 12 9C 5E 00 00 40 12 +A0 5F 07 50 55 53 48 58 2E 42 84 12 9C 5E 40 00 +40 12 00 00 7E 5F 03 52 50 54 87 12 A4 47 D6 44 +D2 5F 29 4E 7E 40 20 00 79 90 52 00 06 20 B0 12 +68 53 03 24 3E D0 80 00 05 3C B0 12 0E 53 1E 83 +3E F0 0F 00 82 4E C2 5F 3E 4F 3D 41 30 4D 1A 43 +25 3C D2 C3 23 02 E2 B2 60 02 02 24 30 40 E8 50 +1A 52 04 20 19 62 06 20 92 43 14 20 A2 93 02 20 +07 24 0A 5A 49 69 82 4A 16 20 C2 49 18 20 0A 3C +C2 4A 15 20 8A 10 C2 4A 16 20 C2 49 17 20 89 10 +C2 49 18 20 B0 12 86 60 5A 53 FC 23 39 40 05 00 +D2 49 14 20 4E 06 82 93 46 06 05 24 92 B3 6C 06 +FD 27 C2 93 4C 06 59 83 F3 2F 19 83 0B 30 F2 43 +4E 06 82 93 46 06 03 24 92 B3 6C 06 FD 27 5A 92 +4C 06 F3 23 30 41 19 43 3A 43 8A 10 C2 4A 4E 06 +82 93 46 06 05 24 92 B3 6C 06 FD 27 C2 93 4C 06 +19 83 F3 23 5A 42 4C 06 30 41 1A 52 08 20 09 43 +1C D3 F2 40 51 00 19 20 B0 12 02 60 33 20 B0 12 +86 60 6A 53 04 24 FB 23 D9 42 4C 06 FF 1D F2 43 +4E 06 03 43 19 53 39 90 01 02 F6 23 F2 43 4E 06 +3C C0 03 00 D2 D3 23 02 30 41 09 43 2C D3 F0 40 +58 00 27 BF B0 12 02 60 15 20 3A 40 FE FF 29 43 +B0 12 8A 60 D2 49 00 1E 4E 06 03 43 19 53 39 90 +00 02 F8 23 39 40 03 00 B0 12 88 60 7A C0 E1 00 +6A 92 DE 27 8C 10 1C 52 4C 06 D2 D3 23 02 87 12 +80 44 0B 3C 20 53 44 20 45 72 72 6F 72 21 40 61 +2F 83 8F 4E 00 00 B2 40 10 00 DC 1D 0E 4C B0 12 +2A 40 24 42 F2 48 92 4B 0E 00 22 20 92 4B 10 00 +24 20 5A 42 23 20 58 42 22 20 92 93 02 20 08 24 +59 42 24 20 89 10 0A 59 88 10 08 58 0A 6A 88 10 +08 58 30 41 82 43 1C 20 92 42 0E 20 1A 20 C2 93 +24 20 03 20 92 93 22 20 14 24 92 42 22 20 D0 04 +92 42 24 20 D2 04 92 42 12 20 C8 04 92 42 E4 04 +1A 20 92 42 E6 04 1C 20 92 52 10 20 1A 20 82 63 +1C 20 30 41 92 4B 0E 00 22 20 92 4B 10 00 24 20 +B0 12 84 61 5A 4B 03 00 82 5A 1A 20 82 63 1C 20 +30 41 09 93 07 24 F8 90 20 00 00 1E 03 20 18 53 +19 83 F9 23 30 41 1B 42 32 20 82 43 1E 20 B2 90 +00 02 20 20 A8 20 BB 80 00 02 12 00 8B 73 14 00 +DB 53 03 00 DB 92 12 20 03 00 11 28 CB 43 03 00 +B0 12 56 61 B0 12 AA 60 8B 43 10 00 9B 48 00 1E +0E 00 92 93 02 20 03 24 9B 48 02 1E 10 00 B2 40 +00 02 20 20 8B 93 14 00 0B 20 92 9B 12 00 1E 20 +82 2C BB 90 00 02 12 00 03 2C 92 4B 12 00 20 20 +B0 12 C4 61 1A 42 1A 20 19 42 1C 20 21 3F 3C 42 +3B 40 38 20 09 43 CB 93 02 00 10 24 9B 92 24 20 +0C 00 04 20 9B 92 22 20 0A 00 07 24 09 4B 3B 50 +1C 00 3B 90 18 21 EF 23 0C 5C 30 41 0C 43 82 4B +32 20 8B 49 00 00 09 93 0A 24 99 52 C4 1D 16 00 +4A 93 05 34 C9 93 02 00 02 34 5A 59 02 00 CB 4A +02 00 CB 43 03 00 9B 42 1A 20 04 00 9B 42 1C 20 +06 00 18 42 30 20 8B 48 08 00 9B 48 1A 1E 0A 00 +9B 48 14 1E 0C 00 9B 48 1A 1E 0E 00 9B 48 14 1E +10 00 9B 48 1C 1E 12 00 9B 48 1E 1E 14 00 82 43 +1E 20 6A 93 5F 27 C9 37 8B 43 16 00 7A 93 02 24 +07 38 95 3F B2 40 1C 21 EC 43 B2 40 EA 42 50 43 +9B 42 C0 1D 18 00 9B 82 C4 1D 18 00 9B 42 C2 1D +1A 00 9B 52 C4 1D 1A 00 82 3F CB 43 02 00 2B 4B +82 4B 32 20 0B 93 06 24 92 4B 16 00 1E 20 B0 12 +3E 62 22 C3 30 41 1B 42 32 20 0B 93 FB 27 EB 93 +02 00 04 20 B0 12 AC 67 B0 12 74 67 CB 93 02 00 +E4 37 1E 4B 18 00 9F 4B 1A 00 00 00 31 50 06 00 +3D 41 B0 12 3A 63 02 24 30 40 24 44 B2 40 3C 1D +EC 43 B2 40 52 43 50 43 30 40 0E 44 9E 4E 85 52 +45 41 44 22 5A 43 19 3C 40 4F 86 57 52 49 54 45 +22 00 6A 43 12 3C 06 4E 84 44 45 4C 22 00 6A 42 +0C 3C CE 51 05 43 4C 4F 53 45 B0 12 56 63 30 4D +E2 52 85 4C 4F 41 44 22 7A 43 2F 83 8F 4E 00 00 +0E 4A 82 93 BE 1D 0A 24 87 12 76 44 76 44 12 47 +12 47 9A 44 76 44 0A 64 12 47 2A 40 87 12 76 44 +22 00 E2 44 86 47 08 64 3D 41 35 4F 0E 55 82 4E +36 20 1C 43 92 42 2C 20 22 20 92 42 2E 20 24 20 +0E 95 8D 24 F5 90 3A 00 01 00 01 20 25 53 F5 90 +5C 00 00 00 08 20 15 53 92 42 02 20 22 20 82 43 +24 20 0E 95 70 24 82 45 34 20 B0 12 84 61 34 40 +20 00 A2 93 02 20 04 24 92 92 22 20 02 20 02 24 +14 42 12 20 B0 12 64 62 2C 43 0A 43 08 4A 58 0E +08 58 82 48 30 20 C8 93 00 1E 61 24 39 42 F8 95 +00 1E 04 20 18 53 19 83 FA 23 15 53 F5 90 2E 00 +FF FF 19 24 39 50 03 00 B0 12 E2 61 06 20 F5 90 +5C 00 FF FF 29 24 0E 95 27 28 15 42 34 20 1A 53 +3A 90 10 00 DB 23 92 53 1A 20 82 63 1C 20 14 83 +D1 23 2C 42 3C 3C F5 90 2E 00 FE FF EE 27 B0 12 +E2 61 EB 23 39 40 03 00 F8 95 00 1E 04 20 18 53 +19 83 FA 23 09 3C 0E 95 E0 2F F5 90 5C 00 FF FF +DC 23 B0 12 E2 61 D9 23 18 42 30 20 92 48 1A 1E +22 20 92 48 14 1E 24 20 F8 B0 10 00 0B 1E 14 24 +82 93 24 20 06 20 82 93 22 20 03 20 92 42 02 20 +22 20 0E 95 8E 2F 92 42 22 20 2C 20 92 42 24 20 +2E 20 8F 43 00 00 03 3C 2A 4F B0 12 6E 62 34 40 +00 40 35 40 0E 40 3A 4F 3E 4F 0A 93 04 24 7A 93 +0D 20 0C 93 01 20 30 4D 87 12 80 44 0B 3C 20 4F +70 65 6E 45 72 72 6F 72 3C 42 3E 61 1A 93 B6 20 +0C 93 F2 23 30 4D 9E 63 04 52 45 41 44 00 2F 83 +8F 4E 00 00 1E 42 32 20 B0 12 F6 61 1E 82 32 20 +30 4D 2C 43 12 12 2A 20 18 42 02 20 08 58 2A 41 +82 9A 0A 20 A1 24 B0 12 AA 60 09 43 28 93 03 24 +89 93 02 1E 03 20 89 93 00 1E 07 24 09 58 39 90 +00 02 F4 23 91 53 00 00 EA 3F 0C 43 6A 41 B9 43 +00 1E 28 93 0F 24 B9 40 FF 0F 02 1E 09 11 8A 10 +09 5A 5A 41 01 00 0A 11 09 10 82 4A 28 20 82 49 +26 20 07 3C 09 11 C2 49 26 20 C2 4A 27 20 82 43 +28 20 3A 41 82 4A 2A 20 30 41 0A 12 1A 52 08 20 +B0 12 EA 60 3A 41 1A 52 0C 20 30 40 EA 60 F2 B0 +40 00 A2 04 29 20 F2 B0 10 00 A2 04 FC 27 5A 42 +B0 04 4A 11 59 42 B4 04 F2 40 20 00 C0 04 D2 42 +B1 04 C8 04 1A 52 E4 04 D2 42 B5 04 C8 04 19 52 +E4 04 D2 42 B2 04 C0 04 B2 40 00 08 C8 04 1A 52 +E4 04 92 42 B6 04 C0 04 B2 80 BC 07 C0 04 B2 40 +00 02 C8 04 19 52 E4 04 30 41 22 2A 2B 2C 2F 3A +3B 3C 3D 3E 3F 5B 5C 5D 7C 2E 29 92 06 38 39 80 +03 00 B0 12 CA 66 39 40 03 00 7A 4B C8 4A 00 1E +82 9B 36 20 12 28 0D 12 3D 40 0F 00 3C 40 7A 66 +7A 9C F3 27 1D 83 FC 23 3D 41 6A 9C E6 27 3A 80 +21 00 EB 3B 18 53 19 83 E8 23 09 93 06 24 F8 40 +20 00 00 1E 18 53 19 83 FA 23 30 41 2A 93 D8 20 +2C 93 0D 24 0C 93 A7 24 87 12 80 44 0C 3C 20 57 +72 69 74 65 45 72 72 6F 72 00 3C 42 3E 61 B0 12 +92 65 92 42 26 20 22 20 92 42 28 20 24 20 B0 12 +0A 66 B0 12 64 62 18 42 30 20 F8 40 20 00 0B 1E +B0 12 1E 66 88 43 0C 1E 88 4A 0E 1E 88 49 10 1E +88 49 12 1E 98 42 24 20 14 1E 98 42 22 20 1A 1E +88 43 1C 1E 88 43 1E 1E 1C 43 1B 42 34 20 82 9B +36 20 CA 27 FB 90 2E 00 00 00 C6 27 39 40 0B 00 +B0 12 9A 66 B0 12 B6 67 2A 43 B0 12 6E 62 0C 93 +BB 23 30 4D 1A 4B 04 00 19 4B 06 00 B0 12 B0 60 +B0 12 1E 66 18 4B 08 00 88 49 12 1E 88 4A 16 1E +88 49 18 1E 98 4B 12 00 1C 1E 98 4B 14 00 1E 1E +1A 4B 04 00 19 4B 06 00 30 40 EC 60 9B 52 1E 20 +12 00 8B 63 14 00 1A 42 1A 20 19 42 1C 20 30 40 +EC 60 B2 40 00 02 1E 20 1B 42 32 20 B0 12 AC 67 +82 43 1E 20 DB 53 03 00 DB 92 12 20 03 00 22 20 +CB 43 03 00 B0 12 56 61 08 12 0A 12 B0 12 92 65 +2A 91 05 24 B0 12 0A 66 2A 41 B0 12 AA 60 3A 41 +38 41 98 42 26 20 00 1E 92 93 02 20 03 24 98 42 +28 20 02 1E B0 12 0A 66 9B 42 26 20 0E 00 9B 42 +28 20 10 00 30 40 C4 61 AA 63 05 57 52 49 54 45 +B0 12 C2 67 30 4D 58 4B 13 00 59 4B 14 00 89 10 +09 58 58 4B 15 00 5B 42 12 20 0A 43 3C 42 08 11 +09 10 4A 10 1C 83 0B 11 FA 2B 0A 11 1C 83 FD 37 +1B 42 32 20 19 5B 0A 00 18 6B 0C 00 8B 49 0E 00 +8B 48 10 00 CB 4A 03 00 1A 4B 12 00 BB C0 FF 01 +12 00 3A F0 FF 01 82 4A 1E 20 B0 12 60 62 30 4D +0C 93 38 20 38 90 E0 01 03 2C C8 93 20 1E 02 24 +7C 40 E5 00 C8 4C 00 1E B0 12 B6 67 B0 12 62 61 +82 4A 2A 20 0B 4A B0 12 AA 60 1A 48 00 1E 88 43 +00 1E 92 93 02 20 09 24 19 48 02 1E 88 43 02 1E +39 F0 FF 0F 39 90 FF 0F 02 20 3A 93 0E 24 82 4A +22 20 82 49 24 20 B0 12 62 61 0B 9A E6 27 0A 12 +0A 4B B0 12 0A 66 3A 41 DD 3F 0A 4B B0 12 0A 66 +B0 12 56 63 30 4D 38 4C 08 54 45 52 4D 32 53 44 +22 00 87 12 BE 63 76 44 02 00 02 47 86 47 0A 64 +22 69 3D 41 92 C3 DC 05 08 43 B0 12 B6 42 92 B3 +DC 05 FD 27 59 42 CC 05 69 92 0D 24 C8 49 00 1E +18 53 38 90 FF 01 F3 2B 03 24 B0 12 C2 67 EC 3F +B0 12 C8 42 EC 3F B0 12 C8 42 82 48 1E 20 B0 12 +56 63 30 4D @FFFE -BC 53 +F6 50 q diff --git a/binaries/MSP_EXP430FR6989_16MHz.txt b/binaries/MSP_EXP430FR6989_16MHz.txt index 1b81df8..79f93b9 100644 --- a/binaries/MSP_EXP430FR6989_16MHz.txt +++ b/binaries/MSP_EXP430FR6989_16MHz.txt @@ -1,527 +1,482 @@ @1800 -10 00 08 00 A1 F7 80 3E 05 00 18 00 7C 64 98 52 -2C 01 7F B0 00 48 12 48 +10 00 08 00 A1 F7 80 3E 05 00 18 00 AA 61 D4 50 +2D 01 6F B0 B6 46 C8 46 @4400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 44 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 44 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 44 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 44 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 44 02 3E 52 00 -0E 12 3E 4F 30 4D 96 44 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 44 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 44 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 44 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 45 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 44 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 45 02 31 2D 00 -1E 83 30 4D D8 44 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 45 -02 30 3D 00 1E 83 0E 7E 30 4D 60 45 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 45 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 44 01 3E 3E 8F F4 3B EB 37 0E 45 02 42 4C 00 -85 12 20 00 AC 45 04 42 41 53 45 00 85 12 DC 1D -C8 44 05 53 54 41 54 45 85 12 BE 1D 96 45 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 45 06 55 4D 2F -4D 4F 44 00 30 12 62 44 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 44 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 45 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 45 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 46 -02 23 53 00 87 12 32 46 6A 46 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 46 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 45 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 45 -02 44 2E 00 87 12 D2 45 44 44 B0 44 4C 45 64 46 -BC 44 A2 46 7E 46 22 49 EA 48 2A 44 DC 45 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 44 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 46 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 44 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 46 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 46 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 46 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 45 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 47 03 4B 45 59 30 40 A0 47 -18 42 EC 05 2F 83 8F 4E 00 00 B0 12 00 48 92 B3 -FC 05 FD 27 1E 42 EC 05 B0 12 12 48 30 4D 00 47 -06 41 43 43 45 50 54 00 30 40 CC 47 3C 40 6E 48 -3B 40 38 48 2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 -3C 40 20 00 3D 40 62 48 92 B3 FC 05 05 24 18 42 -EC 05 38 90 0A 00 04 20 21 53 39 40 26 48 4D 15 -A2 B3 FC 05 FD 27 B2 40 11 00 EE 05 D2 C3 22 02 -30 41 B2 40 13 00 EE 05 D2 D3 22 02 30 41 00 00 -05 53 4C 45 45 50 30 40 2A 48 12 D2 0A 18 FB 3F -21 52 3A 17 58 42 EC 05 48 9C 08 2C 48 9B E9 27 -78 92 11 20 2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 -CE 48 00 00 1E 53 A2 B3 FC 05 FD 27 82 48 EE 05 -30 4D 64 48 2D 83 92 B3 FC 05 E4 23 FC 27 82 93 -DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 -0A 18 30 4D B0 46 04 45 4D 49 54 00 30 40 90 48 -08 4E 3E 4F E0 3F 10 47 03 43 49 42 85 12 3C 1D -3F 80 06 00 8F 4E 04 00 3E 40 54 00 9F 42 9E 48 -00 00 AF 4F 02 00 88 3F 86 48 04 45 43 48 4F 00 -B2 40 82 48 5C 48 82 43 DE 1D 30 4D E0 46 06 4E -4F 45 43 48 4F 00 B2 40 30 4D 5C 48 92 43 DE 1D -30 4D 9C 46 05 53 50 41 43 45 2F 83 8F 4E 00 00 -3E 40 20 00 CB 3F E4 48 06 53 50 41 43 45 53 00 -0E 93 09 24 0D 12 3D 40 0C 49 EF 3F 0E 49 2D 83 -1E 83 EB 23 3D 41 3E 4F 30 4D 66 47 04 54 59 50 -45 00 0E 93 0F 24 1E 15 3D 40 38 49 28 4F 7E 48 -8F 48 00 00 2F 83 AA 3F 3A 49 2D 83 91 83 02 00 -F5 23 1D 17 2F 53 3E 4F 30 4D 98 48 02 43 52 00 -30 40 54 49 87 12 60 49 02 0D 0A 00 22 49 2A 44 -2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 -0D 63 30 4D F8 48 82 53 22 00 82 43 B4 1D 87 12 -34 44 60 49 D6 4B 34 44 22 00 C4 49 8E 49 3D 41 -B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D 3E 4F -92 B3 C6 1D A2 63 C6 1D 30 4D CE 48 82 2E 22 00 -87 12 7A 49 34 44 22 49 D6 4B 2A 44 00 00 04 57 -4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A 3A 5C -28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 60 00 -C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 -4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F -1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E CE 48 -00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 0C 4E -65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 1E 24 -58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E FE FF -0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C -FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 -0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C 00 00 -35 40 0E 44 34 40 00 44 30 4D A2 45 07 3E 4E 55 -4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D -6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 -7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 -82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 -09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 8F 48 -02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 2D 15 -3D 40 1E 4B 09 43 08 43 3F 82 8F 4E 06 00 0C 4E -7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 02 00 -E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 04 24 -3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F 20 4B -2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 7A 90 -F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 8F 49 -02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 79 90 -0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 09 9B -08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 45 2A 17 -E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A 4E 93 -2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 3F 50 -06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 BF 4F -00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 00 00 -9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 2F 53 -30 4D BA 48 07 45 58 45 43 55 54 45 0A 4E 3E 4F -00 4A 26 45 01 2C 1A 42 C6 1D A2 53 C6 1D 8A 4E -00 00 3E 4F 30 4D D4 4B 87 4C 49 54 45 52 41 4C -82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 -34 44 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 -00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 EB 3F -30 4D 4C 49 05 43 4F 55 4E 54 2F 83 1E 53 8F 4E -00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F C2 1D -3E 4F 82 43 C4 1D 30 4D 87 12 38 4C B0 45 C4 49 -52 4C 3D 40 5A 4C E2 22 5D 3E 5C 4C 0A 4E 3E 4F -3D 40 72 4C 39 27 3D 40 4C 4C 1A E2 BE 1D B3 27 -AD 23 74 4C 3E 4F 3D 40 4C 4C BA 23 DE 53 00 00 -68 4E 08 5E F8 40 3F 00 00 00 3D 40 3E 4F CD 3F -C4 4B 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D -3C 49 3B 49 3A 49 3D 15 B0 12 2A 44 48 4C B0 4C -B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D -6C 45 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C -B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 50 49 -A0 48 EA 48 48 4C DE 44 70 45 60 49 0C 73 74 61 -63 6B 20 65 6D 70 74 79 21 00 3C 4D 34 44 30 FF -F2 46 8A 45 60 49 0A 46 52 41 4D 20 66 75 6C 6C -21 00 3C 4D 24 47 DE 4C C0 47 05 41 42 4F 52 54 -3F 40 80 1C D1 3F 1A 4D 86 41 42 4F 52 54 22 00 -87 12 7A 49 34 44 3C 4D D6 4B 2A 44 8F 93 02 00 -03 20 2F 52 3E 4F 30 4D B0 12 FE 54 B0 12 00 48 -92 C3 FC 05 38 40 A0 AA 39 42 09 59 03 43 19 83 -FD 23 18 83 F9 23 92 B3 FC 05 F2 23 87 12 78 54 -34 44 DE 1D F2 44 C0 48 60 49 04 1B 5B 37 6D 00 -22 49 54 44 28 47 98 4D 50 49 60 49 05 6C 69 6E -65 3A 22 49 40 45 D2 46 22 49 60 49 04 1B 5B 30 -6D 00 22 49 20 4D 00 00 83 5B 27 5D 87 12 BE 4D -34 44 34 44 D6 4B D6 4B 2A 44 16 4A 01 27 87 12 -B0 45 C4 49 1C 4A 28 47 CC 4D 2A 44 7C 4C CE 45 -81 5C 92 42 C0 1D C4 1D 30 4D A8 4D 81 5B 82 43 -BE 1D 30 4D D0 4D 01 5D B2 43 BE 1D 30 4D BE 4F -02 00 3E 4F 30 4D 72 47 82 49 53 00 87 12 C8 45 -F2 44 28 47 10 4E AC 4D 34 44 EE 4D D6 4B 2A 44 -BE 4D EE 4D 2A 44 F8 4D 09 49 4D 4D 45 44 49 41 -54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D 76 49 -87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D -00 00 A2 53 C6 1D 30 4D C2 4C 88 50 4F 53 54 50 -4F 4E 45 00 87 12 B0 45 C4 49 1C 4A 54 44 28 47 -CC 4D 70 45 28 47 74 4E 34 44 34 44 D6 4B D6 4B -34 44 D6 4B D6 4B 2A 44 DC 4D 81 3B 82 93 BE 1D -A8 27 87 12 34 44 2A 44 D6 4B 12 4F DE 4D 2A 44 -7A 4E 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 -1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 -FE 4E BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D -82 4F BC 1D 30 4D 92 4E 01 3A 30 12 B2 4E 87 12 -A0 49 B0 45 C4 49 D8 4E 3D 41 08 4E 7A 4E 5A D3 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 44 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 44 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 44 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 44 02 3E 52 00 0E 12 3E 4F 30 4D 70 44 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 44 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 44 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 44 +01 21 BE 4F 00 00 3E 4F 30 4D CC 44 02 30 3D 00 +1E 83 0E 7E 30 4D FC 44 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 45 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 44 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 45 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 45 02 23 53 00 87 12 88 45 C0 45 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 45 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 44 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 45 34 44 86 44 D4 44 BA 45 +92 44 F8 45 D4 45 D6 47 42 4B 82 47 2A 44 22 45 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 45 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 46 18 42 EC 05 2F 83 8F 4E +00 00 B0 12 B6 46 92 B3 FC 05 FD 27 1E 42 EC 05 +B0 12 C8 46 30 4D A2 B3 FC 05 FD 27 B2 40 11 00 +EE 05 D2 C3 22 02 30 41 B2 40 13 00 EE 05 D2 D3 +22 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 46 +B0 12 B6 46 12 D2 0A 18 F9 3F F0 44 06 41 43 43 +45 50 54 00 3C 40 64 47 3B 40 2E 47 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 47 +92 B3 FC 05 05 24 18 42 EC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 EC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 FC 05 +FD 27 82 48 EE 05 30 4D 5A 47 2D 83 92 B3 FC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 44 04 45 4D 49 +54 00 30 40 86 47 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C 47 04 45 43 48 4F 00 B2 40 82 48 +52 47 82 43 DE 1D 30 4D 32 46 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 47 92 43 DE 1D 30 4D 20 46 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 47 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 47 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 45 +02 43 52 00 30 40 08 48 87 12 1E 48 02 0D 0A 00 +D6 47 2A 44 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 45 82 53 22 00 82 43 B4 1D 87 12 14 48 +1E 48 B0 4A 14 48 22 00 80 48 4C 48 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA 47 82 2E 22 00 87 12 38 48 14 48 D6 47 +B0 4A 2A 44 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 +60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 +18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D +F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E +CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 +0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 +1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E +FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 +0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 +09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C +00 00 35 40 0E 44 34 40 00 44 30 4D 82 44 07 3E +4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 +DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 +07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 +D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 +E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 49 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 49 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 45 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 46 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 44 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC 46 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 47 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 4A 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 48 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 48 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 4B 42 4B 80 48 50 4B +3D 40 58 4B CC 22 82 3E 5A 4B 0A 4E 3E 4F 3D 40 +70 4B 23 27 3D 40 4A 4B 1A E2 BE 1D A1 27 B5 23 +72 4B 3E 4F 3D 40 4A 4B B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 4E CB 3F D2 4A +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 44 46 4B AE 4B B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 45 04 51 55 49 54 00 82 43 08 18 31 40 +E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 +04 48 8C 47 42 4B 82 47 46 4B A4 44 0C 45 1E 48 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 4C +14 48 30 FF A0 4A 26 45 1E 48 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 4C 3C 46 E0 4B C2 4A 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E 4C 86 41 42 4F +52 54 22 00 87 12 38 48 14 48 40 4C B0 4A 2A 44 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 CC 51 +B0 12 B6 46 92 C3 FC 05 38 40 A0 AA 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 FC 05 F3 23 87 12 +46 51 14 48 DE 1D EA 44 AC 47 1E 48 04 1B 5B 37 +6D 00 D6 47 58 44 40 46 9A 4C 04 48 1E 48 05 6C +69 6E 65 3A D6 47 D0 44 24 46 D6 47 1E 48 04 1B +5B 30 6D 00 D6 47 24 4C 00 00 83 5B 27 5D 87 12 +C0 4C 14 48 14 48 B0 4A B0 4A 2A 44 E8 48 01 27 +87 12 42 4B 80 48 EE 48 40 46 CE 4C 2A 44 7A 4B +32 45 81 5C 92 42 C0 1D C4 1D 30 4D AA 4C 81 5B +82 43 BE 1D 30 4D D2 4C 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 4A 82 49 53 00 87 12 +BE 4B EA 44 40 46 12 4D AE 4C 14 48 F0 4C B0 4A +2A 44 C0 4C F0 4C 2A 44 FA 4C 09 49 4D 4D 45 44 +49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D +C4 4B 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 4B +80 48 EE 48 58 44 40 46 CE 4C 0C 45 40 46 5C 4D +14 48 14 48 B0 4A B0 4A 14 48 B0 4A B0 4A 2A 44 +DE 4C 81 3B 82 93 BE 1D B5 27 87 12 14 48 2A 44 +B0 4A FA 4D E0 4C 2A 44 62 4D 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 4D 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A 4D 01 3A 30 12 A0 4D 92 B3 C6 1D A2 63 C6 1D +87 12 42 4B 80 48 C8 4D 3D 41 08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E -3E 4F BA 40 30 40 00 00 BA 40 C4 4E 02 00 82 48 -B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D -30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D -A8 49 FE FF 89 48 00 00 30 4D 87 12 60 49 0F 73 -74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 48 4D -BE 49 08 56 41 52 49 41 42 4C 45 00 B0 12 CE 4E -BA 40 86 12 FC FF E4 3F 24 4C 08 43 4F 4E 53 54 -41 4E 54 00 B0 12 CE 4E BA 40 85 12 FC FF 8A 4E -FE FF 3E 4F D5 3F 5A 4F 06 43 52 45 41 54 45 00 -B0 12 CE 4E BA 40 85 12 FC FF 8A 4A FE FF C8 3F -92 4C 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 -00 00 8A 4D 02 00 3D 41 30 4D 92 4F 05 44 45 46 -45 52 30 12 20 4F 8B 3F 7C 4A 05 3E 42 4F 44 59 -2E 52 30 4D 78 4F 04 43 4F 44 45 00 B0 12 CE 4E -2A 82 82 4A C6 1D 87 12 C0 4E A2 52 74 52 2A 44 -C6 4F 07 43 4F 44 45 4E 4E 4D 87 12 9A 4E DE 4D -D0 4F 2A 44 00 00 07 45 4E 44 43 4F 44 45 87 12 -BC 52 12 4F 2A 44 28 4D 03 41 53 4D 92 42 DA 1D -EC 1D B2 40 78 52 DA 1D D9 3F F6 4F 06 45 4E 44 -41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 -4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 -C6 1D B2 43 BE 1D 30 40 BC 52 00 00 05 4C 4F 32 -48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 44 -02 00 A2 52 C6 1D ED 3F 18 4E 85 48 49 32 4C 4F -87 12 F2 46 9A 50 D6 4B DE 4D A2 52 74 52 2A 44 -6A 50 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D -A2 52 C6 1D BE 40 28 47 00 00 2E 53 30 4D AC 4F -84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 -24 47 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 1C 49 -84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D -E2 4F 85 42 45 47 49 4E 30 40 F2 46 C0 50 85 55 -4E 54 49 4C 39 40 28 47 A2 52 C6 1D 1A 42 C6 1D -8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D 08 50 85 41 -47 41 49 4E 39 40 24 47 EF 3F 42 4F 85 57 48 49 -4C 45 87 12 86 50 78 44 2A 44 30 4E 86 52 45 50 -45 41 54 00 87 12 04 51 C6 50 2A 44 A0 50 82 44 -4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D -BE 40 3C 47 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 -00 00 30 4D E8 4B 84 4C 4F 4F 50 00 39 40 5E 47 -A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF -1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A -00 00 F6 3F 3E 4F 30 4D 98 47 85 2B 4C 4F 4F 50 -39 40 4C 47 E5 3F 56 51 85 4C 45 41 56 45 1A 42 -C6 1D BA 40 6E 47 00 00 BA 40 24 47 02 00 B2 50 -06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A -00 00 30 4D 98 51 04 4D 4F 56 45 00 0A 4E 38 4F -39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 -00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 -18 83 E8 49 00 00 1A 83 FA 23 30 4D 0C 51 0A 56 -4F 43 41 42 55 4C 41 52 59 00 87 12 80 4F 34 44 -10 00 34 44 00 00 3C 47 34 44 00 00 D6 4B 5E 47 -18 52 F2 46 34 44 C8 1D 44 44 F2 44 D6 4B FA 44 -98 4F 34 44 CA 1D FA 44 2A 44 BC 4D 05 46 4F 52 -54 48 84 12 32 52 9C 52 DE 55 DA 52 3C 52 82 50 -8A 51 06 54 CC 52 9C 54 1C 57 DE 50 4E 55 00 00 -DA 53 E6 4D BA 4F 00 00 FE 50 09 41 53 53 45 4D -42 4C 45 52 84 12 32 52 0E 63 A6 62 0A 62 9C 5D -44 5C C0 5D D2 60 00 00 34 64 46 64 9C 5C DA 5C -DA 62 00 00 00 00 CE 5D 66 52 6A 52 04 41 4C 53 -4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F -4A 4E 08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 -39 40 CC 1D 38 40 CA 1D 8A 3F AC 49 04 4F 4E 4C -59 00 82 43 CC 1D 30 4D 2E 51 0B 44 45 46 49 4E -49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D D2 50 -07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F -0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 -F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D -C8 4E 86 5B 54 48 45 4E 5D 00 30 4D 22 53 86 5B -45 4C 53 45 5D 00 87 12 34 44 00 00 36 45 B0 45 -C4 49 2A 4C 44 44 28 47 9C 53 8A 44 8A 44 60 49 -06 5B 54 48 45 4E 5D 00 F8 52 32 47 6A 53 44 49 -40 45 54 44 32 47 3E 53 2A 44 8A 44 8A 44 60 49 -06 5B 45 4C 53 45 5D 00 F8 52 32 47 8A 53 44 49 -40 45 54 44 32 47 3C 53 2A 44 60 49 04 5B 49 46 -5D 00 F8 52 32 47 3E 53 24 47 3C 53 44 49 60 49 -05 0D 0A 6B 6F 20 22 49 A0 48 38 4C 24 47 3E 53 -2E 53 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D -B2 53 89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 45 -C4 49 1C 4A 6C 44 2A 44 C2 53 8B 5B 55 4E 44 45 -46 49 4E 45 44 5D 87 12 B0 45 C4 49 1C 4A 6C 44 -64 45 2A 44 F6 53 3D 41 B2 4E 0E 18 A2 4E 0C 18 -3E 4F 44 3C C6 51 06 4D 41 52 4B 45 52 00 B0 12 -CE 4E BA 40 84 12 FC FF BA 40 F4 53 FE FF 9A 42 -C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 -18 4F 42 52 D2 52 E6 52 3A 54 3A 4E 82 4A C8 1D -2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 -18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 -2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D B2 52 09 50 -57 52 5F 53 54 41 54 45 84 12 32 54 98 52 7C 64 -1C 51 09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 -7C 54 92 42 0C 18 7E 54 EF 3F 6E 54 08 50 57 52 -5F 48 45 52 45 00 92 42 C8 1D 7C 54 92 42 C6 1D -7E 54 30 4D 82 54 08 52 53 54 5F 48 45 52 45 00 -92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F FE 51 -04 57 49 50 45 00 39 40 10 00 29 83 B9 43 80 FF -FC 23 B2 40 2A 48 28 48 B2 40 58 55 56 55 B2 40 -98 52 0E 18 B2 40 7C 64 0C 18 30 12 8C 54 B2 40 -90 48 8E 48 B2 40 54 49 52 49 B2 40 A0 47 9E 47 -B2 40 CC 47 CA 47 B2 40 3C 1D 9E 48 B2 40 18 00 -0A 18 37 40 1A 44 36 40 BC 44 35 40 0E 44 34 40 -00 44 39 40 10 00 29 83 89 43 E0 1D FC 23 B2 40 -0A 00 DC 1D B2 40 20 00 B4 1D 30 41 D0 54 04 57 -41 52 4D 00 30 40 58 55 3D 40 8E 55 92 C3 30 01 -1E 42 08 18 0E 93 12 24 F2 B0 10 00 20 02 02 20 -3E E3 1E 53 F2 D0 30 00 2A 02 3E 90 0A 00 AB 27 -3E 90 16 00 A8 2F 2E 93 77 27 80 2F 30 4D 60 49 -06 0D 1B 5B 37 6D 23 00 22 49 E2 46 60 49 1F 46 -61 73 74 46 6F 72 74 68 20 56 33 30 30 20 28 43 -29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 22 49 -34 44 80 FF F2 46 28 45 D2 46 60 49 0B 62 79 74 -65 73 20 66 72 65 65 20 24 47 98 4D F0 52 04 43 +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 48 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 4C 90 4B 05 44 45 46 45 52 +B0 12 B8 4D BA 40 30 40 FC FF BA 40 AE 4D FE FF +E3 3F 1E 4B 06 43 52 45 41 54 45 00 B0 12 B8 4D +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 4E 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 49 05 3E 42 4F 44 59 2E 52 +30 4D 44 4E 04 43 4F 44 45 00 B0 12 B8 4D 82 43 +6E 61 A2 82 C6 1D 87 12 D6 50 B0 50 2A 44 84 4E +07 43 4F 44 45 4E 4E 4D B0 12 86 4D F0 3F 00 00 +07 45 4E 44 43 4F 44 45 87 12 E4 50 FA 4D 2A 44 +2C 4C 03 41 53 4D B2 40 B4 50 DA 1D DE 3F B0 4E +06 45 4E 44 41 53 4D 00 87 12 B8 4E F8 50 2A 44 +00 00 05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 +00 00 A2 53 C6 1D B2 43 BE 1D 30 40 E4 50 00 00 +05 4C 4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 +BA 40 2A 44 02 00 A2 52 C6 1D ED 3F 1A 4D 85 48 +49 32 4C 4F 87 12 A0 4A 4E 4F B0 4A E0 4C D6 50 +B0 50 2A 44 1E 4F 82 49 46 00 2F 83 8F 4E 00 00 +1E 42 C6 1D A2 52 C6 1D BE 40 40 46 00 00 2E 53 +30 4D 5E 4E 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 +C6 1D BA 40 3C 46 FC FF 8E 4A 00 00 2A 83 0E 4A +30 4D D0 47 84 54 48 45 4E 00 9E 42 C6 1D 00 00 +3E 4F 30 4D A0 4E 85 42 45 47 49 4E 30 40 A0 4A +74 4F 85 55 4E 54 49 4C 39 40 40 46 A2 52 C6 1D +1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D +C2 4E 85 41 47 41 49 4E 39 40 3C 46 EF 3F 7A 48 +85 57 48 49 4C 45 87 12 3A 4F 76 44 2A 44 34 48 +86 52 45 50 45 41 54 00 87 12 B8 4F 7A 4F 2A 44 +54 4F 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D +1E 42 C6 1D BE 40 54 46 FE FF A2 53 00 1C 1A 42 +00 1C 8A 43 00 00 30 4D E2 4A 84 4C 4F 4F 50 00 +39 40 76 46 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF +8A 4E FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 +03 24 8E 4A 00 00 F6 3F 3E 4F 30 4D 90 46 85 2B +4C 4F 4F 50 39 40 64 46 E5 3F 0A 50 04 4D 4F 56 +45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 +0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D +08 5A 09 5A 19 83 18 83 E8 49 00 00 1A 83 FA 23 +30 4D 14 48 CA 1D F2 44 2A 44 84 12 82 50 B2 4F +7A 53 E2 4F BE 4C 36 4F 3E 50 8E 54 64 48 6A 51 +84 51 92 4F 04 52 00 00 60 54 E8 4C 78 4E 00 00 +84 12 82 50 38 60 D0 5F 34 5F F8 5A 9C 59 00 00 +FC 5D 00 00 5E 61 72 61 F4 59 32 5A 04 60 00 00 +00 00 D4 5A AE 50 3A 40 0C 00 39 40 CA 1D 38 40 +CC 1D C6 3F 3A 40 0E 00 39 40 CC 1D 38 40 CA 1D +B9 3F 82 43 CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D +8A 50 F2 50 F8 50 08 51 3A 4E 82 4A C8 1D 2E 4E +82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 18 48 +FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 2A 4A +0A 93 F0 23 3E 4F 3D 41 30 4D 32 4D 09 50 57 52 +5F 53 54 41 54 45 84 12 00 51 D4 50 AA 61 D0 4F +09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 4A 51 +92 42 0C 18 4C 51 EF 3F 3C 51 08 50 57 52 5F 48 +45 52 45 00 92 42 C8 1D 4A 51 92 42 C6 1D 4C 51 +30 4D 50 51 08 52 53 54 5F 48 45 52 45 00 92 42 +C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F C0 4F 04 57 +49 50 45 00 39 40 10 00 29 83 B9 43 80 FF FC 23 +B2 40 E0 46 DE 46 B2 40 0E 52 0C 52 B2 40 D4 50 +0E 18 B2 40 AA 61 0C 18 30 12 5A 51 B2 40 86 47 +84 47 B2 40 08 48 06 48 B2 40 98 46 96 46 B2 40 +18 00 0A 18 37 40 1A 44 36 40 92 44 35 40 0E 44 +34 40 00 44 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D +30 41 9E 51 04 57 41 52 4D 00 30 40 0E 52 3D 40 +44 52 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 +10 00 20 02 02 20 3E E3 1E 53 F2 D0 30 00 2A 02 +3E 90 0A 00 B7 27 3E 90 16 00 B4 2F 2E 93 83 27 +8C 2F 30 4D 1E 48 06 0D 1B 5B 37 6D 23 00 D6 47 +34 46 1E 48 19 46 61 73 74 46 6F 72 74 68 20 C2 +A9 4A 2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 D6 47 +14 48 30 FF A0 4A B8 44 24 46 1E 48 0A 62 79 74 +65 73 20 66 72 65 65 00 3C 46 9A 4C 86 4F 04 43 4F 4C 44 00 92 B3 EA 05 FD 23 B2 40 04 A5 20 01 -B2 40 88 5A 5C 01 92 43 04 02 B2 40 FE FF 02 02 -A2 83 06 02 B2 43 26 02 B2 43 22 02 D2 D3 24 02 -B2 43 42 02 B2 43 46 02 B2 43 62 02 B2 43 66 02 -B2 40 80 00 84 02 B2 40 7F FF 82 02 B2 40 7F FF -86 02 F2 43 22 03 F2 43 26 03 F2 40 A5 00 41 01 -F2 40 10 00 40 01 D2 43 41 01 F2 40 A5 00 61 01 -B2 40 48 00 62 01 82 43 66 01 39 40 00 01 B2 40 -33 00 64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 B2 42 B0 01 F2 D0 -10 00 2A 03 F2 C0 40 00 A2 04 39 40 00 08 29 83 -89 43 00 1C FC 23 39 40 3A 00 29 83 B9 40 F0 55 -C6 FF FB 23 B2 40 30 48 E4 FF B2 40 81 00 E0 05 -92 42 02 18 E6 05 92 42 04 18 E8 05 92 C3 E0 05 -92 D3 FA 05 3F 40 80 1C 31 40 E0 1C 30 12 54 55 -25 3F 38 40 C0 1D 39 48 2A 48 09 5A 1A 52 C4 1D -09 9A 03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A -C4 1D 30 4D B6 54 09 32 43 4F 4E 53 54 41 4E 54 -87 12 80 4F D6 4B D6 4B 98 4F 0C 57 2F 83 9F 4E -02 00 00 00 2E 4E 3D 41 30 4D F6 56 09 32 56 41 -52 49 41 42 4C 45 87 12 80 4F 34 44 04 00 06 47 -98 4F 2A 44 1C 15 B0 12 2A 44 C4 49 1C 4A 32 47 -4A 57 D8 4A 28 47 CC 4D 82 57 4C 57 29 4E 39 90 -86 12 02 20 2E 53 15 3C 39 90 85 12 03 20 1E 4E -02 00 0F 3C 39 90 84 12 0C 20 2E 52 B9 90 0A 57 -02 00 04 24 B9 90 32 57 02 00 03 20 B0 12 0C 57 -82 57 1B 17 30 41 32 B0 00 02 01 24 3E 4F 30 41 -3E 40 28 00 B0 12 34 57 B0 12 86 57 19 42 C6 1D -A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 -C4 1D 92 53 C4 1D B0 12 2A 44 C4 49 D8 4A 28 47 -CE 57 C4 57 21 53 3E 90 10 00 87 2D DA 2B D0 57 -B2 41 C4 1D D6 3F 87 12 B0 45 D2 56 DE 57 0C 43 -1B 42 C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 -2F 20 92 53 C4 1D B0 12 34 57 B0 12 86 57 0E 93 -03 20 3C 40 00 03 21 3C 1E 93 03 20 3C 40 10 03 -1C 3C 2E 93 03 20 3C 40 20 03 17 3C 2E 92 03 20 -3C 40 20 02 12 3C 3E 92 03 20 3C 40 30 02 0D 3C -3E 93 03 20 3C 40 30 03 08 3C 3C 40 30 00 19 42 -C6 1D A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D -7A 90 26 00 09 20 3C 40 10 02 92 53 C4 1D B0 12 -34 57 B0 12 86 57 EB 3F 7A 90 40 00 16 20 3C 40 -20 00 92 53 C4 1D B0 12 AC 57 0C 20 3C 50 10 00 -3E 40 2B 00 B0 12 AC 57 92 92 C0 1D C4 1D 02 24 -92 53 C4 1D 8E 10 0C 5E D8 3F B0 12 AC 57 FA 23 -3C 50 10 00 B0 12 90 57 EF 3F 0C 43 1B 42 C6 1D -A2 53 C6 1D 87 12 B0 45 D2 56 BC 58 FE 90 26 00 -00 00 3E 40 20 00 03 20 3C 50 82 00 C6 3F B0 12 -AC 57 E1 23 3C 50 80 00 B0 12 90 57 DC 3F 20 48 -04 52 45 54 49 00 87 12 34 44 00 13 D6 4B 2A 44 -34 44 2C 00 D6 57 B4 58 FA 58 2E 4E 0E DC 09 4B -A2 3F 4C 50 03 4D 4F 56 84 12 F0 58 00 40 04 59 -05 4D 4F 56 2E 42 84 12 F0 58 40 40 00 00 03 41 -44 44 84 12 F0 58 00 50 1E 59 05 41 44 44 2E 42 -84 12 F0 58 40 50 2A 59 04 41 44 44 43 00 84 12 -F0 58 00 60 38 59 06 41 44 44 43 2E 42 00 84 12 -F0 58 40 60 E0 58 04 53 55 42 43 00 84 12 F0 58 -00 70 56 59 06 53 55 42 43 2E 42 00 84 12 F0 58 -40 70 64 59 03 53 55 42 84 12 F0 58 00 80 74 59 -05 53 55 42 2E 42 84 12 F0 58 40 80 2E 50 03 43 -4D 50 84 12 F0 58 00 90 8E 59 05 43 4D 50 2E 42 -84 12 F0 58 40 90 1C 50 04 44 41 44 44 00 84 12 -F0 58 00 A0 A8 59 06 44 41 44 44 2E 42 00 84 12 -F0 58 40 A0 9A 59 03 42 49 54 84 12 F0 58 00 B0 -C6 59 05 42 49 54 2E 42 84 12 F0 58 40 B0 D2 59 -03 42 49 43 84 12 F0 58 00 C0 E0 59 05 42 49 43 -2E 42 84 12 F0 58 40 C0 EC 59 03 42 49 53 84 12 -F0 58 00 D0 FA 59 05 42 49 53 2E 42 84 12 F0 58 -40 D0 00 00 03 58 4F 52 84 12 F0 58 00 E0 14 5A -05 58 4F 52 2E 42 84 12 F0 58 40 E0 46 59 03 41 -4E 44 84 12 F0 58 00 F0 2E 5A 05 41 4E 44 2E 42 -84 12 F0 58 40 F0 B0 45 D6 57 4C 5A 0A 4C 3C F0 -70 00 8A 10 3A F0 0F 00 0C DA 4F 3F 80 59 03 52 -52 43 84 12 46 5A 00 10 5E 5A 05 52 52 43 2E 42 -84 12 46 5A 40 10 6A 5A 04 53 57 50 42 00 84 12 -46 5A 80 10 78 5A 03 52 52 41 84 12 46 5A 00 11 -86 5A 05 52 52 41 2E 42 84 12 46 5A 40 11 92 5A -03 53 58 54 84 12 46 5A 80 11 00 00 04 50 55 53 -48 00 84 12 46 5A 00 12 AC 5A 06 50 55 53 48 2E -42 00 84 12 46 5A 40 12 06 5A 04 43 41 4C 4C 00 -84 12 46 5A 80 12 1A 53 0E 4A 87 12 E2 46 60 49 -0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 48 4D -B0 45 D2 56 F6 5A 92 53 C4 1D 3E 40 2C 00 B0 12 -2A 44 C4 49 D8 4A 28 47 CC 4D AA 58 0E 5B 0A 4E -3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A -01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F -2A 92 D1 2F 8A 10 5A 06 8F 3F A0 5A 06 52 52 43 -4D 2E 41 00 84 12 F0 5A 40 00 3C 5B 04 52 52 43 -4D 00 84 12 F0 5A 50 00 4C 5B 06 52 52 41 4D 2E -41 00 84 12 F0 5A 40 01 5A 5B 04 52 52 41 4D 00 -84 12 F0 5A 50 01 6A 5B 06 52 4C 41 4D 2E 41 00 -84 12 F0 5A 40 02 78 5B 04 52 4C 41 4D 00 84 12 -F0 5A 50 02 88 5B 06 52 52 55 4D 2E 41 00 84 12 -F0 5A 40 03 96 5B 04 52 52 55 4D 00 84 12 F0 5A -50 03 BA 5A 07 50 55 53 48 4D 2E 41 84 12 F0 5A -00 14 B4 5B 05 50 55 53 48 4D 84 12 F0 5A 00 15 -C4 5B 06 50 4F 50 4D 2E 41 00 84 12 F0 5A 00 16 -D2 5B 04 50 4F 50 4D 00 84 12 F0 5A 00 17 85 12 -00 3C A6 5B 03 53 3E 3D 85 12 00 38 F4 5B 02 53 -3C 00 85 12 00 34 E2 5B 03 30 3E 3D 85 12 00 30 -08 5C 02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 -85 12 00 2C 1C 5C 03 55 3E 3D 85 12 00 28 12 5C -03 30 3C 3E 85 12 00 24 30 5C 02 30 3D 00 85 12 -00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 -A2 53 C6 1D 0E 4A 30 4D 26 5C 04 54 48 45 4E 00 -1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 -3A 90 00 02 31 2F 88 DA 00 00 30 4D B6 59 04 45 -4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 -C6 1D 2F 83 8F 4A 00 00 E3 3F 5A 5C 05 55 4E 54 -49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 -0A 11 3A 90 00 FE 10 3B 3A F0 FF 03 08 DA 89 48 -00 00 A2 53 C6 1D 30 4D 3A 5A 05 41 47 41 49 4E -87 12 EE 5B A2 5C 2A 44 00 00 05 57 48 49 4C 45 -87 12 48 5C 78 44 2A 44 FE 5B 06 52 45 50 45 41 -54 00 87 12 EE 5B A2 5C 60 5C 2A 44 FE 5C 3D 41 -2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 00 00 CA 23 -98 42 C6 1D 00 00 30 4D CA 5A 03 42 57 31 84 12 -FC 5C E0 1D 1A 5D 03 42 57 32 84 12 FC 5C E2 1D -26 5D 03 42 57 33 84 12 FC 5C E4 1D 3E 5D 3D 41 -1A 42 C6 1D 2E 4E 28 4E 08 93 8E 43 00 00 8B 23 -BA 4F 00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D -00 00 03 46 57 31 84 12 3C 5D E6 1D 62 5D 03 46 -57 32 84 12 3C 5D E8 1D 6E 5D 03 46 57 33 84 12 -3C 5D EA 1D 3E 90 00 30 07 24 3E E0 00 04 3E B0 -00 10 02 24 3E E0 00 08 30 4D 7A 5D 04 47 4F 54 -4F 00 87 12 EE 5B BE 4D CC 4B 2A 44 00 00 05 3F -47 4F 54 4F 87 12 84 5D BE 4D CC 4B 2A 44 00 00 -03 4A 4D 50 87 12 BE 4D D0 5C 2A 44 AE 5D 04 3F -4A 4D 50 00 87 12 84 5D BE 4D 78 44 A2 5C 2A 44 -87 12 B0 45 D2 56 E8 5D 69 4E 3E 4F 3C 4F 2C 4C -1B 42 C6 1D A2 53 C6 1D 79 90 52 00 0A 20 B0 12 -AC 57 5E 0E 5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 -30 4D 79 90 23 00 0D 20 3C C0 40 00 92 53 C4 1D -A2 53 C6 1D B0 12 34 57 BB 4F 02 00 3E F0 0F 00 -E8 3F 79 90 26 00 03 20 3C E0 E0 00 EF 3F 3C C0 -F0 00 79 90 40 00 12 20 92 53 C4 1D B0 12 AC 57 -D8 23 3C D0 10 00 3E 40 2B 00 B0 12 AC 57 92 92 -C0 1D C4 1D CE 27 92 53 C4 1D CB 3F 3C D0 30 00 -A2 53 C6 1D 3E 40 28 00 B0 12 34 57 BB 4F 02 00 -3E 40 29 00 EA 3F 87 12 B0 45 D2 56 8E 5E 3B 4F -2C 4B 69 4E 7E 40 20 00 79 90 52 00 03 20 B0 12 -AC 57 B1 3F 3C C0 F0 00 A2 53 C6 1D 79 90 26 00 -09 20 3C D0 60 00 92 53 C4 1D B0 12 34 57 BB 4F -02 00 A1 3F 3C D0 70 00 3E 40 28 00 B0 12 34 57 -BB 4F 02 00 3E 40 29 00 E2 3F 34 44 2C 00 E0 5D -86 5E 62 44 2A 44 10 59 04 4D 4F 56 41 00 84 12 -DA 5E C0 00 32 5D 04 43 4D 50 41 00 84 12 DA 5E -D0 00 CA 5C 04 41 44 44 41 00 84 12 DA 5E E0 00 -EA 5C 04 53 55 42 41 00 84 12 DA 5E F0 00 F6 5E -05 43 41 4C 4C 41 87 12 B0 45 D2 56 2E 5F 1B 42 -C6 1D A2 53 C6 1D 6E 4E 3C 40 34 01 7E 90 52 00 -0B 20 7E 40 20 00 B0 12 AC 57 5C 0E 0C DE 8B 4C -00 00 3E 4F 3D 41 30 4D 2C 53 7E 90 40 00 0B 20 -92 53 C4 1D 7E 40 20 00 B0 12 AC 57 EE 23 1C 53 -3E 40 2B 00 E8 3F A2 53 C6 1D 7E 90 23 00 09 20 -3C 40 3B 01 92 53 C4 1D B0 12 34 57 BB 4F 02 00 -DC 3F 7E 90 26 00 02 20 2C 53 F4 3F 7E 40 28 00 -1C 83 B0 12 34 57 BB 4F 02 00 3E 40 29 00 CB 3F -87 12 B0 45 D2 56 B8 5F 69 4E 3E 4F 3C 40 00 18 -79 90 52 00 05 20 B0 12 AC 57 0E 4C 3D 41 30 4D -82 43 EE 1D 79 90 23 00 0B 20 92 53 C4 1D B0 12 -34 57 2F 53 3E F0 0F 00 5E 0A 5E 0E 0C DE ED 3F -79 90 26 00 F2 27 79 90 40 00 12 20 92 53 C4 1D -B0 12 AC 57 E2 23 3E 40 2B 00 92 53 C4 1D B0 12 -AC 57 92 92 C0 1D C4 1D D8 27 92 53 C4 1D D5 3F -3E 40 28 00 B0 12 34 57 8F 4E 00 00 3E 40 29 00 -B0 12 AC 57 3E 4F 3E F0 0F 00 0C DE EA 3F 87 12 -B0 45 D2 56 46 60 3C 4F 69 4E 3E 40 20 00 79 90 -52 00 BB 27 82 43 EE 1D 79 90 26 00 08 20 92 53 -C4 1D B0 12 34 57 2F 53 3E F0 0F 00 BF 3F 3E 40 -28 00 B0 12 34 57 F7 3F 1B 42 C6 1D A2 53 C6 1D -0C 4E 3E 4F 1C D2 EE 1D 82 43 EE 1D 3C DE 8B 4C -00 00 B2 41 C4 1D 30 4D 34 44 C4 1D F2 44 B0 44 -34 44 2C 00 B0 5F 3E 60 78 60 24 47 F0 58 E8 5E -04 4D 4F 56 58 00 84 12 98 60 40 00 00 40 B0 60 -06 4D 4F 56 58 2E 41 00 84 12 98 60 00 00 40 40 -C0 60 06 4D 4F 56 58 2E 42 00 84 12 98 60 40 00 -40 40 04 5F 04 41 44 44 58 00 84 12 98 60 40 00 -00 50 E4 60 06 41 44 44 58 2E 41 00 84 12 98 60 -00 00 40 50 F4 60 06 41 44 44 58 2E 42 00 84 12 -98 60 40 00 40 50 06 61 05 41 44 44 43 58 84 12 -98 60 40 00 00 60 18 61 07 41 44 44 43 58 2E 41 -84 12 98 60 00 00 40 60 28 61 07 41 44 44 43 58 -2E 42 84 12 98 60 40 00 40 60 12 5F 05 53 55 42 -43 58 84 12 98 60 40 00 00 70 4C 61 07 53 55 42 -43 58 2E 41 84 12 98 60 00 00 40 70 5C 61 07 53 -55 42 43 58 2E 42 84 12 98 60 40 00 40 70 6E 61 -04 53 55 42 58 00 84 12 98 60 40 00 00 80 80 61 -06 53 55 42 58 2E 41 00 84 12 98 60 00 00 40 80 -90 61 06 53 55 42 58 2E 42 00 84 12 98 60 40 00 -40 80 20 5F 04 43 4D 50 58 00 84 12 98 60 40 00 -00 90 B4 61 06 43 4D 50 58 2E 41 00 84 12 98 60 -00 00 40 90 C4 61 06 43 4D 50 58 2E 42 00 84 12 -98 60 40 00 40 90 7E 5C 05 44 41 44 44 58 84 12 -98 60 40 00 00 A0 E8 61 07 44 41 44 44 58 2E 41 -84 12 98 60 00 00 40 A0 F8 61 07 44 41 44 44 58 -2E 42 84 12 98 60 40 00 40 A0 D6 61 04 42 49 54 -58 00 84 12 98 60 40 00 00 B0 1C 62 06 42 49 54 -58 2E 41 00 84 12 98 60 00 00 40 B0 2C 62 06 42 -49 54 58 2E 42 00 84 12 98 60 40 00 40 B0 3E 62 -04 42 49 43 58 00 84 12 98 60 40 00 00 C0 50 62 -06 42 49 43 58 2E 41 00 84 12 98 60 00 00 40 C0 -60 62 06 42 49 43 58 2E 42 00 84 12 98 60 40 00 -40 C0 72 62 04 42 49 53 58 00 84 12 98 60 40 00 -00 D0 84 62 06 42 49 53 58 2E 41 00 84 12 98 60 -00 00 40 D0 94 62 06 42 49 53 58 2E 42 00 84 12 -98 60 40 00 40 D0 20 5A 04 58 4F 52 58 00 84 12 -98 60 40 00 00 E0 B8 62 06 58 4F 52 58 2E 41 00 -84 12 98 60 00 00 40 E0 C8 62 06 58 4F 52 58 2E -42 00 84 12 98 60 40 00 40 E0 3A 61 04 41 4E 44 -58 00 84 12 98 60 40 00 00 F0 EC 62 06 41 4E 44 -58 2E 41 00 84 12 98 60 00 00 40 F0 FC 62 06 41 -4E 44 58 2E 42 00 84 12 98 60 40 00 40 F0 34 44 -C4 1D F2 44 B0 44 B0 45 B0 5F 78 60 24 47 46 5A -A2 61 04 52 52 43 58 00 84 12 1E 63 40 00 00 10 -32 63 06 52 52 43 58 2E 41 00 84 12 1E 63 00 00 -40 10 42 63 06 52 52 43 58 2E 42 00 84 12 1E 63 -40 00 40 10 54 63 04 52 52 55 58 00 84 12 1E 63 -40 01 00 10 66 63 06 52 52 55 58 2E 41 00 84 12 -1E 63 00 01 40 10 76 63 06 52 52 55 58 2E 42 00 -84 12 1E 63 40 01 40 10 88 63 05 53 57 50 42 58 -84 12 1E 63 40 00 80 10 9A 63 07 53 57 50 42 58 -2E 41 84 12 1E 63 00 00 80 10 AA 63 04 52 52 41 -58 00 84 12 1E 63 40 00 00 11 BC 63 06 52 52 41 -58 2E 41 00 84 12 1E 63 00 00 40 11 CC 63 06 52 -52 41 58 2E 42 00 84 12 1E 63 40 00 40 11 DE 63 -04 53 58 54 58 00 84 12 1E 63 40 00 80 11 F0 63 -06 53 58 54 58 2E 41 00 84 12 1E 63 00 00 80 11 -3A 5C 05 50 55 53 48 58 84 12 1E 63 40 00 00 12 -12 64 07 50 55 53 48 58 2E 41 84 12 1E 63 00 00 -40 12 22 64 07 50 55 53 48 58 2E 42 84 12 1E 63 -40 00 40 12 00 64 03 52 50 54 87 12 B0 45 D2 56 -52 64 29 4E 7E 40 20 00 79 90 52 00 06 20 B0 12 -AC 57 03 24 3E D0 80 00 04 3C B0 12 34 57 3E F0 -0F 00 82 4E EE 1D 3E 4F 3D 41 30 4D +44 52 B2 40 88 5A 5C 01 B2 40 FE FF 02 02 B2 D3 +06 02 B2 43 26 02 B2 43 22 02 D2 D3 24 02 B2 43 +42 02 B2 43 46 02 B2 43 62 02 B2 43 66 02 B2 40 +7F FF 82 02 B2 43 86 02 F2 43 22 03 F2 43 26 03 +F2 40 A5 00 41 01 F2 40 10 00 40 01 D2 43 41 01 +F2 40 A5 00 61 01 B2 40 48 00 62 01 82 43 66 01 +39 40 00 01 B2 40 33 00 64 01 D2 43 61 01 92 D2 +9E 01 08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 +B2 42 B0 01 F2 D0 10 00 2A 03 F2 C0 40 00 A2 04 +39 40 00 08 29 83 89 43 00 1C FC 23 39 40 3A 00 +29 83 B9 40 A2 52 C6 FF FB 23 B2 40 26 47 E4 FF +B2 40 81 00 E0 05 92 42 02 18 E6 05 92 42 04 18 +E8 05 92 C3 E0 05 92 D3 FA 05 3F 40 80 1C 31 40 +E0 1C 30 12 0A 52 33 3F 8E 52 07 43 4F 4D 50 41 +52 45 0C 4E 38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 +1B 83 07 30 1C 83 07 30 19 53 F9 98 FF FF F5 27 +02 2C 3E 43 30 4D 1E 43 30 4D B2 4D 86 5B 54 48 +45 4E 5D 00 30 4D AC 53 86 5B 45 4C 53 45 5D 00 +87 12 14 48 00 00 C6 44 42 4B 80 48 24 4B 34 44 +40 46 22 54 44 44 1E 48 06 5B 54 48 45 4E 5D 00 +82 53 4A 46 F2 53 F8 47 D0 44 58 44 4A 46 C8 53 +2A 44 44 44 1E 48 06 5B 45 4C 53 45 5D 00 82 53 +4A 46 10 54 F8 47 D0 44 58 44 4A 46 C6 53 2A 44 +1E 48 04 5B 49 46 5D 00 82 53 4A 46 C8 53 3C 46 +C6 53 F8 47 1E 48 05 0D 0A 6B 6F 20 D6 47 8C 47 +32 4B 3C 46 C8 53 B8 53 84 5B 49 46 5D 00 0E 93 +3E 4F BE 27 30 4D 38 54 89 5B 44 45 46 49 4E 45 +44 5D 87 12 42 4B 80 48 EE 48 6A 44 2A 44 48 54 +8B 5B 55 4E 44 45 46 49 4E 45 44 5D 87 12 42 4B +80 48 EE 48 6A 44 00 45 2A 44 7C 54 3D 41 B2 4E +0E 18 A2 4E 0C 18 3E 4F 30 40 5A 51 4C 50 06 4D +41 52 4B 45 52 00 B0 12 B8 4D BA 40 84 12 FC FF +BA 40 7A 54 FE FF 9A 42 C8 1D 00 00 28 83 8A 48 +02 00 A2 52 C6 1D 30 40 00 4E 1C 15 B0 12 2A 44 +80 48 EE 48 4A 46 D0 54 AA 49 40 46 CE 4C EA 54 +D2 54 39 4E 39 80 86 12 08 24 19 53 02 20 2E 4E +04 3C 2E 53 19 53 01 24 2E 82 1B 17 30 41 32 B0 +00 02 01 24 3E 4F 30 41 3E 40 28 00 B0 12 BA 54 +B0 12 EE 54 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 +3E 40 29 00 1C 15 12 12 C4 1D 92 53 C4 1D B0 12 +2A 44 80 48 AA 49 40 46 36 55 2C 55 21 53 3E 90 +10 00 81 2D DA 2B 38 55 B2 41 C4 1D D6 3F 87 12 +42 4B 74 48 46 55 0C 43 1B 42 C6 1D A2 53 C6 1D +6A 4E 3E 4F 7A 90 23 00 29 20 92 53 C4 1D B0 12 +BA 54 B0 12 EE 54 3C 40 00 03 0E 93 1C 24 3C 40 +10 03 1E 93 18 24 3C 40 20 03 2E 93 14 24 3C 40 +20 02 2E 92 10 24 3C 40 30 02 3E 92 0C 24 3C 40 +30 03 3E 93 08 24 3C 40 30 00 19 42 C6 1D A2 53 +C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 +09 20 3C 40 10 02 92 53 C4 1D B0 12 BA 54 B0 12 +EE 54 EB 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 +C4 1D B0 12 14 55 0C 20 3C 50 10 00 3E 40 2B 00 +B0 12 14 55 92 92 C0 1D C4 1D 02 24 92 53 C4 1D +8E 10 0C 5E D8 3F B0 12 14 55 FA 23 3C 50 10 00 +B0 12 F8 54 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D +87 12 42 4B 74 48 18 56 FE 90 26 00 00 00 3E 40 +20 00 03 20 3C 50 82 00 C6 3F B0 12 14 55 E1 23 +3C 50 80 00 B0 12 F8 54 DC 3F D6 46 04 52 45 54 +49 00 87 12 14 48 00 13 B0 4A 2A 44 14 48 2C 00 +3E 55 10 56 56 56 09 4B 2E 4E 0E DC A2 3F 00 4F +03 4D 4F 56 84 12 4C 56 00 40 60 56 05 4D 4F 56 +2E 42 84 12 4C 56 40 40 00 00 03 41 44 44 84 12 +4C 56 00 50 7A 56 05 41 44 44 2E 42 84 12 4C 56 +40 50 86 56 04 41 44 44 43 00 84 12 4C 56 00 60 +94 56 06 41 44 44 43 2E 42 00 84 12 4C 56 40 60 +3C 56 04 53 55 42 43 00 84 12 4C 56 00 70 B2 56 +06 53 55 42 43 2E 42 00 84 12 4C 56 40 70 C0 56 +03 53 55 42 84 12 4C 56 00 80 D0 56 05 53 55 42 +2E 42 84 12 4C 56 40 80 E2 4E 03 43 4D 50 84 12 +4C 56 00 90 EA 56 05 43 4D 50 2E 42 84 12 4C 56 +40 90 D0 4E 04 44 41 44 44 00 84 12 4C 56 00 A0 +04 57 06 44 41 44 44 2E 42 00 84 12 4C 56 40 A0 +F6 56 03 42 49 54 84 12 4C 56 00 B0 22 57 05 42 +49 54 2E 42 84 12 4C 56 40 B0 2E 57 03 42 49 43 +84 12 4C 56 00 C0 3C 57 05 42 49 43 2E 42 84 12 +4C 56 40 C0 48 57 03 42 49 53 84 12 4C 56 00 D0 +56 57 05 42 49 53 2E 42 84 12 4C 56 40 D0 00 00 +03 58 4F 52 84 12 4C 56 00 E0 70 57 05 58 4F 52 +2E 42 84 12 4C 56 40 E0 A2 56 03 41 4E 44 84 12 +4C 56 00 F0 8A 57 05 41 4E 44 2E 42 84 12 4C 56 +40 F0 42 4B 3E 55 A8 57 0A 4C 3C F0 70 00 8A 10 +3A F0 0F 00 0C DA 4F 3F DC 56 03 52 52 43 84 12 +A2 57 00 10 BA 57 05 52 52 43 2E 42 84 12 A2 57 +40 10 C6 57 04 53 57 50 42 00 84 12 A2 57 80 10 +D4 57 03 52 52 41 84 12 A2 57 00 11 E2 57 05 52 +52 41 2E 42 84 12 A2 57 40 11 EE 57 03 53 58 54 +84 12 A2 57 80 11 00 00 04 50 55 53 48 00 84 12 +A2 57 00 12 08 58 06 50 55 53 48 2E 42 00 84 12 +A2 57 40 12 62 57 04 43 41 4C 4C 00 84 12 A2 57 +80 12 1A 53 0E 4A 87 12 34 46 1E 48 0D 6F 75 74 +20 6F 66 20 62 6F 75 6E 64 73 4C 4C 42 4B 74 48 +52 58 92 53 C4 1D 3E 40 2C 00 B0 12 2A 44 80 48 +AA 49 40 46 CE 4C 06 56 6A 58 0A 4E 3E 4F 1A 83 +E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A +08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F +8A 10 5A 06 8F 3F FC 57 06 52 52 43 4D 2E 41 00 +84 12 4C 58 40 00 98 58 04 52 52 43 4D 00 84 12 +4C 58 50 00 A8 58 06 52 52 41 4D 2E 41 00 84 12 +4C 58 40 01 B6 58 04 52 52 41 4D 00 84 12 4C 58 +50 01 C6 58 06 52 4C 41 4D 2E 41 00 84 12 4C 58 +40 02 D4 58 04 52 4C 41 4D 00 84 12 4C 58 50 02 +E4 58 06 52 52 55 4D 2E 41 00 84 12 4C 58 40 03 +F2 58 04 52 52 55 4D 00 84 12 4C 58 50 03 16 58 +07 50 55 53 48 4D 2E 41 84 12 4C 58 00 14 10 59 +05 50 55 53 48 4D 84 12 4C 58 00 15 20 59 06 50 +4F 50 4D 2E 41 00 84 12 4C 58 00 16 2E 59 04 50 +4F 50 4D 00 84 12 4C 58 00 17 02 59 03 53 3E 3D +85 12 00 38 4C 59 02 53 3C 00 85 12 00 34 3E 59 +03 30 3E 3D 85 12 00 30 60 59 02 30 3C 00 85 12 +00 30 00 00 02 55 3C 00 85 12 00 2C 74 59 03 55 +3E 3D 85 12 00 28 6A 59 03 30 3C 3E 85 12 00 24 +88 59 02 30 3D 00 85 12 00 20 00 00 02 49 46 00 +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 0E 4A 30 4D +7E 59 04 54 48 45 4E 00 1A 42 C6 1D 08 4E 3E 4F +09 48 29 53 0A 89 0A 11 3A 90 00 02 33 2F 88 DA +00 00 30 4D 12 57 04 45 4C 53 45 00 1A 42 C6 1D +BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 8F 4A 00 00 +E3 3F B2 59 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F +19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE 12 3B +3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 1D 30 4D +96 57 05 41 47 41 49 4E 0A 4E 38 40 00 3C E7 3F +00 00 05 57 48 49 4C 45 87 12 A0 59 76 44 2A 44 +56 59 06 52 45 50 45 41 54 00 87 12 28 5A B8 59 +2A 44 54 5A 3D 41 08 4E 3E 4F 2A 48 B2 92 C4 1D +CD 2F 98 42 C6 1D 00 00 30 4D 26 58 03 42 57 31 +84 12 52 5A 00 00 6C 5A 03 42 57 32 84 12 52 5A +00 00 78 5A 03 42 57 33 84 12 52 5A 00 00 90 5A +3D 41 1A 42 C6 1D 28 4E B2 92 C4 1D 90 2B BA 4F +00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 +03 46 57 31 84 12 8E 5A 00 00 B0 5A 03 46 57 32 +84 12 8E 5A 00 00 BC 5A 03 46 57 33 84 12 8E 5A +00 00 00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 +3E E0 00 04 3E B0 00 10 02 24 3E E0 00 08 87 12 +C0 4C DA 4A 2A 44 C8 5A 04 47 4F 54 4F 00 2F 83 +8F 4E 00 00 3E 40 00 3C F2 3F 87 12 42 4B 74 48 +12 5B 69 4E 3E 4F 3C 4F 2C 4C 1B 42 C6 1D A2 53 +C6 1D 79 90 52 00 0A 20 B0 12 14 55 5E 0E 5E 0E +0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D 79 90 23 00 +0D 20 3C C0 40 00 92 53 C4 1D A2 53 C6 1D B0 12 +BA 54 BB 4F 02 00 3E F0 0F 00 E8 3F 79 90 26 00 +03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 79 90 40 00 +12 20 92 53 C4 1D B0 12 14 55 D8 23 3C D0 10 00 +3E 40 2B 00 B0 12 14 55 92 92 C0 1D C4 1D CE 27 +92 53 C4 1D CB 3F 3C D0 30 00 A2 53 C6 1D 3E 40 +28 00 B0 12 BA 54 BB 4F 02 00 3E 40 29 00 EA 3F +87 12 42 4B 74 48 B8 5B 3B 4F 2C 4B 69 4E 7E 40 +20 00 79 90 52 00 03 20 B0 12 14 55 B1 3F 3C C0 +F0 00 A2 53 C6 1D 79 90 26 00 09 20 3C D0 60 00 +92 53 C4 1D B0 12 BA 54 BB 4F 02 00 A1 3F 3C D0 +70 00 3E 40 28 00 B0 12 BA 54 BB 4F 02 00 3E 40 +29 00 E2 3F 14 48 2C 00 0A 5B B0 5B 66 44 2A 44 +6C 56 04 4D 4F 56 41 00 84 12 04 5C C0 00 84 5A +04 43 4D 50 41 00 84 12 04 5C D0 00 22 5A 04 41 +44 44 41 00 84 12 04 5C E0 00 42 5A 04 53 55 42 +41 00 84 12 04 5C F0 00 20 5C 05 43 41 4C 4C 41 +87 12 42 4B 74 48 58 5C 1B 42 C6 1D A2 53 C6 1D +6E 4E 3C 40 34 01 7E 90 52 00 0B 20 7E 40 20 00 +B0 12 14 55 5C 0E 0C DE 8B 4C 00 00 3E 4F 3D 41 +30 4D 2C 53 7E 90 40 00 0B 20 92 53 C4 1D 7E 40 +20 00 B0 12 14 55 EE 23 1C 53 3E 40 2B 00 E8 3F +A2 53 C6 1D 7E 90 23 00 09 20 3C 40 3B 01 92 53 +C4 1D B0 12 BA 54 BB 4F 02 00 DC 3F 7E 90 26 00 +02 20 2C 53 F4 3F 7E 40 28 00 1C 83 B0 12 BA 54 +BB 4F 02 00 3E 40 29 00 CB 3F 87 12 42 4B 74 48 +E2 5C 69 4E 3E 4F 3C 40 00 18 79 90 52 00 05 20 +B0 12 14 55 0E 4C 3D 41 30 4D 82 43 6E 61 79 90 +23 00 0B 20 92 53 C4 1D B0 12 BA 54 2F 53 3E F0 +0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 26 00 F2 27 +79 90 40 00 12 20 92 53 C4 1D B0 12 14 55 E2 23 +3E 40 2B 00 92 53 C4 1D B0 12 14 55 92 92 C0 1D +C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 28 00 B0 12 +BA 54 8F 4E 00 00 3E 40 29 00 B0 12 14 55 3E 4F +3E F0 0F 00 0C DE EA 3F 87 12 42 4B 74 48 70 5D +3C 4F 69 4E 3E 40 20 00 79 90 52 00 BB 27 82 43 +6E 61 79 90 26 00 08 20 92 53 C4 1D B0 12 BA 54 +2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 B0 12 BA 54 +F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E 3E 4F 1C D2 +6E 61 82 43 6E 61 3C DE 8B 4C 00 00 B2 41 C4 1D +30 4D 14 48 C4 1D EA 44 86 44 14 48 2C 00 DA 5C +68 5D A2 5D 3C 46 4C 56 12 5C 04 4D 4F 56 58 00 +84 12 C2 5D 40 00 00 40 DA 5D 06 4D 4F 56 58 2E +41 00 84 12 C2 5D 00 00 40 40 EA 5D 06 4D 4F 56 +58 2E 42 00 84 12 C2 5D 40 00 40 40 2E 5C 04 41 +44 44 58 00 84 12 C2 5D 40 00 00 50 0E 5E 06 41 +44 44 58 2E 41 00 84 12 C2 5D 00 00 40 50 1E 5E +06 41 44 44 58 2E 42 00 84 12 C2 5D 40 00 40 50 +30 5E 05 41 44 44 43 58 84 12 C2 5D 40 00 00 60 +42 5E 07 41 44 44 43 58 2E 41 84 12 C2 5D 00 00 +40 60 52 5E 07 41 44 44 43 58 2E 42 84 12 C2 5D +40 00 40 60 3C 5C 05 53 55 42 43 58 84 12 C2 5D +40 00 00 70 76 5E 07 53 55 42 43 58 2E 41 84 12 +C2 5D 00 00 40 70 86 5E 07 53 55 42 43 58 2E 42 +84 12 C2 5D 40 00 40 70 98 5E 04 53 55 42 58 00 +84 12 C2 5D 40 00 00 80 AA 5E 06 53 55 42 58 2E +41 00 84 12 C2 5D 00 00 40 80 BA 5E 06 53 55 42 +58 2E 42 00 84 12 C2 5D 40 00 40 80 4A 5C 04 43 +4D 50 58 00 84 12 C2 5D 40 00 00 90 DE 5E 06 43 +4D 50 58 2E 41 00 84 12 C2 5D 00 00 40 90 EE 5E +06 43 4D 50 58 2E 42 00 84 12 C2 5D 40 00 40 90 +D6 59 05 44 41 44 44 58 84 12 C2 5D 40 00 00 A0 +12 5F 07 44 41 44 44 58 2E 41 84 12 C2 5D 00 00 +40 A0 22 5F 07 44 41 44 44 58 2E 42 84 12 C2 5D +40 00 40 A0 00 5F 04 42 49 54 58 00 84 12 C2 5D +40 00 00 B0 46 5F 06 42 49 54 58 2E 41 00 84 12 +C2 5D 00 00 40 B0 56 5F 06 42 49 54 58 2E 42 00 +84 12 C2 5D 40 00 40 B0 68 5F 04 42 49 43 58 00 +84 12 C2 5D 40 00 00 C0 7A 5F 06 42 49 43 58 2E +41 00 84 12 C2 5D 00 00 40 C0 8A 5F 06 42 49 43 +58 2E 42 00 84 12 C2 5D 40 00 40 C0 9C 5F 04 42 +49 53 58 00 84 12 C2 5D 40 00 00 D0 AE 5F 06 42 +49 53 58 2E 41 00 84 12 C2 5D 00 00 40 D0 BE 5F +06 42 49 53 58 2E 42 00 84 12 C2 5D 40 00 40 D0 +7C 57 04 58 4F 52 58 00 84 12 C2 5D 40 00 00 E0 +E2 5F 06 58 4F 52 58 2E 41 00 84 12 C2 5D 00 00 +40 E0 F2 5F 06 58 4F 52 58 2E 42 00 84 12 C2 5D +40 00 40 E0 64 5E 04 41 4E 44 58 00 84 12 C2 5D +40 00 00 F0 16 60 06 41 4E 44 58 2E 41 00 84 12 +C2 5D 00 00 40 F0 26 60 06 41 4E 44 58 2E 42 00 +84 12 C2 5D 40 00 40 F0 14 48 C4 1D EA 44 86 44 +42 4B DA 5C A2 5D 3C 46 A2 57 CC 5E 04 52 52 43 +58 00 84 12 48 60 40 00 00 10 5C 60 06 52 52 43 +58 2E 41 00 84 12 48 60 00 00 40 10 6C 60 06 52 +52 43 58 2E 42 00 84 12 48 60 40 00 40 10 7E 60 +04 52 52 55 58 00 84 12 48 60 40 01 00 10 90 60 +06 52 52 55 58 2E 41 00 84 12 48 60 00 01 40 10 +A0 60 06 52 52 55 58 2E 42 00 84 12 48 60 40 01 +40 10 B2 60 05 53 57 50 42 58 84 12 48 60 40 00 +80 10 C4 60 07 53 57 50 42 58 2E 41 84 12 48 60 +00 00 80 10 D4 60 04 52 52 41 58 00 84 12 48 60 +40 00 00 11 E6 60 06 52 52 41 58 2E 41 00 84 12 +48 60 00 00 40 11 F6 60 06 52 52 41 58 2E 42 00 +84 12 48 60 40 00 40 11 08 61 04 53 58 54 58 00 +84 12 48 60 40 00 80 11 1A 61 06 53 58 54 58 2E +41 00 84 12 48 60 00 00 80 11 92 59 05 50 55 53 +48 58 84 12 48 60 40 00 00 12 3C 61 07 50 55 53 +48 58 2E 41 84 12 48 60 00 00 40 12 4C 61 07 50 +55 53 48 58 2E 42 84 12 48 60 40 00 40 12 00 00 +2A 61 03 52 50 54 87 12 42 4B 74 48 7E 61 29 4E +7E 40 20 00 79 90 52 00 06 20 B0 12 14 55 03 24 +3E D0 80 00 05 3C B0 12 BA 54 1E 83 3E F0 0F 00 +82 4E 6E 61 3E 4F 3D 41 30 4D @FFFE -F0 55 +A2 52 q diff --git a/binaries/MSP_EXP430FR6989_1MHz.txt b/binaries/MSP_EXP430FR6989_1MHz.txt index 25663be..2eecb75 100644 --- a/binaries/MSP_EXP430FR6989_1MHz.txt +++ b/binaries/MSP_EXP430FR6989_1MHz.txt @@ -1,526 +1,481 @@ @1800 -10 00 08 00 00 D6 E8 03 05 00 18 00 6A 64 98 52 -2C 01 7F B0 00 48 12 48 +10 00 08 00 00 D6 E8 03 05 00 18 00 98 61 D4 50 +2D 01 6F B0 B6 46 C8 46 @4400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 44 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 44 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 44 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 44 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 44 02 3E 52 00 -0E 12 3E 4F 30 4D 96 44 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 44 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 44 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 44 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 45 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 44 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 45 02 31 2D 00 -1E 83 30 4D D8 44 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 45 -02 30 3D 00 1E 83 0E 7E 30 4D 60 45 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 45 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 44 01 3E 3E 8F F4 3B EB 37 0E 45 02 42 4C 00 -85 12 20 00 AC 45 04 42 41 53 45 00 85 12 DC 1D -C8 44 05 53 54 41 54 45 85 12 BE 1D 96 45 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 45 06 55 4D 2F -4D 4F 44 00 30 12 62 44 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 44 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 45 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 45 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 46 -02 23 53 00 87 12 32 46 6A 46 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 46 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 45 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 45 -02 44 2E 00 87 12 D2 45 44 44 B0 44 4C 45 64 46 -BC 44 A2 46 7E 46 22 49 EA 48 2A 44 DC 45 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 44 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 46 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 44 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 46 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 46 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 46 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 45 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 47 03 4B 45 59 30 40 A0 47 -18 42 EC 05 2F 83 8F 4E 00 00 B0 12 00 48 92 B3 -FC 05 FD 27 1E 42 EC 05 B0 12 12 48 30 4D 00 47 -06 41 43 43 45 50 54 00 30 40 CC 47 3C 40 6E 48 -3B 40 38 48 2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 -3C 40 20 00 3D 40 62 48 92 B3 FC 05 05 24 18 42 -EC 05 38 90 0A 00 04 20 21 53 39 40 26 48 4D 15 -A2 B3 FC 05 FD 27 B2 40 11 00 EE 05 D2 C3 22 02 -30 41 B2 40 13 00 EE 05 D2 D3 22 02 30 41 00 00 -05 53 4C 45 45 50 30 40 2A 48 12 D2 0A 18 FB 3F -21 52 3A 17 58 42 EC 05 48 9C 08 2C 48 9B E9 27 -78 92 11 20 2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 -CE 48 00 00 1E 53 A2 B3 FC 05 FD 27 82 48 EE 05 -30 4D 64 48 2D 83 92 B3 FC 05 E4 23 FC 27 82 93 -DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 -0A 18 30 4D B0 46 04 45 4D 49 54 00 30 40 90 48 -08 4E 3E 4F E0 3F 10 47 03 43 49 42 85 12 3C 1D -3F 80 06 00 8F 4E 04 00 3E 40 54 00 9F 42 9E 48 -00 00 AF 4F 02 00 88 3F 86 48 04 45 43 48 4F 00 -B2 40 82 48 5C 48 82 43 DE 1D 30 4D E0 46 06 4E -4F 45 43 48 4F 00 B2 40 30 4D 5C 48 92 43 DE 1D -30 4D 9C 46 05 53 50 41 43 45 2F 83 8F 4E 00 00 -3E 40 20 00 CB 3F E4 48 06 53 50 41 43 45 53 00 -0E 93 09 24 0D 12 3D 40 0C 49 EF 3F 0E 49 2D 83 -1E 83 EB 23 3D 41 3E 4F 30 4D 66 47 04 54 59 50 -45 00 0E 93 0F 24 1E 15 3D 40 38 49 28 4F 7E 48 -8F 48 00 00 2F 83 AA 3F 3A 49 2D 83 91 83 02 00 -F5 23 1D 17 2F 53 3E 4F 30 4D 98 48 02 43 52 00 -30 40 54 49 87 12 60 49 02 0D 0A 00 22 49 2A 44 -2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 -0D 63 30 4D F8 48 82 53 22 00 82 43 B4 1D 87 12 -34 44 60 49 D6 4B 34 44 22 00 C4 49 8E 49 3D 41 -B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D 3E 4F -92 B3 C6 1D A2 63 C6 1D 30 4D CE 48 82 2E 22 00 -87 12 7A 49 34 44 22 49 D6 4B 2A 44 00 00 04 57 -4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A 3A 5C -28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 60 00 -C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 -4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F -1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E CE 48 -00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 0C 4E -65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 1E 24 -58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E FE FF -0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C -FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 -0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C 00 00 -35 40 0E 44 34 40 00 44 30 4D A2 45 07 3E 4E 55 -4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D -6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 -7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 -82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 -09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 8F 48 -02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 2D 15 -3D 40 1E 4B 09 43 08 43 3F 82 8F 4E 06 00 0C 4E -7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 02 00 -E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 04 24 -3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F 20 4B -2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 7A 90 -F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 8F 49 -02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 79 90 -0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 09 9B -08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 45 2A 17 -E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A 4E 93 -2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 3F 50 -06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 BF 4F -00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 00 00 -9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 2F 53 -30 4D BA 48 07 45 58 45 43 55 54 45 0A 4E 3E 4F -00 4A 26 45 01 2C 1A 42 C6 1D A2 53 C6 1D 8A 4E -00 00 3E 4F 30 4D D4 4B 87 4C 49 54 45 52 41 4C -82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 -34 44 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 -00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 EB 3F -30 4D 4C 49 05 43 4F 55 4E 54 2F 83 1E 53 8F 4E -00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F C2 1D -3E 4F 82 43 C4 1D 30 4D 87 12 38 4C B0 45 C4 49 -52 4C 3D 40 5A 4C E2 22 5D 3E 5C 4C 0A 4E 3E 4F -3D 40 72 4C 39 27 3D 40 4C 4C 1A E2 BE 1D B3 27 -AD 23 74 4C 3E 4F 3D 40 4C 4C BA 23 DE 53 00 00 -68 4E 08 5E F8 40 3F 00 00 00 3D 40 3E 4F CD 3F -C4 4B 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D -3C 49 3B 49 3A 49 3D 15 B0 12 2A 44 48 4C B0 4C -B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D -6C 45 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C -B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 50 49 -A0 48 EA 48 48 4C DE 44 70 45 60 49 0C 73 74 61 -63 6B 20 65 6D 70 74 79 21 00 3C 4D 34 44 30 FF -F2 46 8A 45 60 49 0A 46 52 41 4D 20 66 75 6C 6C -21 00 3C 4D 24 47 DE 4C C0 47 05 41 42 4F 52 54 -3F 40 80 1C D1 3F 1A 4D 86 41 42 4F 52 54 22 00 -87 12 7A 49 34 44 3C 4D D6 4B 2A 44 8F 93 02 00 -03 20 2F 52 3E 4F 30 4D B0 12 FE 54 B0 12 00 48 -92 C3 FC 05 38 40 AA 0A 39 42 09 59 03 43 19 83 -FD 23 18 83 F9 23 92 B3 FC 05 F2 23 87 12 78 54 -34 44 DE 1D F2 44 C0 48 60 49 04 1B 5B 37 6D 00 -22 49 54 44 28 47 98 4D 50 49 60 49 05 6C 69 6E -65 3A 22 49 40 45 D2 46 22 49 60 49 04 1B 5B 30 -6D 00 22 49 20 4D 00 00 83 5B 27 5D 87 12 BE 4D -34 44 34 44 D6 4B D6 4B 2A 44 16 4A 01 27 87 12 -B0 45 C4 49 1C 4A 28 47 CC 4D 2A 44 7C 4C CE 45 -81 5C 92 42 C0 1D C4 1D 30 4D A8 4D 81 5B 82 43 -BE 1D 30 4D D0 4D 01 5D B2 43 BE 1D 30 4D BE 4F -02 00 3E 4F 30 4D 72 47 82 49 53 00 87 12 C8 45 -F2 44 28 47 10 4E AC 4D 34 44 EE 4D D6 4B 2A 44 -BE 4D EE 4D 2A 44 F8 4D 09 49 4D 4D 45 44 49 41 -54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D 76 49 -87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D -00 00 A2 53 C6 1D 30 4D C2 4C 88 50 4F 53 54 50 -4F 4E 45 00 87 12 B0 45 C4 49 1C 4A 54 44 28 47 -CC 4D 70 45 28 47 74 4E 34 44 34 44 D6 4B D6 4B -34 44 D6 4B D6 4B 2A 44 DC 4D 81 3B 82 93 BE 1D -A8 27 87 12 34 44 2A 44 D6 4B 12 4F DE 4D 2A 44 -7A 4E 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 -1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 -FE 4E BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D -82 4F BC 1D 30 4D 92 4E 01 3A 30 12 B2 4E 87 12 -A0 49 B0 45 C4 49 D8 4E 3D 41 08 4E 7A 4E 5A D3 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 44 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 44 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 44 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 44 02 3E 52 00 0E 12 3E 4F 30 4D 70 44 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 44 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 44 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 44 +01 21 BE 4F 00 00 3E 4F 30 4D CC 44 02 30 3D 00 +1E 83 0E 7E 30 4D FC 44 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 45 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 44 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 45 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 45 02 23 53 00 87 12 88 45 C0 45 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 45 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 44 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 45 34 44 86 44 D4 44 BA 45 +92 44 F8 45 D4 45 D6 47 42 4B 82 47 2A 44 22 45 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 45 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 46 18 42 EC 05 2F 83 8F 4E +00 00 B0 12 B6 46 92 B3 FC 05 FD 27 1E 42 EC 05 +B0 12 C8 46 30 4D A2 B3 FC 05 FD 27 B2 40 11 00 +EE 05 D2 C3 22 02 30 41 B2 40 13 00 EE 05 D2 D3 +22 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 46 +B0 12 B6 46 12 D2 0A 18 F9 3F F0 44 06 41 43 43 +45 50 54 00 3C 40 64 47 3B 40 2E 47 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 47 +92 B3 FC 05 05 24 18 42 EC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 EC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 FC 05 +FD 27 82 48 EE 05 30 4D 5A 47 2D 83 92 B3 FC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 44 04 45 4D 49 +54 00 30 40 86 47 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C 47 04 45 43 48 4F 00 B2 40 82 48 +52 47 82 43 DE 1D 30 4D 32 46 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 47 92 43 DE 1D 30 4D 20 46 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 47 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 47 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 45 +02 43 52 00 30 40 08 48 87 12 1E 48 02 0D 0A 00 +D6 47 2A 44 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 45 82 53 22 00 82 43 B4 1D 87 12 14 48 +1E 48 B0 4A 14 48 22 00 80 48 4C 48 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA 47 82 2E 22 00 87 12 38 48 14 48 D6 47 +B0 4A 2A 44 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 +60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 +18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D +F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E +CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 +0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 +1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E +FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 +0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 +09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C +00 00 35 40 0E 44 34 40 00 44 30 4D 82 44 07 3E +4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 +DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 +07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 +D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 +E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 49 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 49 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 45 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 46 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 44 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC 46 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 47 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 4A 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 48 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 48 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 4B 42 4B 80 48 50 4B +3D 40 58 4B CC 22 82 3E 5A 4B 0A 4E 3E 4F 3D 40 +70 4B 23 27 3D 40 4A 4B 1A E2 BE 1D A1 27 B5 23 +72 4B 3E 4F 3D 40 4A 4B B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 4E CB 3F D2 4A +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 44 46 4B AE 4B B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 45 04 51 55 49 54 00 82 43 08 18 31 40 +E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 +04 48 8C 47 42 4B 82 47 46 4B A4 44 0C 45 1E 48 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 4C +14 48 30 FF A0 4A 26 45 1E 48 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 4C 3C 46 E0 4B C2 4A 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E 4C 86 41 42 4F +52 54 22 00 87 12 38 48 14 48 40 4C B0 4A 2A 44 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 CC 51 +B0 12 B6 46 92 C3 FC 05 38 40 AA 0A 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 FC 05 F3 23 87 12 +46 51 14 48 DE 1D EA 44 AC 47 1E 48 04 1B 5B 37 +6D 00 D6 47 58 44 40 46 9A 4C 04 48 1E 48 05 6C +69 6E 65 3A D6 47 D0 44 24 46 D6 47 1E 48 04 1B +5B 30 6D 00 D6 47 24 4C 00 00 83 5B 27 5D 87 12 +C0 4C 14 48 14 48 B0 4A B0 4A 2A 44 E8 48 01 27 +87 12 42 4B 80 48 EE 48 40 46 CE 4C 2A 44 7A 4B +32 45 81 5C 92 42 C0 1D C4 1D 30 4D AA 4C 81 5B +82 43 BE 1D 30 4D D2 4C 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 4A 82 49 53 00 87 12 +BE 4B EA 44 40 46 12 4D AE 4C 14 48 F0 4C B0 4A +2A 44 C0 4C F0 4C 2A 44 FA 4C 09 49 4D 4D 45 44 +49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D +C4 4B 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 4B +80 48 EE 48 58 44 40 46 CE 4C 0C 45 40 46 5C 4D +14 48 14 48 B0 4A B0 4A 14 48 B0 4A B0 4A 2A 44 +DE 4C 81 3B 82 93 BE 1D B5 27 87 12 14 48 2A 44 +B0 4A FA 4D E0 4C 2A 44 62 4D 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 4D 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A 4D 01 3A 30 12 A0 4D 92 B3 C6 1D A2 63 C6 1D +87 12 42 4B 80 48 C8 4D 3D 41 08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E -3E 4F BA 40 30 40 00 00 BA 40 C4 4E 02 00 82 48 -B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D -30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D -A8 49 FE FF 89 48 00 00 30 4D 87 12 60 49 0F 73 -74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 48 4D -BE 49 08 56 41 52 49 41 42 4C 45 00 B0 12 CE 4E -BA 40 86 12 FC FF E4 3F 24 4C 08 43 4F 4E 53 54 -41 4E 54 00 B0 12 CE 4E BA 40 85 12 FC FF 8A 4E -FE FF 3E 4F D5 3F 5A 4F 06 43 52 45 41 54 45 00 -B0 12 CE 4E BA 40 85 12 FC FF 8A 4A FE FF C8 3F -92 4C 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 -00 00 8A 4D 02 00 3D 41 30 4D 92 4F 05 44 45 46 -45 52 30 12 20 4F 8B 3F 7C 4A 05 3E 42 4F 44 59 -2E 52 30 4D 78 4F 04 43 4F 44 45 00 B0 12 CE 4E -2A 82 82 4A C6 1D 87 12 C0 4E A2 52 74 52 2A 44 -C6 4F 07 43 4F 44 45 4E 4E 4D 87 12 9A 4E DE 4D -D0 4F 2A 44 00 00 07 45 4E 44 43 4F 44 45 87 12 -BC 52 12 4F 2A 44 28 4D 03 41 53 4D 92 42 DA 1D -EC 1D B2 40 78 52 DA 1D D9 3F F6 4F 06 45 4E 44 -41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 -4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 -C6 1D B2 43 BE 1D 30 40 BC 52 00 00 05 4C 4F 32 -48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 44 -02 00 A2 52 C6 1D ED 3F 18 4E 85 48 49 32 4C 4F -87 12 F2 46 9A 50 D6 4B DE 4D A2 52 74 52 2A 44 -6A 50 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D -A2 52 C6 1D BE 40 28 47 00 00 2E 53 30 4D AC 4F -84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 -24 47 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 1C 49 -84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D -E2 4F 85 42 45 47 49 4E 30 40 F2 46 C0 50 85 55 -4E 54 49 4C 39 40 28 47 A2 52 C6 1D 1A 42 C6 1D -8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D 08 50 85 41 -47 41 49 4E 39 40 24 47 EF 3F 42 4F 85 57 48 49 -4C 45 87 12 86 50 78 44 2A 44 30 4E 86 52 45 50 -45 41 54 00 87 12 04 51 C6 50 2A 44 A0 50 82 44 -4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D -BE 40 3C 47 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 -00 00 30 4D E8 4B 84 4C 4F 4F 50 00 39 40 5E 47 -A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF -1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A -00 00 F6 3F 3E 4F 30 4D 98 47 85 2B 4C 4F 4F 50 -39 40 4C 47 E5 3F 56 51 85 4C 45 41 56 45 1A 42 -C6 1D BA 40 6E 47 00 00 BA 40 24 47 02 00 B2 50 -06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A -00 00 30 4D 98 51 04 4D 4F 56 45 00 0A 4E 38 4F -39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 -00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 -18 83 E8 49 00 00 1A 83 FA 23 30 4D 0C 51 0A 56 -4F 43 41 42 55 4C 41 52 59 00 87 12 80 4F 34 44 -10 00 34 44 00 00 3C 47 34 44 00 00 D6 4B 5E 47 -18 52 F2 46 34 44 C8 1D 44 44 F2 44 D6 4B FA 44 -98 4F 34 44 CA 1D FA 44 2A 44 BC 4D 05 46 4F 52 -54 48 84 12 32 52 9C 52 DE 55 DA 52 3C 52 82 50 -8A 51 06 54 CC 52 9C 54 0A 57 DE 50 4E 55 00 00 -DA 53 E6 4D BA 4F 00 00 FE 50 09 41 53 53 45 4D -42 4C 45 52 84 12 32 52 FC 62 94 62 F8 61 8A 5D -32 5C AE 5D C0 60 00 00 22 64 34 64 8A 5C C8 5C -C8 62 00 00 00 00 BC 5D 66 52 6A 52 04 41 4C 53 -4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F -4A 4E 08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 -39 40 CC 1D 38 40 CA 1D 8A 3F AC 49 04 4F 4E 4C -59 00 82 43 CC 1D 30 4D 2E 51 0B 44 45 46 49 4E -49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D D2 50 -07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F -0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 -F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D -C8 4E 86 5B 54 48 45 4E 5D 00 30 4D 22 53 86 5B -45 4C 53 45 5D 00 87 12 34 44 00 00 36 45 B0 45 -C4 49 2A 4C 44 44 28 47 9C 53 8A 44 8A 44 60 49 -06 5B 54 48 45 4E 5D 00 F8 52 32 47 6A 53 44 49 -40 45 54 44 32 47 3E 53 2A 44 8A 44 8A 44 60 49 -06 5B 45 4C 53 45 5D 00 F8 52 32 47 8A 53 44 49 -40 45 54 44 32 47 3C 53 2A 44 60 49 04 5B 49 46 -5D 00 F8 52 32 47 3E 53 24 47 3C 53 44 49 60 49 -05 0D 0A 6B 6F 20 22 49 A0 48 38 4C 24 47 3E 53 -2E 53 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D -B2 53 89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 45 -C4 49 1C 4A 6C 44 2A 44 C2 53 8B 5B 55 4E 44 45 -46 49 4E 45 44 5D 87 12 B0 45 C4 49 1C 4A 6C 44 -64 45 2A 44 F6 53 3D 41 B2 4E 0E 18 A2 4E 0C 18 -3E 4F 44 3C C6 51 06 4D 41 52 4B 45 52 00 B0 12 -CE 4E BA 40 84 12 FC FF BA 40 F4 53 FE FF 9A 42 -C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 -18 4F 42 52 D2 52 E6 52 3A 54 3A 4E 82 4A C8 1D -2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 -18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 -2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D B2 52 09 50 -57 52 5F 53 54 41 54 45 84 12 32 54 98 52 6A 64 -1C 51 09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 -7C 54 92 42 0C 18 7E 54 EF 3F 6E 54 08 50 57 52 -5F 48 45 52 45 00 92 42 C8 1D 7C 54 92 42 C6 1D -7E 54 30 4D 82 54 08 52 53 54 5F 48 45 52 45 00 -92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F FE 51 -04 57 49 50 45 00 39 40 10 00 29 83 B9 43 80 FF -FC 23 B2 40 2A 48 28 48 B2 40 58 55 56 55 B2 40 -98 52 0E 18 B2 40 6A 64 0C 18 30 12 8C 54 B2 40 -90 48 8E 48 B2 40 54 49 52 49 B2 40 A0 47 9E 47 -B2 40 CC 47 CA 47 B2 40 3C 1D 9E 48 B2 40 18 00 -0A 18 37 40 1A 44 36 40 BC 44 35 40 0E 44 34 40 -00 44 39 40 10 00 29 83 89 43 E0 1D FC 23 B2 40 -0A 00 DC 1D B2 40 20 00 B4 1D 30 41 D0 54 04 57 -41 52 4D 00 30 40 58 55 3D 40 8E 55 92 C3 30 01 -1E 42 08 18 0E 93 12 24 F2 B0 10 00 20 02 02 20 -3E E3 1E 53 F2 D0 30 00 2A 02 3E 90 0A 00 AB 27 -3E 90 16 00 A8 2F 2E 93 77 27 80 2F 30 4D 60 49 -06 0D 1B 5B 37 6D 23 00 22 49 E2 46 60 49 1F 46 -61 73 74 46 6F 72 74 68 20 56 33 30 30 20 28 43 -29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 22 49 -34 44 80 FF F2 46 28 45 D2 46 60 49 0B 62 79 74 -65 73 20 66 72 65 65 20 24 47 98 4D F0 52 04 43 +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 48 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 4C 90 4B 05 44 45 46 45 52 +B0 12 B8 4D BA 40 30 40 FC FF BA 40 AE 4D FE FF +E3 3F 1E 4B 06 43 52 45 41 54 45 00 B0 12 B8 4D +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 4E 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 49 05 3E 42 4F 44 59 2E 52 +30 4D 44 4E 04 43 4F 44 45 00 B0 12 B8 4D 82 43 +5C 61 A2 82 C6 1D 87 12 D6 50 B0 50 2A 44 84 4E +07 43 4F 44 45 4E 4E 4D B0 12 86 4D F0 3F 00 00 +07 45 4E 44 43 4F 44 45 87 12 E4 50 FA 4D 2A 44 +2C 4C 03 41 53 4D B2 40 B4 50 DA 1D DE 3F B0 4E +06 45 4E 44 41 53 4D 00 87 12 B8 4E F8 50 2A 44 +00 00 05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 +00 00 A2 53 C6 1D B2 43 BE 1D 30 40 E4 50 00 00 +05 4C 4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 +BA 40 2A 44 02 00 A2 52 C6 1D ED 3F 1A 4D 85 48 +49 32 4C 4F 87 12 A0 4A 4E 4F B0 4A E0 4C D6 50 +B0 50 2A 44 1E 4F 82 49 46 00 2F 83 8F 4E 00 00 +1E 42 C6 1D A2 52 C6 1D BE 40 40 46 00 00 2E 53 +30 4D 5E 4E 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 +C6 1D BA 40 3C 46 FC FF 8E 4A 00 00 2A 83 0E 4A +30 4D D0 47 84 54 48 45 4E 00 9E 42 C6 1D 00 00 +3E 4F 30 4D A0 4E 85 42 45 47 49 4E 30 40 A0 4A +74 4F 85 55 4E 54 49 4C 39 40 40 46 A2 52 C6 1D +1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D +C2 4E 85 41 47 41 49 4E 39 40 3C 46 EF 3F 7A 48 +85 57 48 49 4C 45 87 12 3A 4F 76 44 2A 44 34 48 +86 52 45 50 45 41 54 00 87 12 B8 4F 7A 4F 2A 44 +54 4F 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D +1E 42 C6 1D BE 40 54 46 FE FF A2 53 00 1C 1A 42 +00 1C 8A 43 00 00 30 4D E2 4A 84 4C 4F 4F 50 00 +39 40 76 46 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF +8A 4E FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 +03 24 8E 4A 00 00 F6 3F 3E 4F 30 4D 90 46 85 2B +4C 4F 4F 50 39 40 64 46 E5 3F 0A 50 04 4D 4F 56 +45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 +0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D +08 5A 09 5A 19 83 18 83 E8 49 00 00 1A 83 FA 23 +30 4D 14 48 CA 1D F2 44 2A 44 84 12 82 50 B2 4F +68 53 E2 4F BE 4C 36 4F 3E 50 7C 54 64 48 6A 51 +84 51 92 4F 04 52 00 00 4E 54 E8 4C 78 4E 00 00 +84 12 82 50 26 60 BE 5F 22 5F E6 5A 8A 59 00 00 +EA 5D 00 00 4C 61 60 61 E2 59 20 5A F2 5F 00 00 +00 00 C2 5A AE 50 3A 40 0C 00 39 40 CA 1D 38 40 +CC 1D C6 3F 3A 40 0E 00 39 40 CC 1D 38 40 CA 1D +B9 3F 82 43 CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D +8A 50 F2 50 F8 50 08 51 3A 4E 82 4A C8 1D 2E 4E +82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 18 48 +FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 2A 4A +0A 93 F0 23 3E 4F 3D 41 30 4D 32 4D 09 50 57 52 +5F 53 54 41 54 45 84 12 00 51 D4 50 98 61 D0 4F +09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 4A 51 +92 42 0C 18 4C 51 EF 3F 3C 51 08 50 57 52 5F 48 +45 52 45 00 92 42 C8 1D 4A 51 92 42 C6 1D 4C 51 +30 4D 50 51 08 52 53 54 5F 48 45 52 45 00 92 42 +C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F C0 4F 04 57 +49 50 45 00 39 40 10 00 29 83 B9 43 80 FF FC 23 +B2 40 E0 46 DE 46 B2 40 0E 52 0C 52 B2 40 D4 50 +0E 18 B2 40 98 61 0C 18 30 12 5A 51 B2 40 86 47 +84 47 B2 40 08 48 06 48 B2 40 98 46 96 46 B2 40 +18 00 0A 18 37 40 1A 44 36 40 92 44 35 40 0E 44 +34 40 00 44 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D +30 41 9E 51 04 57 41 52 4D 00 30 40 0E 52 3D 40 +44 52 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 +10 00 20 02 02 20 3E E3 1E 53 F2 D0 30 00 2A 02 +3E 90 0A 00 B7 27 3E 90 16 00 B4 2F 2E 93 83 27 +8C 2F 30 4D 1E 48 06 0D 1B 5B 37 6D 23 00 D6 47 +34 46 1E 48 19 46 61 73 74 46 6F 72 74 68 20 C2 +A9 4A 2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 D6 47 +14 48 30 FF A0 4A B8 44 24 46 1E 48 0A 62 79 74 +65 73 20 66 72 65 65 00 3C 46 9A 4C 86 4F 04 43 4F 4C 44 00 92 B3 EA 05 FD 23 B2 40 04 A5 20 01 -B2 40 88 5A 5C 01 92 43 04 02 B2 40 FE FF 02 02 -A2 83 06 02 B2 43 26 02 B2 43 22 02 D2 D3 24 02 -B2 43 42 02 B2 43 46 02 B2 43 62 02 B2 43 66 02 -B2 40 80 00 84 02 B2 40 7F FF 82 02 B2 40 7F FF -86 02 F2 43 22 03 F2 43 26 03 F2 40 A5 00 61 01 -82 43 62 01 82 43 66 01 39 40 10 00 B2 40 33 00 -64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 59 14 -18 83 FE 23 19 83 FA 23 B2 42 B0 01 F2 D0 10 00 -2A 03 F2 C0 40 00 A2 04 39 40 00 08 29 83 89 43 -00 1C FC 23 39 40 3A 00 29 83 B9 40 F0 55 C6 FF -FB 23 B2 40 30 48 E4 FF B2 40 81 00 E0 05 92 42 -02 18 E6 05 92 42 04 18 E8 05 92 C3 E0 05 92 D3 -FA 05 3F 40 80 1C 31 40 E0 1C 30 12 54 55 2E 3F -38 40 C0 1D 39 48 2A 48 09 5A 1A 52 C4 1D 09 9A -03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D -30 4D B6 54 09 32 43 4F 4E 53 54 41 4E 54 87 12 -80 4F D6 4B D6 4B 98 4F FA 56 2F 83 9F 4E 02 00 -00 00 2E 4E 3D 41 30 4D E4 56 09 32 56 41 52 49 -41 42 4C 45 87 12 80 4F 34 44 04 00 06 47 98 4F -2A 44 1C 15 B0 12 2A 44 C4 49 1C 4A 32 47 38 57 -D8 4A 28 47 CC 4D 70 57 3A 57 29 4E 39 90 86 12 -02 20 2E 53 15 3C 39 90 85 12 03 20 1E 4E 02 00 -0F 3C 39 90 84 12 0C 20 2E 52 B9 90 F8 56 02 00 -04 24 B9 90 20 57 02 00 03 20 B0 12 FA 56 70 57 -1B 17 30 41 32 B0 00 02 01 24 3E 4F 30 41 3E 40 -28 00 B0 12 22 57 B0 12 74 57 19 42 C6 1D A2 53 -C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 C4 1D -92 53 C4 1D B0 12 2A 44 C4 49 D8 4A 28 47 BC 57 -B2 57 21 53 3E 90 10 00 87 2D DA 2B BE 57 B2 41 -C4 1D D6 3F 87 12 B0 45 C0 56 CC 57 0C 43 1B 42 -C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 2F 20 -92 53 C4 1D B0 12 22 57 B0 12 74 57 0E 93 03 20 -3C 40 00 03 21 3C 1E 93 03 20 3C 40 10 03 1C 3C -2E 93 03 20 3C 40 20 03 17 3C 2E 92 03 20 3C 40 -20 02 12 3C 3E 92 03 20 3C 40 30 02 0D 3C 3E 93 -03 20 3C 40 30 03 08 3C 3C 40 30 00 19 42 C6 1D -A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 -26 00 09 20 3C 40 10 02 92 53 C4 1D B0 12 22 57 -B0 12 74 57 EB 3F 7A 90 40 00 16 20 3C 40 20 00 -92 53 C4 1D B0 12 9A 57 0C 20 3C 50 10 00 3E 40 -2B 00 B0 12 9A 57 92 92 C0 1D C4 1D 02 24 92 53 -C4 1D 8E 10 0C 5E D8 3F B0 12 9A 57 FA 23 3C 50 -10 00 B0 12 7E 57 EF 3F 0C 43 1B 42 C6 1D A2 53 -C6 1D 87 12 B0 45 C0 56 AA 58 FE 90 26 00 00 00 -3E 40 20 00 03 20 3C 50 82 00 C6 3F B0 12 9A 57 -E1 23 3C 50 80 00 B0 12 7E 57 DC 3F 20 48 04 52 -45 54 49 00 87 12 34 44 00 13 D6 4B 2A 44 34 44 -2C 00 C4 57 A2 58 E8 58 2E 4E 0E DC 09 4B A2 3F -4C 50 03 4D 4F 56 84 12 DE 58 00 40 F2 58 05 4D -4F 56 2E 42 84 12 DE 58 40 40 00 00 03 41 44 44 -84 12 DE 58 00 50 0C 59 05 41 44 44 2E 42 84 12 -DE 58 40 50 18 59 04 41 44 44 43 00 84 12 DE 58 -00 60 26 59 06 41 44 44 43 2E 42 00 84 12 DE 58 -40 60 CE 58 04 53 55 42 43 00 84 12 DE 58 00 70 -44 59 06 53 55 42 43 2E 42 00 84 12 DE 58 40 70 -52 59 03 53 55 42 84 12 DE 58 00 80 62 59 05 53 -55 42 2E 42 84 12 DE 58 40 80 2E 50 03 43 4D 50 -84 12 DE 58 00 90 7C 59 05 43 4D 50 2E 42 84 12 -DE 58 40 90 1C 50 04 44 41 44 44 00 84 12 DE 58 -00 A0 96 59 06 44 41 44 44 2E 42 00 84 12 DE 58 -40 A0 88 59 03 42 49 54 84 12 DE 58 00 B0 B4 59 -05 42 49 54 2E 42 84 12 DE 58 40 B0 C0 59 03 42 -49 43 84 12 DE 58 00 C0 CE 59 05 42 49 43 2E 42 -84 12 DE 58 40 C0 DA 59 03 42 49 53 84 12 DE 58 -00 D0 E8 59 05 42 49 53 2E 42 84 12 DE 58 40 D0 -00 00 03 58 4F 52 84 12 DE 58 00 E0 02 5A 05 58 -4F 52 2E 42 84 12 DE 58 40 E0 34 59 03 41 4E 44 -84 12 DE 58 00 F0 1C 5A 05 41 4E 44 2E 42 84 12 -DE 58 40 F0 B0 45 C4 57 3A 5A 0A 4C 3C F0 70 00 -8A 10 3A F0 0F 00 0C DA 4F 3F 6E 59 03 52 52 43 -84 12 34 5A 00 10 4C 5A 05 52 52 43 2E 42 84 12 -34 5A 40 10 58 5A 04 53 57 50 42 00 84 12 34 5A -80 10 66 5A 03 52 52 41 84 12 34 5A 00 11 74 5A -05 52 52 41 2E 42 84 12 34 5A 40 11 80 5A 03 53 -58 54 84 12 34 5A 80 11 00 00 04 50 55 53 48 00 -84 12 34 5A 00 12 9A 5A 06 50 55 53 48 2E 42 00 -84 12 34 5A 40 12 F4 59 04 43 41 4C 4C 00 84 12 -34 5A 80 12 1A 53 0E 4A 87 12 E2 46 60 49 0D 6F -75 74 20 6F 66 20 62 6F 75 6E 64 73 48 4D B0 45 -C0 56 E4 5A 92 53 C4 1D 3E 40 2C 00 B0 12 2A 44 -C4 49 D8 4A 28 47 CC 4D 98 58 FC 5A 0A 4E 3E 4F -1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A 01 28 -0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 -D1 2F 8A 10 5A 06 8F 3F 8E 5A 06 52 52 43 4D 2E -41 00 84 12 DE 5A 40 00 2A 5B 04 52 52 43 4D 00 -84 12 DE 5A 50 00 3A 5B 06 52 52 41 4D 2E 41 00 -84 12 DE 5A 40 01 48 5B 04 52 52 41 4D 00 84 12 -DE 5A 50 01 58 5B 06 52 4C 41 4D 2E 41 00 84 12 -DE 5A 40 02 66 5B 04 52 4C 41 4D 00 84 12 DE 5A -50 02 76 5B 06 52 52 55 4D 2E 41 00 84 12 DE 5A -40 03 84 5B 04 52 52 55 4D 00 84 12 DE 5A 50 03 -A8 5A 07 50 55 53 48 4D 2E 41 84 12 DE 5A 00 14 -A2 5B 05 50 55 53 48 4D 84 12 DE 5A 00 15 B2 5B -06 50 4F 50 4D 2E 41 00 84 12 DE 5A 00 16 C0 5B -04 50 4F 50 4D 00 84 12 DE 5A 00 17 85 12 00 3C -94 5B 03 53 3E 3D 85 12 00 38 E2 5B 02 53 3C 00 -85 12 00 34 D0 5B 03 30 3E 3D 85 12 00 30 F6 5B -02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 85 12 -00 2C 0A 5C 03 55 3E 3D 85 12 00 28 00 5C 03 30 -3C 3E 85 12 00 24 1E 5C 02 30 3D 00 85 12 00 20 -00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 -C6 1D 0E 4A 30 4D 14 5C 04 54 48 45 4E 00 1A 42 -C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 3A 90 -00 02 31 2F 88 DA 00 00 30 4D A4 59 04 45 4C 53 -45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 C6 1D -2F 83 8F 4A 00 00 E3 3F 48 5C 05 55 4E 54 49 4C -3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 -3A 90 00 FE 10 3B 3A F0 FF 03 08 DA 89 48 00 00 -A2 53 C6 1D 30 4D 28 5A 05 41 47 41 49 4E 87 12 -DC 5B 90 5C 2A 44 00 00 05 57 48 49 4C 45 87 12 -36 5C 78 44 2A 44 EC 5B 06 52 45 50 45 41 54 00 -87 12 DC 5B 90 5C 4E 5C 2A 44 EC 5C 3D 41 2E 4E -08 4E 3E 4F 2A 48 0A 93 88 43 00 00 CA 23 98 42 -C6 1D 00 00 30 4D B8 5A 03 42 57 31 84 12 EA 5C -E0 1D 08 5D 03 42 57 32 84 12 EA 5C E2 1D 14 5D -03 42 57 33 84 12 EA 5C E4 1D 2C 5D 3D 41 1A 42 -C6 1D 2E 4E 28 4E 08 93 8E 43 00 00 8B 23 BA 4F -00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 -03 46 57 31 84 12 2A 5D E6 1D 50 5D 03 46 57 32 -84 12 2A 5D E8 1D 5C 5D 03 46 57 33 84 12 2A 5D -EA 1D 3E 90 00 30 07 24 3E E0 00 04 3E B0 00 10 -02 24 3E E0 00 08 30 4D 68 5D 04 47 4F 54 4F 00 -87 12 DC 5B BE 4D CC 4B 2A 44 00 00 05 3F 47 4F -54 4F 87 12 72 5D BE 4D CC 4B 2A 44 00 00 03 4A -4D 50 87 12 BE 4D BE 5C 2A 44 9C 5D 04 3F 4A 4D -50 00 87 12 72 5D BE 4D 78 44 90 5C 2A 44 87 12 -B0 45 C0 56 D6 5D 69 4E 3E 4F 3C 4F 2C 4C 1B 42 -C6 1D A2 53 C6 1D 79 90 52 00 0A 20 B0 12 9A 57 -5E 0E 5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D -79 90 23 00 0D 20 3C C0 40 00 92 53 C4 1D A2 53 -C6 1D B0 12 22 57 BB 4F 02 00 3E F0 0F 00 E8 3F -79 90 26 00 03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 -79 90 40 00 12 20 92 53 C4 1D B0 12 9A 57 D8 23 -3C D0 10 00 3E 40 2B 00 B0 12 9A 57 92 92 C0 1D -C4 1D CE 27 92 53 C4 1D CB 3F 3C D0 30 00 A2 53 -C6 1D 3E 40 28 00 B0 12 22 57 BB 4F 02 00 3E 40 -29 00 EA 3F 87 12 B0 45 C0 56 7C 5E 3B 4F 2C 4B -69 4E 7E 40 20 00 79 90 52 00 03 20 B0 12 9A 57 -B1 3F 3C C0 F0 00 A2 53 C6 1D 79 90 26 00 09 20 -3C D0 60 00 92 53 C4 1D B0 12 22 57 BB 4F 02 00 -A1 3F 3C D0 70 00 3E 40 28 00 B0 12 22 57 BB 4F -02 00 3E 40 29 00 E2 3F 34 44 2C 00 CE 5D 74 5E -62 44 2A 44 FE 58 04 4D 4F 56 41 00 84 12 C8 5E -C0 00 20 5D 04 43 4D 50 41 00 84 12 C8 5E D0 00 -B8 5C 04 41 44 44 41 00 84 12 C8 5E E0 00 D8 5C -04 53 55 42 41 00 84 12 C8 5E F0 00 E4 5E 05 43 -41 4C 4C 41 87 12 B0 45 C0 56 1C 5F 1B 42 C6 1D -A2 53 C6 1D 6E 4E 3C 40 34 01 7E 90 52 00 0B 20 -7E 40 20 00 B0 12 9A 57 5C 0E 0C DE 8B 4C 00 00 -3E 4F 3D 41 30 4D 2C 53 7E 90 40 00 0B 20 92 53 -C4 1D 7E 40 20 00 B0 12 9A 57 EE 23 1C 53 3E 40 -2B 00 E8 3F A2 53 C6 1D 7E 90 23 00 09 20 3C 40 -3B 01 92 53 C4 1D B0 12 22 57 BB 4F 02 00 DC 3F -7E 90 26 00 02 20 2C 53 F4 3F 7E 40 28 00 1C 83 -B0 12 22 57 BB 4F 02 00 3E 40 29 00 CB 3F 87 12 -B0 45 C0 56 A6 5F 69 4E 3E 4F 3C 40 00 18 79 90 -52 00 05 20 B0 12 9A 57 0E 4C 3D 41 30 4D 82 43 -EE 1D 79 90 23 00 0B 20 92 53 C4 1D B0 12 22 57 -2F 53 3E F0 0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 -26 00 F2 27 79 90 40 00 12 20 92 53 C4 1D B0 12 -9A 57 E2 23 3E 40 2B 00 92 53 C4 1D B0 12 9A 57 -92 92 C0 1D C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 -28 00 B0 12 22 57 8F 4E 00 00 3E 40 29 00 B0 12 -9A 57 3E 4F 3E F0 0F 00 0C DE EA 3F 87 12 B0 45 -C0 56 34 60 3C 4F 69 4E 3E 40 20 00 79 90 52 00 -BB 27 82 43 EE 1D 79 90 26 00 08 20 92 53 C4 1D -B0 12 22 57 2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 -B0 12 22 57 F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E -3E 4F 1C D2 EE 1D 82 43 EE 1D 3C DE 8B 4C 00 00 -B2 41 C4 1D 30 4D 34 44 C4 1D F2 44 B0 44 34 44 -2C 00 9E 5F 2C 60 66 60 24 47 DE 58 D6 5E 04 4D -4F 56 58 00 84 12 86 60 40 00 00 40 9E 60 06 4D -4F 56 58 2E 41 00 84 12 86 60 00 00 40 40 AE 60 -06 4D 4F 56 58 2E 42 00 84 12 86 60 40 00 40 40 -F2 5E 04 41 44 44 58 00 84 12 86 60 40 00 00 50 -D2 60 06 41 44 44 58 2E 41 00 84 12 86 60 00 00 -40 50 E2 60 06 41 44 44 58 2E 42 00 84 12 86 60 -40 00 40 50 F4 60 05 41 44 44 43 58 84 12 86 60 -40 00 00 60 06 61 07 41 44 44 43 58 2E 41 84 12 -86 60 00 00 40 60 16 61 07 41 44 44 43 58 2E 42 -84 12 86 60 40 00 40 60 00 5F 05 53 55 42 43 58 -84 12 86 60 40 00 00 70 3A 61 07 53 55 42 43 58 -2E 41 84 12 86 60 00 00 40 70 4A 61 07 53 55 42 -43 58 2E 42 84 12 86 60 40 00 40 70 5C 61 04 53 -55 42 58 00 84 12 86 60 40 00 00 80 6E 61 06 53 -55 42 58 2E 41 00 84 12 86 60 00 00 40 80 7E 61 -06 53 55 42 58 2E 42 00 84 12 86 60 40 00 40 80 -0E 5F 04 43 4D 50 58 00 84 12 86 60 40 00 00 90 -A2 61 06 43 4D 50 58 2E 41 00 84 12 86 60 00 00 -40 90 B2 61 06 43 4D 50 58 2E 42 00 84 12 86 60 -40 00 40 90 6C 5C 05 44 41 44 44 58 84 12 86 60 -40 00 00 A0 D6 61 07 44 41 44 44 58 2E 41 84 12 -86 60 00 00 40 A0 E6 61 07 44 41 44 44 58 2E 42 -84 12 86 60 40 00 40 A0 C4 61 04 42 49 54 58 00 -84 12 86 60 40 00 00 B0 0A 62 06 42 49 54 58 2E -41 00 84 12 86 60 00 00 40 B0 1A 62 06 42 49 54 -58 2E 42 00 84 12 86 60 40 00 40 B0 2C 62 04 42 -49 43 58 00 84 12 86 60 40 00 00 C0 3E 62 06 42 -49 43 58 2E 41 00 84 12 86 60 00 00 40 C0 4E 62 -06 42 49 43 58 2E 42 00 84 12 86 60 40 00 40 C0 -60 62 04 42 49 53 58 00 84 12 86 60 40 00 00 D0 -72 62 06 42 49 53 58 2E 41 00 84 12 86 60 00 00 -40 D0 82 62 06 42 49 53 58 2E 42 00 84 12 86 60 -40 00 40 D0 0E 5A 04 58 4F 52 58 00 84 12 86 60 -40 00 00 E0 A6 62 06 58 4F 52 58 2E 41 00 84 12 -86 60 00 00 40 E0 B6 62 06 58 4F 52 58 2E 42 00 -84 12 86 60 40 00 40 E0 28 61 04 41 4E 44 58 00 -84 12 86 60 40 00 00 F0 DA 62 06 41 4E 44 58 2E -41 00 84 12 86 60 00 00 40 F0 EA 62 06 41 4E 44 -58 2E 42 00 84 12 86 60 40 00 40 F0 34 44 C4 1D -F2 44 B0 44 B0 45 9E 5F 66 60 24 47 34 5A 90 61 -04 52 52 43 58 00 84 12 0C 63 40 00 00 10 20 63 -06 52 52 43 58 2E 41 00 84 12 0C 63 00 00 40 10 -30 63 06 52 52 43 58 2E 42 00 84 12 0C 63 40 00 -40 10 42 63 04 52 52 55 58 00 84 12 0C 63 40 01 -00 10 54 63 06 52 52 55 58 2E 41 00 84 12 0C 63 -00 01 40 10 64 63 06 52 52 55 58 2E 42 00 84 12 -0C 63 40 01 40 10 76 63 05 53 57 50 42 58 84 12 -0C 63 40 00 80 10 88 63 07 53 57 50 42 58 2E 41 -84 12 0C 63 00 00 80 10 98 63 04 52 52 41 58 00 -84 12 0C 63 40 00 00 11 AA 63 06 52 52 41 58 2E -41 00 84 12 0C 63 00 00 40 11 BA 63 06 52 52 41 -58 2E 42 00 84 12 0C 63 40 00 40 11 CC 63 04 53 -58 54 58 00 84 12 0C 63 40 00 80 11 DE 63 06 53 -58 54 58 2E 41 00 84 12 0C 63 00 00 80 11 28 5C -05 50 55 53 48 58 84 12 0C 63 40 00 00 12 00 64 -07 50 55 53 48 58 2E 41 84 12 0C 63 00 00 40 12 -10 64 07 50 55 53 48 58 2E 42 84 12 0C 63 40 00 -40 12 EE 63 03 52 50 54 87 12 B0 45 C0 56 40 64 -29 4E 7E 40 20 00 79 90 52 00 06 20 B0 12 9A 57 -03 24 3E D0 80 00 04 3C B0 12 22 57 3E F0 0F 00 -82 4E EE 1D 3E 4F 3D 41 30 4D +44 52 B2 40 88 5A 5C 01 B2 40 FE FF 02 02 B2 D3 +06 02 B2 43 26 02 B2 43 22 02 D2 D3 24 02 B2 43 +42 02 B2 43 46 02 B2 43 62 02 B2 43 66 02 B2 40 +7F FF 82 02 B2 43 86 02 F2 43 22 03 F2 43 26 03 +F2 40 A5 00 61 01 82 43 62 01 82 43 66 01 39 40 +10 00 B2 40 33 00 64 01 D2 43 61 01 92 D2 9E 01 +08 18 38 40 59 14 18 83 FE 23 19 83 FA 23 B2 42 +B0 01 F2 D0 10 00 2A 03 F2 C0 40 00 A2 04 39 40 +00 08 29 83 89 43 00 1C FC 23 39 40 3A 00 29 83 +B9 40 A2 52 C6 FF FB 23 B2 40 26 47 E4 FF B2 40 +81 00 E0 05 92 42 02 18 E6 05 92 42 04 18 E8 05 +92 C3 E0 05 92 D3 FA 05 3F 40 80 1C 31 40 E0 1C +30 12 0A 52 3C 3F 8E 52 07 43 4F 4D 50 41 52 45 +0C 4E 38 4F 3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 +07 30 1C 83 07 30 19 53 F9 98 FF FF F5 27 02 2C +3E 43 30 4D 1E 43 30 4D B2 4D 86 5B 54 48 45 4E +5D 00 30 4D 9A 53 86 5B 45 4C 53 45 5D 00 87 12 +14 48 00 00 C6 44 42 4B 80 48 24 4B 34 44 40 46 +10 54 44 44 1E 48 06 5B 54 48 45 4E 5D 00 70 53 +4A 46 E0 53 F8 47 D0 44 58 44 4A 46 B6 53 2A 44 +44 44 1E 48 06 5B 45 4C 53 45 5D 00 70 53 4A 46 +FE 53 F8 47 D0 44 58 44 4A 46 B4 53 2A 44 1E 48 +04 5B 49 46 5D 00 70 53 4A 46 B6 53 3C 46 B4 53 +F8 47 1E 48 05 0D 0A 6B 6F 20 D6 47 8C 47 32 4B +3C 46 B6 53 A6 53 84 5B 49 46 5D 00 0E 93 3E 4F +BE 27 30 4D 26 54 89 5B 44 45 46 49 4E 45 44 5D +87 12 42 4B 80 48 EE 48 6A 44 2A 44 36 54 8B 5B +55 4E 44 45 46 49 4E 45 44 5D 87 12 42 4B 80 48 +EE 48 6A 44 00 45 2A 44 6A 54 3D 41 B2 4E 0E 18 +A2 4E 0C 18 3E 4F 30 40 5A 51 4C 50 06 4D 41 52 +4B 45 52 00 B0 12 B8 4D BA 40 84 12 FC FF BA 40 +68 54 FE FF 9A 42 C8 1D 00 00 28 83 8A 48 02 00 +A2 52 C6 1D 30 40 00 4E 1C 15 B0 12 2A 44 80 48 +EE 48 4A 46 BE 54 AA 49 40 46 CE 4C D8 54 C0 54 +39 4E 39 80 86 12 08 24 19 53 02 20 2E 4E 04 3C +2E 53 19 53 01 24 2E 82 1B 17 30 41 32 B0 00 02 +01 24 3E 4F 30 41 3E 40 28 00 B0 12 A8 54 B0 12 +DC 54 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 +29 00 1C 15 12 12 C4 1D 92 53 C4 1D B0 12 2A 44 +80 48 AA 49 40 46 24 55 1A 55 21 53 3E 90 10 00 +81 2D DA 2B 26 55 B2 41 C4 1D D6 3F 87 12 42 4B +74 48 34 55 0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E +3E 4F 7A 90 23 00 29 20 92 53 C4 1D B0 12 A8 54 +B0 12 DC 54 3C 40 00 03 0E 93 1C 24 3C 40 10 03 +1E 93 18 24 3C 40 20 03 2E 93 14 24 3C 40 20 02 +2E 92 10 24 3C 40 30 02 3E 92 0C 24 3C 40 30 03 +3E 93 08 24 3C 40 30 00 19 42 C6 1D A2 53 C6 1D +89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 09 20 +3C 40 10 02 92 53 C4 1D B0 12 A8 54 B0 12 DC 54 +EB 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 C4 1D +B0 12 02 55 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 +02 55 92 92 C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 +0C 5E D8 3F B0 12 02 55 FA 23 3C 50 10 00 B0 12 +E6 54 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 +42 4B 74 48 06 56 FE 90 26 00 00 00 3E 40 20 00 +03 20 3C 50 82 00 C6 3F B0 12 02 55 E1 23 3C 50 +80 00 B0 12 E6 54 DC 3F D6 46 04 52 45 54 49 00 +87 12 14 48 00 13 B0 4A 2A 44 14 48 2C 00 2C 55 +FE 55 44 56 09 4B 2E 4E 0E DC A2 3F 00 4F 03 4D +4F 56 84 12 3A 56 00 40 4E 56 05 4D 4F 56 2E 42 +84 12 3A 56 40 40 00 00 03 41 44 44 84 12 3A 56 +00 50 68 56 05 41 44 44 2E 42 84 12 3A 56 40 50 +74 56 04 41 44 44 43 00 84 12 3A 56 00 60 82 56 +06 41 44 44 43 2E 42 00 84 12 3A 56 40 60 2A 56 +04 53 55 42 43 00 84 12 3A 56 00 70 A0 56 06 53 +55 42 43 2E 42 00 84 12 3A 56 40 70 AE 56 03 53 +55 42 84 12 3A 56 00 80 BE 56 05 53 55 42 2E 42 +84 12 3A 56 40 80 E2 4E 03 43 4D 50 84 12 3A 56 +00 90 D8 56 05 43 4D 50 2E 42 84 12 3A 56 40 90 +D0 4E 04 44 41 44 44 00 84 12 3A 56 00 A0 F2 56 +06 44 41 44 44 2E 42 00 84 12 3A 56 40 A0 E4 56 +03 42 49 54 84 12 3A 56 00 B0 10 57 05 42 49 54 +2E 42 84 12 3A 56 40 B0 1C 57 03 42 49 43 84 12 +3A 56 00 C0 2A 57 05 42 49 43 2E 42 84 12 3A 56 +40 C0 36 57 03 42 49 53 84 12 3A 56 00 D0 44 57 +05 42 49 53 2E 42 84 12 3A 56 40 D0 00 00 03 58 +4F 52 84 12 3A 56 00 E0 5E 57 05 58 4F 52 2E 42 +84 12 3A 56 40 E0 90 56 03 41 4E 44 84 12 3A 56 +00 F0 78 57 05 41 4E 44 2E 42 84 12 3A 56 40 F0 +42 4B 2C 55 96 57 0A 4C 3C F0 70 00 8A 10 3A F0 +0F 00 0C DA 4F 3F CA 56 03 52 52 43 84 12 90 57 +00 10 A8 57 05 52 52 43 2E 42 84 12 90 57 40 10 +B4 57 04 53 57 50 42 00 84 12 90 57 80 10 C2 57 +03 52 52 41 84 12 90 57 00 11 D0 57 05 52 52 41 +2E 42 84 12 90 57 40 11 DC 57 03 53 58 54 84 12 +90 57 80 11 00 00 04 50 55 53 48 00 84 12 90 57 +00 12 F6 57 06 50 55 53 48 2E 42 00 84 12 90 57 +40 12 50 57 04 43 41 4C 4C 00 84 12 90 57 80 12 +1A 53 0E 4A 87 12 34 46 1E 48 0D 6F 75 74 20 6F +66 20 62 6F 75 6E 64 73 4C 4C 42 4B 74 48 40 58 +92 53 C4 1D 3E 40 2C 00 B0 12 2A 44 80 48 AA 49 +40 46 CE 4C F4 55 58 58 0A 4E 3E 4F 1A 83 E0 33 +29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A +38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 +5A 06 8F 3F EA 57 06 52 52 43 4D 2E 41 00 84 12 +3A 58 40 00 86 58 04 52 52 43 4D 00 84 12 3A 58 +50 00 96 58 06 52 52 41 4D 2E 41 00 84 12 3A 58 +40 01 A4 58 04 52 52 41 4D 00 84 12 3A 58 50 01 +B4 58 06 52 4C 41 4D 2E 41 00 84 12 3A 58 40 02 +C2 58 04 52 4C 41 4D 00 84 12 3A 58 50 02 D2 58 +06 52 52 55 4D 2E 41 00 84 12 3A 58 40 03 E0 58 +04 52 52 55 4D 00 84 12 3A 58 50 03 04 58 07 50 +55 53 48 4D 2E 41 84 12 3A 58 00 14 FE 58 05 50 +55 53 48 4D 84 12 3A 58 00 15 0E 59 06 50 4F 50 +4D 2E 41 00 84 12 3A 58 00 16 1C 59 04 50 4F 50 +4D 00 84 12 3A 58 00 17 F0 58 03 53 3E 3D 85 12 +00 38 3A 59 02 53 3C 00 85 12 00 34 2C 59 03 30 +3E 3D 85 12 00 30 4E 59 02 30 3C 00 85 12 00 30 +00 00 02 55 3C 00 85 12 00 2C 62 59 03 55 3E 3D +85 12 00 28 58 59 03 30 3C 3E 85 12 00 24 76 59 +02 30 3D 00 85 12 00 20 00 00 02 49 46 00 1A 42 +C6 1D 8A 4E 00 00 A2 53 C6 1D 0E 4A 30 4D 6C 59 +04 54 48 45 4E 00 1A 42 C6 1D 08 4E 3E 4F 09 48 +29 53 0A 89 0A 11 3A 90 00 02 33 2F 88 DA 00 00 +30 4D 00 57 04 45 4C 53 45 00 1A 42 C6 1D BA 40 +00 3C 00 00 A2 53 C6 1D 2F 83 8F 4A 00 00 E3 3F +A0 59 05 55 4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 +C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE 12 3B 3A F0 +FF 03 08 DA 89 48 00 00 A2 53 C6 1D 30 4D 84 57 +05 41 47 41 49 4E 0A 4E 38 40 00 3C E7 3F 00 00 +05 57 48 49 4C 45 87 12 8E 59 76 44 2A 44 44 59 +06 52 45 50 45 41 54 00 87 12 16 5A A6 59 2A 44 +42 5A 3D 41 08 4E 3E 4F 2A 48 B2 92 C4 1D CD 2F +98 42 C6 1D 00 00 30 4D 14 58 03 42 57 31 84 12 +40 5A 00 00 5A 5A 03 42 57 32 84 12 40 5A 00 00 +66 5A 03 42 57 33 84 12 40 5A 00 00 7E 5A 3D 41 +1A 42 C6 1D 28 4E B2 92 C4 1D 90 2B BA 4F 00 00 +A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 +57 31 84 12 7C 5A 00 00 9E 5A 03 46 57 32 84 12 +7C 5A 00 00 AA 5A 03 46 57 33 84 12 7C 5A 00 00 +00 00 05 3F 47 4F 54 4F 3E 90 00 30 07 24 3E E0 +00 04 3E B0 00 10 02 24 3E E0 00 08 87 12 C0 4C +DA 4A 2A 44 B6 5A 04 47 4F 54 4F 00 2F 83 8F 4E +00 00 3E 40 00 3C F2 3F 87 12 42 4B 74 48 00 5B +69 4E 3E 4F 3C 4F 2C 4C 1B 42 C6 1D A2 53 C6 1D +79 90 52 00 0A 20 B0 12 02 55 5E 0E 5E 0E 0E DC +8B 4E 00 00 0E 4B 3D 41 30 4D 79 90 23 00 0D 20 +3C C0 40 00 92 53 C4 1D A2 53 C6 1D B0 12 A8 54 +BB 4F 02 00 3E F0 0F 00 E8 3F 79 90 26 00 03 20 +3C E0 E0 00 EF 3F 3C C0 F0 00 79 90 40 00 12 20 +92 53 C4 1D B0 12 02 55 D8 23 3C D0 10 00 3E 40 +2B 00 B0 12 02 55 92 92 C0 1D C4 1D CE 27 92 53 +C4 1D CB 3F 3C D0 30 00 A2 53 C6 1D 3E 40 28 00 +B0 12 A8 54 BB 4F 02 00 3E 40 29 00 EA 3F 87 12 +42 4B 74 48 A6 5B 3B 4F 2C 4B 69 4E 7E 40 20 00 +79 90 52 00 03 20 B0 12 02 55 B1 3F 3C C0 F0 00 +A2 53 C6 1D 79 90 26 00 09 20 3C D0 60 00 92 53 +C4 1D B0 12 A8 54 BB 4F 02 00 A1 3F 3C D0 70 00 +3E 40 28 00 B0 12 A8 54 BB 4F 02 00 3E 40 29 00 +E2 3F 14 48 2C 00 F8 5A 9E 5B 66 44 2A 44 5A 56 +04 4D 4F 56 41 00 84 12 F2 5B C0 00 72 5A 04 43 +4D 50 41 00 84 12 F2 5B D0 00 10 5A 04 41 44 44 +41 00 84 12 F2 5B E0 00 30 5A 04 53 55 42 41 00 +84 12 F2 5B F0 00 0E 5C 05 43 41 4C 4C 41 87 12 +42 4B 74 48 46 5C 1B 42 C6 1D A2 53 C6 1D 6E 4E +3C 40 34 01 7E 90 52 00 0B 20 7E 40 20 00 B0 12 +02 55 5C 0E 0C DE 8B 4C 00 00 3E 4F 3D 41 30 4D +2C 53 7E 90 40 00 0B 20 92 53 C4 1D 7E 40 20 00 +B0 12 02 55 EE 23 1C 53 3E 40 2B 00 E8 3F A2 53 +C6 1D 7E 90 23 00 09 20 3C 40 3B 01 92 53 C4 1D +B0 12 A8 54 BB 4F 02 00 DC 3F 7E 90 26 00 02 20 +2C 53 F4 3F 7E 40 28 00 1C 83 B0 12 A8 54 BB 4F +02 00 3E 40 29 00 CB 3F 87 12 42 4B 74 48 D0 5C +69 4E 3E 4F 3C 40 00 18 79 90 52 00 05 20 B0 12 +02 55 0E 4C 3D 41 30 4D 82 43 5C 61 79 90 23 00 +0B 20 92 53 C4 1D B0 12 A8 54 2F 53 3E F0 0F 00 +5E 0A 5E 0E 0C DE ED 3F 79 90 26 00 F2 27 79 90 +40 00 12 20 92 53 C4 1D B0 12 02 55 E2 23 3E 40 +2B 00 92 53 C4 1D B0 12 02 55 92 92 C0 1D C4 1D +D8 27 92 53 C4 1D D5 3F 3E 40 28 00 B0 12 A8 54 +8F 4E 00 00 3E 40 29 00 B0 12 02 55 3E 4F 3E F0 +0F 00 0C DE EA 3F 87 12 42 4B 74 48 5E 5D 3C 4F +69 4E 3E 40 20 00 79 90 52 00 BB 27 82 43 5C 61 +79 90 26 00 08 20 92 53 C4 1D B0 12 A8 54 2F 53 +3E F0 0F 00 BF 3F 3E 40 28 00 B0 12 A8 54 F7 3F +1B 42 C6 1D A2 53 C6 1D 0C 4E 3E 4F 1C D2 5C 61 +82 43 5C 61 3C DE 8B 4C 00 00 B2 41 C4 1D 30 4D +14 48 C4 1D EA 44 86 44 14 48 2C 00 C8 5C 56 5D +90 5D 3C 46 3A 56 00 5C 04 4D 4F 56 58 00 84 12 +B0 5D 40 00 00 40 C8 5D 06 4D 4F 56 58 2E 41 00 +84 12 B0 5D 00 00 40 40 D8 5D 06 4D 4F 56 58 2E +42 00 84 12 B0 5D 40 00 40 40 1C 5C 04 41 44 44 +58 00 84 12 B0 5D 40 00 00 50 FC 5D 06 41 44 44 +58 2E 41 00 84 12 B0 5D 00 00 40 50 0C 5E 06 41 +44 44 58 2E 42 00 84 12 B0 5D 40 00 40 50 1E 5E +05 41 44 44 43 58 84 12 B0 5D 40 00 00 60 30 5E +07 41 44 44 43 58 2E 41 84 12 B0 5D 00 00 40 60 +40 5E 07 41 44 44 43 58 2E 42 84 12 B0 5D 40 00 +40 60 2A 5C 05 53 55 42 43 58 84 12 B0 5D 40 00 +00 70 64 5E 07 53 55 42 43 58 2E 41 84 12 B0 5D +00 00 40 70 74 5E 07 53 55 42 43 58 2E 42 84 12 +B0 5D 40 00 40 70 86 5E 04 53 55 42 58 00 84 12 +B0 5D 40 00 00 80 98 5E 06 53 55 42 58 2E 41 00 +84 12 B0 5D 00 00 40 80 A8 5E 06 53 55 42 58 2E +42 00 84 12 B0 5D 40 00 40 80 38 5C 04 43 4D 50 +58 00 84 12 B0 5D 40 00 00 90 CC 5E 06 43 4D 50 +58 2E 41 00 84 12 B0 5D 00 00 40 90 DC 5E 06 43 +4D 50 58 2E 42 00 84 12 B0 5D 40 00 40 90 C4 59 +05 44 41 44 44 58 84 12 B0 5D 40 00 00 A0 00 5F +07 44 41 44 44 58 2E 41 84 12 B0 5D 00 00 40 A0 +10 5F 07 44 41 44 44 58 2E 42 84 12 B0 5D 40 00 +40 A0 EE 5E 04 42 49 54 58 00 84 12 B0 5D 40 00 +00 B0 34 5F 06 42 49 54 58 2E 41 00 84 12 B0 5D +00 00 40 B0 44 5F 06 42 49 54 58 2E 42 00 84 12 +B0 5D 40 00 40 B0 56 5F 04 42 49 43 58 00 84 12 +B0 5D 40 00 00 C0 68 5F 06 42 49 43 58 2E 41 00 +84 12 B0 5D 00 00 40 C0 78 5F 06 42 49 43 58 2E +42 00 84 12 B0 5D 40 00 40 C0 8A 5F 04 42 49 53 +58 00 84 12 B0 5D 40 00 00 D0 9C 5F 06 42 49 53 +58 2E 41 00 84 12 B0 5D 00 00 40 D0 AC 5F 06 42 +49 53 58 2E 42 00 84 12 B0 5D 40 00 40 D0 6A 57 +04 58 4F 52 58 00 84 12 B0 5D 40 00 00 E0 D0 5F +06 58 4F 52 58 2E 41 00 84 12 B0 5D 00 00 40 E0 +E0 5F 06 58 4F 52 58 2E 42 00 84 12 B0 5D 40 00 +40 E0 52 5E 04 41 4E 44 58 00 84 12 B0 5D 40 00 +00 F0 04 60 06 41 4E 44 58 2E 41 00 84 12 B0 5D +00 00 40 F0 14 60 06 41 4E 44 58 2E 42 00 84 12 +B0 5D 40 00 40 F0 14 48 C4 1D EA 44 86 44 42 4B +C8 5C 90 5D 3C 46 90 57 BA 5E 04 52 52 43 58 00 +84 12 36 60 40 00 00 10 4A 60 06 52 52 43 58 2E +41 00 84 12 36 60 00 00 40 10 5A 60 06 52 52 43 +58 2E 42 00 84 12 36 60 40 00 40 10 6C 60 04 52 +52 55 58 00 84 12 36 60 40 01 00 10 7E 60 06 52 +52 55 58 2E 41 00 84 12 36 60 00 01 40 10 8E 60 +06 52 52 55 58 2E 42 00 84 12 36 60 40 01 40 10 +A0 60 05 53 57 50 42 58 84 12 36 60 40 00 80 10 +B2 60 07 53 57 50 42 58 2E 41 84 12 36 60 00 00 +80 10 C2 60 04 52 52 41 58 00 84 12 36 60 40 00 +00 11 D4 60 06 52 52 41 58 2E 41 00 84 12 36 60 +00 00 40 11 E4 60 06 52 52 41 58 2E 42 00 84 12 +36 60 40 00 40 11 F6 60 04 53 58 54 58 00 84 12 +36 60 40 00 80 11 08 61 06 53 58 54 58 2E 41 00 +84 12 36 60 00 00 80 11 80 59 05 50 55 53 48 58 +84 12 36 60 40 00 00 12 2A 61 07 50 55 53 48 58 +2E 41 84 12 36 60 00 00 40 12 3A 61 07 50 55 53 +48 58 2E 42 84 12 36 60 40 00 40 12 00 00 18 61 +03 52 50 54 87 12 42 4B 74 48 6C 61 29 4E 7E 40 +20 00 79 90 52 00 06 20 B0 12 02 55 03 24 3E D0 +80 00 05 3C B0 12 A8 54 1E 83 3E F0 0F 00 82 4E +5C 61 3E 4F 3D 41 30 4D @FFFE -F0 55 +A2 52 q diff --git a/binaries/MSP_EXP430FR6989_4MHz.txt b/binaries/MSP_EXP430FR6989_4MHz.txt deleted file mode 100644 index 2dc8393..0000000 --- a/binaries/MSP_EXP430FR6989_4MHz.txt +++ /dev/null @@ -1,526 +0,0 @@ -@1800 -10 00 02 00 21 BB A0 0F 05 00 18 00 6C 64 98 52 -2C 01 7F B0 00 48 12 48 -@4400 -2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 -8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 44 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 44 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 44 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 44 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 44 02 3E 52 00 -0E 12 3E 4F 30 4D 96 44 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 44 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 44 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 44 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 45 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 44 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 45 02 31 2D 00 -1E 83 30 4D D8 44 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 45 -02 30 3D 00 1E 83 0E 7E 30 4D 60 45 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 45 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 44 01 3E 3E 8F F4 3B EB 37 0E 45 02 42 4C 00 -85 12 20 00 AC 45 04 42 41 53 45 00 85 12 DC 1D -C8 44 05 53 54 41 54 45 85 12 BE 1D 96 45 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 45 06 55 4D 2F -4D 4F 44 00 30 12 62 44 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 44 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 45 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 45 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 46 -02 23 53 00 87 12 32 46 6A 46 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 46 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 45 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 45 -02 44 2E 00 87 12 D2 45 44 44 B0 44 4C 45 64 46 -BC 44 A2 46 7E 46 22 49 EA 48 2A 44 DC 45 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 44 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 46 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 44 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 46 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 46 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 46 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 45 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 47 03 4B 45 59 30 40 A0 47 -18 42 EC 05 2F 83 8F 4E 00 00 B0 12 00 48 92 B3 -FC 05 FD 27 1E 42 EC 05 B0 12 12 48 30 4D 00 47 -06 41 43 43 45 50 54 00 30 40 CC 47 3C 40 6E 48 -3B 40 38 48 2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 -3C 40 20 00 3D 40 62 48 92 B3 FC 05 05 24 18 42 -EC 05 38 90 0A 00 04 20 21 53 39 40 26 48 4D 15 -A2 B3 FC 05 FD 27 B2 40 11 00 EE 05 D2 C3 22 02 -30 41 B2 40 13 00 EE 05 D2 D3 22 02 30 41 00 00 -05 53 4C 45 45 50 30 40 2A 48 12 D2 0A 18 FB 3F -21 52 3A 17 58 42 EC 05 48 9C 08 2C 48 9B E9 27 -78 92 11 20 2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 -CE 48 00 00 1E 53 A2 B3 FC 05 FD 27 82 48 EE 05 -30 4D 64 48 2D 83 92 B3 FC 05 E4 23 FC 27 82 93 -DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 -0A 18 30 4D B0 46 04 45 4D 49 54 00 30 40 90 48 -08 4E 3E 4F E0 3F 10 47 03 43 49 42 85 12 3C 1D -3F 80 06 00 8F 4E 04 00 3E 40 54 00 9F 42 9E 48 -00 00 AF 4F 02 00 88 3F 86 48 04 45 43 48 4F 00 -B2 40 82 48 5C 48 82 43 DE 1D 30 4D E0 46 06 4E -4F 45 43 48 4F 00 B2 40 30 4D 5C 48 92 43 DE 1D -30 4D 9C 46 05 53 50 41 43 45 2F 83 8F 4E 00 00 -3E 40 20 00 CB 3F E4 48 06 53 50 41 43 45 53 00 -0E 93 09 24 0D 12 3D 40 0C 49 EF 3F 0E 49 2D 83 -1E 83 EB 23 3D 41 3E 4F 30 4D 66 47 04 54 59 50 -45 00 0E 93 0F 24 1E 15 3D 40 38 49 28 4F 7E 48 -8F 48 00 00 2F 83 AA 3F 3A 49 2D 83 91 83 02 00 -F5 23 1D 17 2F 53 3E 4F 30 4D 98 48 02 43 52 00 -30 40 54 49 87 12 60 49 02 0D 0A 00 22 49 2A 44 -2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 -0D 63 30 4D F8 48 82 53 22 00 82 43 B4 1D 87 12 -34 44 60 49 D6 4B 34 44 22 00 C4 49 8E 49 3D 41 -B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D 3E 4F -92 B3 C6 1D A2 63 C6 1D 30 4D CE 48 82 2E 22 00 -87 12 7A 49 34 44 22 49 D6 4B 2A 44 00 00 04 57 -4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A 3A 5C -28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 60 00 -C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 -4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F -1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E CE 48 -00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 0C 4E -65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 1E 24 -58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E FE FF -0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C -FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 -0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C 00 00 -35 40 0E 44 34 40 00 44 30 4D A2 45 07 3E 4E 55 -4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D -6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 -7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 -82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 -09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 8F 48 -02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 2D 15 -3D 40 1E 4B 09 43 08 43 3F 82 8F 4E 06 00 0C 4E -7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 02 00 -E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 04 24 -3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F 20 4B -2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 7A 90 -F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 8F 49 -02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 79 90 -0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 09 9B -08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 45 2A 17 -E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A 4E 93 -2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 3F 50 -06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 BF 4F -00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 00 00 -9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 2F 53 -30 4D BA 48 07 45 58 45 43 55 54 45 0A 4E 3E 4F -00 4A 26 45 01 2C 1A 42 C6 1D A2 53 C6 1D 8A 4E -00 00 3E 4F 30 4D D4 4B 87 4C 49 54 45 52 41 4C -82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 -34 44 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 -00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 EB 3F -30 4D 4C 49 05 43 4F 55 4E 54 2F 83 1E 53 8F 4E -00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F C2 1D -3E 4F 82 43 C4 1D 30 4D 87 12 38 4C B0 45 C4 49 -52 4C 3D 40 5A 4C E2 22 5D 3E 5C 4C 0A 4E 3E 4F -3D 40 72 4C 39 27 3D 40 4C 4C 1A E2 BE 1D B3 27 -AD 23 74 4C 3E 4F 3D 40 4C 4C BA 23 DE 53 00 00 -68 4E 08 5E F8 40 3F 00 00 00 3D 40 3E 4F CD 3F -C4 4B 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D -3C 49 3B 49 3A 49 3D 15 B0 12 2A 44 48 4C B0 4C -B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D -6C 45 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C -B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 50 49 -A0 48 EA 48 48 4C DE 44 70 45 60 49 0C 73 74 61 -63 6B 20 65 6D 70 74 79 21 00 3C 4D 34 44 30 FF -F2 46 8A 45 60 49 0A 46 52 41 4D 20 66 75 6C 6C -21 00 3C 4D 24 47 DE 4C C0 47 05 41 42 4F 52 54 -3F 40 80 1C D1 3F 1A 4D 86 41 42 4F 52 54 22 00 -87 12 7A 49 34 44 3C 4D D6 4B 2A 44 8F 93 02 00 -03 20 2F 52 3E 4F 30 4D B0 12 FE 54 B0 12 00 48 -92 C3 FC 05 38 40 A8 2A 39 42 09 59 03 43 19 83 -FD 23 18 83 F9 23 92 B3 FC 05 F2 23 87 12 78 54 -34 44 DE 1D F2 44 C0 48 60 49 04 1B 5B 37 6D 00 -22 49 54 44 28 47 98 4D 50 49 60 49 05 6C 69 6E -65 3A 22 49 40 45 D2 46 22 49 60 49 04 1B 5B 30 -6D 00 22 49 20 4D 00 00 83 5B 27 5D 87 12 BE 4D -34 44 34 44 D6 4B D6 4B 2A 44 16 4A 01 27 87 12 -B0 45 C4 49 1C 4A 28 47 CC 4D 2A 44 7C 4C CE 45 -81 5C 92 42 C0 1D C4 1D 30 4D A8 4D 81 5B 82 43 -BE 1D 30 4D D0 4D 01 5D B2 43 BE 1D 30 4D BE 4F -02 00 3E 4F 30 4D 72 47 82 49 53 00 87 12 C8 45 -F2 44 28 47 10 4E AC 4D 34 44 EE 4D D6 4B 2A 44 -BE 4D EE 4D 2A 44 F8 4D 09 49 4D 4D 45 44 49 41 -54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D 76 49 -87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D -00 00 A2 53 C6 1D 30 4D C2 4C 88 50 4F 53 54 50 -4F 4E 45 00 87 12 B0 45 C4 49 1C 4A 54 44 28 47 -CC 4D 70 45 28 47 74 4E 34 44 34 44 D6 4B D6 4B -34 44 D6 4B D6 4B 2A 44 DC 4D 81 3B 82 93 BE 1D -A8 27 87 12 34 44 2A 44 D6 4B 12 4F DE 4D 2A 44 -7A 4E 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 -1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 -FE 4E BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D -82 4F BC 1D 30 4D 92 4E 01 3A 30 12 B2 4E 87 12 -A0 49 B0 45 C4 49 D8 4E 3D 41 08 4E 7A 4E 5A D3 -5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E -3E 4F BA 40 30 40 00 00 BA 40 C4 4E 02 00 82 48 -B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D -30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D -A8 49 FE FF 89 48 00 00 30 4D 87 12 60 49 0F 73 -74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 48 4D -BE 49 08 56 41 52 49 41 42 4C 45 00 B0 12 CE 4E -BA 40 86 12 FC FF E4 3F 24 4C 08 43 4F 4E 53 54 -41 4E 54 00 B0 12 CE 4E BA 40 85 12 FC FF 8A 4E -FE FF 3E 4F D5 3F 5A 4F 06 43 52 45 41 54 45 00 -B0 12 CE 4E BA 40 85 12 FC FF 8A 4A FE FF C8 3F -92 4C 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 -00 00 8A 4D 02 00 3D 41 30 4D 92 4F 05 44 45 46 -45 52 30 12 20 4F 8B 3F 7C 4A 05 3E 42 4F 44 59 -2E 52 30 4D 78 4F 04 43 4F 44 45 00 B0 12 CE 4E -2A 82 82 4A C6 1D 87 12 C0 4E A2 52 74 52 2A 44 -C6 4F 07 43 4F 44 45 4E 4E 4D 87 12 9A 4E DE 4D -D0 4F 2A 44 00 00 07 45 4E 44 43 4F 44 45 87 12 -BC 52 12 4F 2A 44 28 4D 03 41 53 4D 92 42 DA 1D -EC 1D B2 40 78 52 DA 1D D9 3F F6 4F 06 45 4E 44 -41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 -4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 -C6 1D B2 43 BE 1D 30 40 BC 52 00 00 05 4C 4F 32 -48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 44 -02 00 A2 52 C6 1D ED 3F 18 4E 85 48 49 32 4C 4F -87 12 F2 46 9A 50 D6 4B DE 4D A2 52 74 52 2A 44 -6A 50 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D -A2 52 C6 1D BE 40 28 47 00 00 2E 53 30 4D AC 4F -84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 -24 47 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 1C 49 -84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D -E2 4F 85 42 45 47 49 4E 30 40 F2 46 C0 50 85 55 -4E 54 49 4C 39 40 28 47 A2 52 C6 1D 1A 42 C6 1D -8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D 08 50 85 41 -47 41 49 4E 39 40 24 47 EF 3F 42 4F 85 57 48 49 -4C 45 87 12 86 50 78 44 2A 44 30 4E 86 52 45 50 -45 41 54 00 87 12 04 51 C6 50 2A 44 A0 50 82 44 -4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D -BE 40 3C 47 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 -00 00 30 4D E8 4B 84 4C 4F 4F 50 00 39 40 5E 47 -A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF -1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A -00 00 F6 3F 3E 4F 30 4D 98 47 85 2B 4C 4F 4F 50 -39 40 4C 47 E5 3F 56 51 85 4C 45 41 56 45 1A 42 -C6 1D BA 40 6E 47 00 00 BA 40 24 47 02 00 B2 50 -06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A -00 00 30 4D 98 51 04 4D 4F 56 45 00 0A 4E 38 4F -39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 -00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 -18 83 E8 49 00 00 1A 83 FA 23 30 4D 0C 51 0A 56 -4F 43 41 42 55 4C 41 52 59 00 87 12 80 4F 34 44 -10 00 34 44 00 00 3C 47 34 44 00 00 D6 4B 5E 47 -18 52 F2 46 34 44 C8 1D 44 44 F2 44 D6 4B FA 44 -98 4F 34 44 CA 1D FA 44 2A 44 BC 4D 05 46 4F 52 -54 48 84 12 32 52 9C 52 DE 55 DA 52 3C 52 82 50 -8A 51 06 54 CC 52 9C 54 0C 57 DE 50 4E 55 00 00 -DA 53 E6 4D BA 4F 00 00 FE 50 09 41 53 53 45 4D -42 4C 45 52 84 12 32 52 FE 62 96 62 FA 61 8C 5D -34 5C B0 5D C2 60 00 00 24 64 36 64 8C 5C CA 5C -CA 62 00 00 00 00 BE 5D 66 52 6A 52 04 41 4C 53 -4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F -4A 4E 08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 -39 40 CC 1D 38 40 CA 1D 8A 3F AC 49 04 4F 4E 4C -59 00 82 43 CC 1D 30 4D 2E 51 0B 44 45 46 49 4E -49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D D2 50 -07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F -0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 -F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D -C8 4E 86 5B 54 48 45 4E 5D 00 30 4D 22 53 86 5B -45 4C 53 45 5D 00 87 12 34 44 00 00 36 45 B0 45 -C4 49 2A 4C 44 44 28 47 9C 53 8A 44 8A 44 60 49 -06 5B 54 48 45 4E 5D 00 F8 52 32 47 6A 53 44 49 -40 45 54 44 32 47 3E 53 2A 44 8A 44 8A 44 60 49 -06 5B 45 4C 53 45 5D 00 F8 52 32 47 8A 53 44 49 -40 45 54 44 32 47 3C 53 2A 44 60 49 04 5B 49 46 -5D 00 F8 52 32 47 3E 53 24 47 3C 53 44 49 60 49 -05 0D 0A 6B 6F 20 22 49 A0 48 38 4C 24 47 3E 53 -2E 53 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D -B2 53 89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 45 -C4 49 1C 4A 6C 44 2A 44 C2 53 8B 5B 55 4E 44 45 -46 49 4E 45 44 5D 87 12 B0 45 C4 49 1C 4A 6C 44 -64 45 2A 44 F6 53 3D 41 B2 4E 0E 18 A2 4E 0C 18 -3E 4F 44 3C C6 51 06 4D 41 52 4B 45 52 00 B0 12 -CE 4E BA 40 84 12 FC FF BA 40 F4 53 FE FF 9A 42 -C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 -18 4F 42 52 D2 52 E6 52 3A 54 3A 4E 82 4A C8 1D -2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 -18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 -2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D B2 52 09 50 -57 52 5F 53 54 41 54 45 84 12 32 54 98 52 6C 64 -1C 51 09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 -7C 54 92 42 0C 18 7E 54 EF 3F 6E 54 08 50 57 52 -5F 48 45 52 45 00 92 42 C8 1D 7C 54 92 42 C6 1D -7E 54 30 4D 82 54 08 52 53 54 5F 48 45 52 45 00 -92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F FE 51 -04 57 49 50 45 00 39 40 10 00 29 83 B9 43 80 FF -FC 23 B2 40 2A 48 28 48 B2 40 58 55 56 55 B2 40 -98 52 0E 18 B2 40 6C 64 0C 18 30 12 8C 54 B2 40 -90 48 8E 48 B2 40 54 49 52 49 B2 40 A0 47 9E 47 -B2 40 CC 47 CA 47 B2 40 3C 1D 9E 48 B2 40 18 00 -0A 18 37 40 1A 44 36 40 BC 44 35 40 0E 44 34 40 -00 44 39 40 10 00 29 83 89 43 E0 1D FC 23 B2 40 -0A 00 DC 1D B2 40 20 00 B4 1D 30 41 D0 54 04 57 -41 52 4D 00 30 40 58 55 3D 40 8E 55 92 C3 30 01 -1E 42 08 18 0E 93 12 24 F2 B0 10 00 20 02 02 20 -3E E3 1E 53 F2 D0 30 00 2A 02 3E 90 0A 00 AB 27 -3E 90 16 00 A8 2F 2E 93 77 27 80 2F 30 4D 60 49 -06 0D 1B 5B 37 6D 23 00 22 49 E2 46 60 49 1F 46 -61 73 74 46 6F 72 74 68 20 56 33 30 30 20 28 43 -29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 22 49 -34 44 80 FF F2 46 28 45 D2 46 60 49 0B 62 79 74 -65 73 20 66 72 65 65 20 24 47 98 4D F0 52 04 43 -4F 4C 44 00 92 B3 EA 05 FD 23 B2 40 04 A5 20 01 -B2 40 88 5A 5C 01 92 43 04 02 B2 40 FE FF 02 02 -A2 83 06 02 B2 43 26 02 B2 43 22 02 D2 D3 24 02 -B2 43 42 02 B2 43 46 02 B2 43 62 02 B2 43 66 02 -B2 40 80 00 84 02 B2 40 7F FF 82 02 B2 40 7F FF -86 02 F2 43 22 03 F2 43 26 03 F2 40 A5 00 61 01 -B2 40 06 00 62 01 82 43 66 01 39 40 40 00 B2 40 -33 00 64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 -59 14 18 83 FE 23 19 83 FA 23 B2 42 B0 01 F2 D0 -10 00 2A 03 F2 C0 40 00 A2 04 39 40 00 08 29 83 -89 43 00 1C FC 23 39 40 3A 00 29 83 B9 40 F0 55 -C6 FF FB 23 B2 40 30 48 E4 FF B2 40 81 00 E0 05 -92 42 02 18 E6 05 92 42 04 18 E8 05 92 C3 E0 05 -92 D3 FA 05 3F 40 80 1C 31 40 E0 1C 30 12 54 55 -2D 3F 38 40 C0 1D 39 48 2A 48 09 5A 1A 52 C4 1D -09 9A 03 24 7E 9A FC 27 1A 83 0E 4A 2A 88 82 4A -C4 1D 30 4D B6 54 09 32 43 4F 4E 53 54 41 4E 54 -87 12 80 4F D6 4B D6 4B 98 4F FC 56 2F 83 9F 4E -02 00 00 00 2E 4E 3D 41 30 4D E6 56 09 32 56 41 -52 49 41 42 4C 45 87 12 80 4F 34 44 04 00 06 47 -98 4F 2A 44 1C 15 B0 12 2A 44 C4 49 1C 4A 32 47 -3A 57 D8 4A 28 47 CC 4D 72 57 3C 57 29 4E 39 90 -86 12 02 20 2E 53 15 3C 39 90 85 12 03 20 1E 4E -02 00 0F 3C 39 90 84 12 0C 20 2E 52 B9 90 FA 56 -02 00 04 24 B9 90 22 57 02 00 03 20 B0 12 FC 56 -72 57 1B 17 30 41 32 B0 00 02 01 24 3E 4F 30 41 -3E 40 28 00 B0 12 24 57 B0 12 76 57 19 42 C6 1D -A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 12 12 -C4 1D 92 53 C4 1D B0 12 2A 44 C4 49 D8 4A 28 47 -BE 57 B4 57 21 53 3E 90 10 00 87 2D DA 2B C0 57 -B2 41 C4 1D D6 3F 87 12 B0 45 C2 56 CE 57 0C 43 -1B 42 C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 23 00 -2F 20 92 53 C4 1D B0 12 24 57 B0 12 76 57 0E 93 -03 20 3C 40 00 03 21 3C 1E 93 03 20 3C 40 10 03 -1C 3C 2E 93 03 20 3C 40 20 03 17 3C 2E 92 03 20 -3C 40 20 02 12 3C 3E 92 03 20 3C 40 30 02 0D 3C -3E 93 03 20 3C 40 30 03 08 3C 3C 40 30 00 19 42 -C6 1D A2 53 C6 1D 89 4E 00 00 3E 4F 3D 41 30 4D -7A 90 26 00 09 20 3C 40 10 02 92 53 C4 1D B0 12 -24 57 B0 12 76 57 EB 3F 7A 90 40 00 16 20 3C 40 -20 00 92 53 C4 1D B0 12 9C 57 0C 20 3C 50 10 00 -3E 40 2B 00 B0 12 9C 57 92 92 C0 1D C4 1D 02 24 -92 53 C4 1D 8E 10 0C 5E D8 3F B0 12 9C 57 FA 23 -3C 50 10 00 B0 12 80 57 EF 3F 0C 43 1B 42 C6 1D -A2 53 C6 1D 87 12 B0 45 C2 56 AC 58 FE 90 26 00 -00 00 3E 40 20 00 03 20 3C 50 82 00 C6 3F B0 12 -9C 57 E1 23 3C 50 80 00 B0 12 80 57 DC 3F 20 48 -04 52 45 54 49 00 87 12 34 44 00 13 D6 4B 2A 44 -34 44 2C 00 C6 57 A4 58 EA 58 2E 4E 0E DC 09 4B -A2 3F 4C 50 03 4D 4F 56 84 12 E0 58 00 40 F4 58 -05 4D 4F 56 2E 42 84 12 E0 58 40 40 00 00 03 41 -44 44 84 12 E0 58 00 50 0E 59 05 41 44 44 2E 42 -84 12 E0 58 40 50 1A 59 04 41 44 44 43 00 84 12 -E0 58 00 60 28 59 06 41 44 44 43 2E 42 00 84 12 -E0 58 40 60 D0 58 04 53 55 42 43 00 84 12 E0 58 -00 70 46 59 06 53 55 42 43 2E 42 00 84 12 E0 58 -40 70 54 59 03 53 55 42 84 12 E0 58 00 80 64 59 -05 53 55 42 2E 42 84 12 E0 58 40 80 2E 50 03 43 -4D 50 84 12 E0 58 00 90 7E 59 05 43 4D 50 2E 42 -84 12 E0 58 40 90 1C 50 04 44 41 44 44 00 84 12 -E0 58 00 A0 98 59 06 44 41 44 44 2E 42 00 84 12 -E0 58 40 A0 8A 59 03 42 49 54 84 12 E0 58 00 B0 -B6 59 05 42 49 54 2E 42 84 12 E0 58 40 B0 C2 59 -03 42 49 43 84 12 E0 58 00 C0 D0 59 05 42 49 43 -2E 42 84 12 E0 58 40 C0 DC 59 03 42 49 53 84 12 -E0 58 00 D0 EA 59 05 42 49 53 2E 42 84 12 E0 58 -40 D0 00 00 03 58 4F 52 84 12 E0 58 00 E0 04 5A -05 58 4F 52 2E 42 84 12 E0 58 40 E0 36 59 03 41 -4E 44 84 12 E0 58 00 F0 1E 5A 05 41 4E 44 2E 42 -84 12 E0 58 40 F0 B0 45 C6 57 3C 5A 0A 4C 3C F0 -70 00 8A 10 3A F0 0F 00 0C DA 4F 3F 70 59 03 52 -52 43 84 12 36 5A 00 10 4E 5A 05 52 52 43 2E 42 -84 12 36 5A 40 10 5A 5A 04 53 57 50 42 00 84 12 -36 5A 80 10 68 5A 03 52 52 41 84 12 36 5A 00 11 -76 5A 05 52 52 41 2E 42 84 12 36 5A 40 11 82 5A -03 53 58 54 84 12 36 5A 80 11 00 00 04 50 55 53 -48 00 84 12 36 5A 00 12 9C 5A 06 50 55 53 48 2E -42 00 84 12 36 5A 40 12 F6 59 04 43 41 4C 4C 00 -84 12 36 5A 80 12 1A 53 0E 4A 87 12 E2 46 60 49 -0D 6F 75 74 20 6F 66 20 62 6F 75 6E 64 73 48 4D -B0 45 C2 56 E6 5A 92 53 C4 1D 3E 40 2C 00 B0 12 -2A 44 C4 49 D8 4A 28 47 CC 4D 9A 58 FE 5A 0A 4E -3E 4F 1A 83 E0 33 29 4E 59 0E 0A 28 08 4C 59 0A -01 28 0C 8A 08 8A 38 90 10 00 D5 2F 5A 0E 94 3F -2A 92 D1 2F 8A 10 5A 06 8F 3F 90 5A 06 52 52 43 -4D 2E 41 00 84 12 E0 5A 40 00 2C 5B 04 52 52 43 -4D 00 84 12 E0 5A 50 00 3C 5B 06 52 52 41 4D 2E -41 00 84 12 E0 5A 40 01 4A 5B 04 52 52 41 4D 00 -84 12 E0 5A 50 01 5A 5B 06 52 4C 41 4D 2E 41 00 -84 12 E0 5A 40 02 68 5B 04 52 4C 41 4D 00 84 12 -E0 5A 50 02 78 5B 06 52 52 55 4D 2E 41 00 84 12 -E0 5A 40 03 86 5B 04 52 52 55 4D 00 84 12 E0 5A -50 03 AA 5A 07 50 55 53 48 4D 2E 41 84 12 E0 5A -00 14 A4 5B 05 50 55 53 48 4D 84 12 E0 5A 00 15 -B4 5B 06 50 4F 50 4D 2E 41 00 84 12 E0 5A 00 16 -C2 5B 04 50 4F 50 4D 00 84 12 E0 5A 00 17 85 12 -00 3C 96 5B 03 53 3E 3D 85 12 00 38 E4 5B 02 53 -3C 00 85 12 00 34 D2 5B 03 30 3E 3D 85 12 00 30 -F8 5B 02 30 3C 00 85 12 00 30 00 00 02 55 3C 00 -85 12 00 2C 0C 5C 03 55 3E 3D 85 12 00 28 02 5C -03 30 3C 3E 85 12 00 24 20 5C 02 30 3D 00 85 12 -00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E 00 00 -A2 53 C6 1D 0E 4A 30 4D 16 5C 04 54 48 45 4E 00 -1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 0A 11 -3A 90 00 02 31 2F 88 DA 00 00 30 4D A6 59 04 45 -4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 A2 53 -C6 1D 2F 83 8F 4A 00 00 E3 3F 4A 5C 05 55 4E 54 -49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 0A 89 -0A 11 3A 90 00 FE 10 3B 3A F0 FF 03 08 DA 89 48 -00 00 A2 53 C6 1D 30 4D 2A 5A 05 41 47 41 49 4E -87 12 DE 5B 92 5C 2A 44 00 00 05 57 48 49 4C 45 -87 12 38 5C 78 44 2A 44 EE 5B 06 52 45 50 45 41 -54 00 87 12 DE 5B 92 5C 50 5C 2A 44 EE 5C 3D 41 -2E 4E 08 4E 3E 4F 2A 48 0A 93 88 43 00 00 CA 23 -98 42 C6 1D 00 00 30 4D BA 5A 03 42 57 31 84 12 -EC 5C E0 1D 0A 5D 03 42 57 32 84 12 EC 5C E2 1D -16 5D 03 42 57 33 84 12 EC 5C E4 1D 2E 5D 3D 41 -1A 42 C6 1D 2E 4E 28 4E 08 93 8E 43 00 00 8B 23 -BA 4F 00 00 A2 53 C6 1D 8E 4A 00 00 3E 4F 30 4D -00 00 03 46 57 31 84 12 2C 5D E6 1D 52 5D 03 46 -57 32 84 12 2C 5D E8 1D 5E 5D 03 46 57 33 84 12 -2C 5D EA 1D 3E 90 00 30 07 24 3E E0 00 04 3E B0 -00 10 02 24 3E E0 00 08 30 4D 6A 5D 04 47 4F 54 -4F 00 87 12 DE 5B BE 4D CC 4B 2A 44 00 00 05 3F -47 4F 54 4F 87 12 74 5D BE 4D CC 4B 2A 44 00 00 -03 4A 4D 50 87 12 BE 4D C0 5C 2A 44 9E 5D 04 3F -4A 4D 50 00 87 12 74 5D BE 4D 78 44 92 5C 2A 44 -87 12 B0 45 C2 56 D8 5D 69 4E 3E 4F 3C 4F 2C 4C -1B 42 C6 1D A2 53 C6 1D 79 90 52 00 0A 20 B0 12 -9C 57 5E 0E 5E 0E 0E DC 8B 4E 00 00 0E 4B 3D 41 -30 4D 79 90 23 00 0D 20 3C C0 40 00 92 53 C4 1D -A2 53 C6 1D B0 12 24 57 BB 4F 02 00 3E F0 0F 00 -E8 3F 79 90 26 00 03 20 3C E0 E0 00 EF 3F 3C C0 -F0 00 79 90 40 00 12 20 92 53 C4 1D B0 12 9C 57 -D8 23 3C D0 10 00 3E 40 2B 00 B0 12 9C 57 92 92 -C0 1D C4 1D CE 27 92 53 C4 1D CB 3F 3C D0 30 00 -A2 53 C6 1D 3E 40 28 00 B0 12 24 57 BB 4F 02 00 -3E 40 29 00 EA 3F 87 12 B0 45 C2 56 7E 5E 3B 4F -2C 4B 69 4E 7E 40 20 00 79 90 52 00 03 20 B0 12 -9C 57 B1 3F 3C C0 F0 00 A2 53 C6 1D 79 90 26 00 -09 20 3C D0 60 00 92 53 C4 1D B0 12 24 57 BB 4F -02 00 A1 3F 3C D0 70 00 3E 40 28 00 B0 12 24 57 -BB 4F 02 00 3E 40 29 00 E2 3F 34 44 2C 00 D0 5D -76 5E 62 44 2A 44 00 59 04 4D 4F 56 41 00 84 12 -CA 5E C0 00 22 5D 04 43 4D 50 41 00 84 12 CA 5E -D0 00 BA 5C 04 41 44 44 41 00 84 12 CA 5E E0 00 -DA 5C 04 53 55 42 41 00 84 12 CA 5E F0 00 E6 5E -05 43 41 4C 4C 41 87 12 B0 45 C2 56 1E 5F 1B 42 -C6 1D A2 53 C6 1D 6E 4E 3C 40 34 01 7E 90 52 00 -0B 20 7E 40 20 00 B0 12 9C 57 5C 0E 0C DE 8B 4C -00 00 3E 4F 3D 41 30 4D 2C 53 7E 90 40 00 0B 20 -92 53 C4 1D 7E 40 20 00 B0 12 9C 57 EE 23 1C 53 -3E 40 2B 00 E8 3F A2 53 C6 1D 7E 90 23 00 09 20 -3C 40 3B 01 92 53 C4 1D B0 12 24 57 BB 4F 02 00 -DC 3F 7E 90 26 00 02 20 2C 53 F4 3F 7E 40 28 00 -1C 83 B0 12 24 57 BB 4F 02 00 3E 40 29 00 CB 3F -87 12 B0 45 C2 56 A8 5F 69 4E 3E 4F 3C 40 00 18 -79 90 52 00 05 20 B0 12 9C 57 0E 4C 3D 41 30 4D -82 43 EE 1D 79 90 23 00 0B 20 92 53 C4 1D B0 12 -24 57 2F 53 3E F0 0F 00 5E 0A 5E 0E 0C DE ED 3F -79 90 26 00 F2 27 79 90 40 00 12 20 92 53 C4 1D -B0 12 9C 57 E2 23 3E 40 2B 00 92 53 C4 1D B0 12 -9C 57 92 92 C0 1D C4 1D D8 27 92 53 C4 1D D5 3F -3E 40 28 00 B0 12 24 57 8F 4E 00 00 3E 40 29 00 -B0 12 9C 57 3E 4F 3E F0 0F 00 0C DE EA 3F 87 12 -B0 45 C2 56 36 60 3C 4F 69 4E 3E 40 20 00 79 90 -52 00 BB 27 82 43 EE 1D 79 90 26 00 08 20 92 53 -C4 1D B0 12 24 57 2F 53 3E F0 0F 00 BF 3F 3E 40 -28 00 B0 12 24 57 F7 3F 1B 42 C6 1D A2 53 C6 1D -0C 4E 3E 4F 1C D2 EE 1D 82 43 EE 1D 3C DE 8B 4C -00 00 B2 41 C4 1D 30 4D 34 44 C4 1D F2 44 B0 44 -34 44 2C 00 A0 5F 2E 60 68 60 24 47 E0 58 D8 5E -04 4D 4F 56 58 00 84 12 88 60 40 00 00 40 A0 60 -06 4D 4F 56 58 2E 41 00 84 12 88 60 00 00 40 40 -B0 60 06 4D 4F 56 58 2E 42 00 84 12 88 60 40 00 -40 40 F4 5E 04 41 44 44 58 00 84 12 88 60 40 00 -00 50 D4 60 06 41 44 44 58 2E 41 00 84 12 88 60 -00 00 40 50 E4 60 06 41 44 44 58 2E 42 00 84 12 -88 60 40 00 40 50 F6 60 05 41 44 44 43 58 84 12 -88 60 40 00 00 60 08 61 07 41 44 44 43 58 2E 41 -84 12 88 60 00 00 40 60 18 61 07 41 44 44 43 58 -2E 42 84 12 88 60 40 00 40 60 02 5F 05 53 55 42 -43 58 84 12 88 60 40 00 00 70 3C 61 07 53 55 42 -43 58 2E 41 84 12 88 60 00 00 40 70 4C 61 07 53 -55 42 43 58 2E 42 84 12 88 60 40 00 40 70 5E 61 -04 53 55 42 58 00 84 12 88 60 40 00 00 80 70 61 -06 53 55 42 58 2E 41 00 84 12 88 60 00 00 40 80 -80 61 06 53 55 42 58 2E 42 00 84 12 88 60 40 00 -40 80 10 5F 04 43 4D 50 58 00 84 12 88 60 40 00 -00 90 A4 61 06 43 4D 50 58 2E 41 00 84 12 88 60 -00 00 40 90 B4 61 06 43 4D 50 58 2E 42 00 84 12 -88 60 40 00 40 90 6E 5C 05 44 41 44 44 58 84 12 -88 60 40 00 00 A0 D8 61 07 44 41 44 44 58 2E 41 -84 12 88 60 00 00 40 A0 E8 61 07 44 41 44 44 58 -2E 42 84 12 88 60 40 00 40 A0 C6 61 04 42 49 54 -58 00 84 12 88 60 40 00 00 B0 0C 62 06 42 49 54 -58 2E 41 00 84 12 88 60 00 00 40 B0 1C 62 06 42 -49 54 58 2E 42 00 84 12 88 60 40 00 40 B0 2E 62 -04 42 49 43 58 00 84 12 88 60 40 00 00 C0 40 62 -06 42 49 43 58 2E 41 00 84 12 88 60 00 00 40 C0 -50 62 06 42 49 43 58 2E 42 00 84 12 88 60 40 00 -40 C0 62 62 04 42 49 53 58 00 84 12 88 60 40 00 -00 D0 74 62 06 42 49 53 58 2E 41 00 84 12 88 60 -00 00 40 D0 84 62 06 42 49 53 58 2E 42 00 84 12 -88 60 40 00 40 D0 10 5A 04 58 4F 52 58 00 84 12 -88 60 40 00 00 E0 A8 62 06 58 4F 52 58 2E 41 00 -84 12 88 60 00 00 40 E0 B8 62 06 58 4F 52 58 2E -42 00 84 12 88 60 40 00 40 E0 2A 61 04 41 4E 44 -58 00 84 12 88 60 40 00 00 F0 DC 62 06 41 4E 44 -58 2E 41 00 84 12 88 60 00 00 40 F0 EC 62 06 41 -4E 44 58 2E 42 00 84 12 88 60 40 00 40 F0 34 44 -C4 1D F2 44 B0 44 B0 45 A0 5F 68 60 24 47 36 5A -92 61 04 52 52 43 58 00 84 12 0E 63 40 00 00 10 -22 63 06 52 52 43 58 2E 41 00 84 12 0E 63 00 00 -40 10 32 63 06 52 52 43 58 2E 42 00 84 12 0E 63 -40 00 40 10 44 63 04 52 52 55 58 00 84 12 0E 63 -40 01 00 10 56 63 06 52 52 55 58 2E 41 00 84 12 -0E 63 00 01 40 10 66 63 06 52 52 55 58 2E 42 00 -84 12 0E 63 40 01 40 10 78 63 05 53 57 50 42 58 -84 12 0E 63 40 00 80 10 8A 63 07 53 57 50 42 58 -2E 41 84 12 0E 63 00 00 80 10 9A 63 04 52 52 41 -58 00 84 12 0E 63 40 00 00 11 AC 63 06 52 52 41 -58 2E 41 00 84 12 0E 63 00 00 40 11 BC 63 06 52 -52 41 58 2E 42 00 84 12 0E 63 40 00 40 11 CE 63 -04 53 58 54 58 00 84 12 0E 63 40 00 80 11 E0 63 -06 53 58 54 58 2E 41 00 84 12 0E 63 00 00 80 11 -2A 5C 05 50 55 53 48 58 84 12 0E 63 40 00 00 12 -02 64 07 50 55 53 48 58 2E 41 84 12 0E 63 00 00 -40 12 12 64 07 50 55 53 48 58 2E 42 84 12 0E 63 -40 00 40 12 F0 63 03 52 50 54 87 12 B0 45 C2 56 -42 64 29 4E 7E 40 20 00 79 90 52 00 06 20 B0 12 -9C 57 03 24 3E D0 80 00 04 3C B0 12 24 57 3E F0 -0F 00 82 4E EE 1D 3E 4F 3D 41 30 4D -@FFFE -F0 55 -q diff --git a/binaries/MSP_EXP430FR6989_8MHz.txt b/binaries/MSP_EXP430FR6989_8MHz.txt index b8ac2bb..886891e 100644 --- a/binaries/MSP_EXP430FR6989_8MHz.txt +++ b/binaries/MSP_EXP430FR6989_8MHz.txt @@ -1,526 +1,481 @@ @1800 -10 00 04 00 51 55 40 1F 05 00 18 00 66 64 98 52 -2C 01 7F B0 00 48 12 48 +10 00 04 00 51 55 40 1F 05 00 18 00 94 61 D4 50 +2D 01 6F B0 B6 46 C8 46 @4400 2F 83 8F 4E 00 00 3E 41 0D 12 3D 4E 30 4D 2F 83 8F 4E 00 00 3E 41 2E 4E 30 4D 3A 41 0D 12 0D 4A -30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 00 00 -03 4C 49 54 2F 83 8F 4E 00 00 3E 4D 30 4D 24 44 -03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 3F -44 55 50 00 0E 93 F6 23 30 4D 40 44 04 44 52 4F -50 00 3E 4F 30 4D 00 00 03 4E 49 50 2F 53 30 4D -00 00 04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A -30 4D 68 44 04 4F 56 45 52 00 8F 4E FE FF 2E 4F -2F 83 30 4D 72 44 03 52 4F 54 2A 4F 8F 4E 00 00 -1E 4F 02 00 8F 4A 02 00 30 4D 4E 44 02 3E 52 00 -0E 12 3E 4F 30 4D 96 44 02 52 3E 00 2F 83 8F 4E -00 00 3E 41 30 4D B8 44 02 52 40 00 2F 83 8F 4E -00 00 2E 41 30 4D 5C 44 05 44 45 50 54 48 8F 4E -FE FF 3E 40 80 1C 0E 8F 0E 11 2F 83 30 4D 00 00 -01 40 2E 4E 30 4D F0 44 01 21 BE 4F 00 00 3E 4F -30 4D 00 00 02 43 40 00 6E 4E 30 4D 04 45 02 43 -21 00 FE 4F 00 00 1F 53 3E 4F 30 4D 00 00 01 2B -3E 5F 30 4D 30 44 01 2D 3E 8F 3E E3 1E 53 30 4D -00 00 02 31 2B 00 1E 53 30 4D 32 45 02 31 2D 00 -1E 83 30 4D D8 44 04 44 41 42 53 00 3E F3 06 34 -BF E3 00 00 3E E3 9F 53 00 00 0E 63 30 4D 3C 45 -02 30 3D 00 1E 83 0E 7E 30 4D 60 45 02 30 3C 00 -0E 5E 0E 7E 3E E3 30 4D 00 00 01 3D 3E 8F 08 24 -0E 43 30 4D 00 00 02 55 3C 00 3A 4F 0A 8E F8 2F -3E 43 30 4D 7A 45 01 3C 3A 4F 0A 8E F9 3B F0 37 -AC 44 01 3E 3E 8F F4 3B EB 37 0E 45 02 42 4C 00 -85 12 20 00 AC 45 04 42 41 53 45 00 85 12 DC 1D -C8 44 05 53 54 41 54 45 85 12 BE 1D 96 45 02 3C -23 00 B2 40 B2 1D B2 1D 30 4D 86 45 06 55 4D 2F -4D 4F 44 00 30 12 62 44 0B 4E 1C 4F 02 00 2E 4F -0A 43 34 40 20 00 0E 93 04 20 04 11 0E 4C 0C 43 -09 43 0A 9B 01 28 0A 8B 09 69 08 68 14 83 07 30 -0C 5C 0E 6E 0A 6A F5 2B 0A 8B 12 D3 F5 3F 34 40 -00 44 8F 4A 02 00 8F 49 00 00 0E 48 30 41 B6 45 -01 23 1B 42 DC 1D 2C 4F 2F 83 B0 12 F0 45 BF 4F -00 00 7A 90 0A 00 02 28 7A 50 07 00 7A 50 30 00 -92 83 B2 1D 18 42 B2 1D C8 4A 00 00 30 4D 30 46 -02 23 53 00 87 12 32 46 6A 46 2D 83 09 93 E3 23 -0E 93 E1 23 3D 41 30 4D 60 46 02 23 3E 00 9F 42 -B2 1D 00 00 3E 40 B2 1D 2E 8F 30 4D 00 00 04 48 -4F 4C 44 00 0A 4E 3E 4F DB 3F C2 45 04 53 49 47 -4E 00 0E 93 3E 4F 3A 40 2D 00 D2 33 30 4D 46 45 -02 44 2E 00 87 12 D2 45 44 44 B0 44 4C 45 64 46 -BC 44 A2 46 7E 46 22 49 EA 48 2A 44 DC 45 02 55 -2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EB 3F 84 44 -01 2E 0E 93 F6 37 38 43 F5 3F 8E 46 04 48 45 52 -45 00 2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D F8 44 -05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D 7A 46 -02 43 2C 00 1A 42 C6 1D CA 4E 00 00 92 53 C6 1D -3E 4F 30 4D 2D 4D 30 4D 0E 93 3E 4F FB 27 2D 53 -30 4D 0E 93 3E 4F F6 23 2D 53 30 4D 39 40 00 80 -39 8F 08 4E 3E 4F 08 59 19 15 30 4D 81 5E 00 00 -3E 4F 32 B0 00 01 E6 27 2D 53 21 52 30 4D 91 53 -00 00 F7 3F CE 46 06 55 4E 4C 4F 4F 50 00 F5 3F -EC 46 01 49 2F 83 8F 4E 00 00 2E 41 1E 81 02 00 -30 4D 1E 45 01 4A 2F 83 8F 4E 00 00 1E 41 04 00 -1E 81 06 00 30 4D 84 47 03 4B 45 59 30 40 A0 47 -18 42 EC 05 2F 83 8F 4E 00 00 B0 12 00 48 92 B3 -FC 05 FD 27 1E 42 EC 05 B0 12 12 48 30 4D 00 47 -06 41 43 43 45 50 54 00 30 40 CC 47 3C 40 6E 48 -3B 40 38 48 2D 15 0A 4E 2E 4F 0A 5E 3B 40 0D 00 -3C 40 20 00 3D 40 62 48 92 B3 FC 05 05 24 18 42 -EC 05 38 90 0A 00 04 20 21 53 39 40 26 48 4D 15 -A2 B3 FC 05 FD 27 B2 40 11 00 EE 05 D2 C3 22 02 -30 41 B2 40 13 00 EE 05 D2 D3 22 02 30 41 00 00 -05 53 4C 45 45 50 30 40 2A 48 12 D2 0A 18 FB 3F -21 52 3A 17 58 42 EC 05 48 9C 08 2C 48 9B E9 27 -78 92 11 20 2E 9F 0F 24 1E 83 05 3C 0E 9A 03 24 -CE 48 00 00 1E 53 A2 B3 FC 05 FD 27 82 48 EE 05 -30 4D 64 48 2D 83 92 B3 FC 05 E4 23 FC 27 82 93 -DE 1D 02 24 92 53 DE 1D 3E 8F 3D 41 B2 40 18 00 -0A 18 30 4D B0 46 04 45 4D 49 54 00 30 40 90 48 -08 4E 3E 4F E0 3F 10 47 03 43 49 42 85 12 3C 1D -3F 80 06 00 8F 4E 04 00 3E 40 54 00 9F 42 9E 48 -00 00 AF 4F 02 00 88 3F 86 48 04 45 43 48 4F 00 -B2 40 82 48 5C 48 82 43 DE 1D 30 4D E0 46 06 4E -4F 45 43 48 4F 00 B2 40 30 4D 5C 48 92 43 DE 1D -30 4D 9C 46 05 53 50 41 43 45 2F 83 8F 4E 00 00 -3E 40 20 00 CB 3F E4 48 06 53 50 41 43 45 53 00 -0E 93 09 24 0D 12 3D 40 0C 49 EF 3F 0E 49 2D 83 -1E 83 EB 23 3D 41 3E 4F 30 4D 66 47 04 54 59 50 -45 00 0E 93 0F 24 1E 15 3D 40 38 49 28 4F 7E 48 -8F 48 00 00 2F 83 AA 3F 3A 49 2D 83 91 83 02 00 -F5 23 1D 17 2F 53 3E 4F 30 4D 98 48 02 43 52 00 -30 40 54 49 87 12 60 49 02 0D 0A 00 22 49 2A 44 -2F 82 8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 -0D 63 30 4D F8 48 82 53 22 00 82 43 B4 1D 87 12 -34 44 60 49 D6 4B 34 44 22 00 C4 49 8E 49 3D 41 -B2 40 20 00 B4 1D 6E 4E 1E 83 82 5E C6 1D 3E 4F -92 B3 C6 1D A2 63 C6 1D 30 4D CE 48 82 2E 22 00 -87 12 7A 49 34 44 22 49 D6 4B 2A 44 00 00 04 57 -4F 52 44 00 3C 40 C0 1D 39 4C 3A 4C 09 5A 3A 5C -28 4C 09 9A 19 24 7E 9A FC 27 1A 83 3B 40 60 00 -C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 18 53 -4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D F0 3F -1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E CE 48 -00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 0C 4E -65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 1E 24 -58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E FE FF -0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 0A 4C -FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 09 63 -0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C 00 00 -35 40 0E 44 34 40 00 44 30 4D A2 45 07 3E 4E 55 -4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 DC 1D -6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 07 00 -7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 D0 04 -82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 E6 04 -09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 8F 48 -02 00 8F 49 04 00 30 4D 1B 42 DC 1D 0C 43 2D 15 -3D 40 1E 4B 09 43 08 43 3F 82 8F 4E 06 00 0C 4E -7E 4C 6A 4C 7A 90 2D 00 04 28 CB 23 B1 43 02 00 -E1 3F 2B 43 7A 80 25 00 07 24 3B 52 6A 53 04 24 -3B 40 10 00 5A 83 BC 23 1C 53 1E 83 EA 3F 20 4B -2F 24 2D 83 7A 90 28 00 CD 27 32 D0 00 02 7A 90 -F7 00 C8 27 7A 90 F5 00 23 20 0A 4E 09 43 8F 49 -02 00 5A 83 09 4A 09 5C 69 49 79 80 30 00 79 90 -0A 00 05 28 79 80 07 00 79 90 0A 00 0A 28 09 9B -08 2C 8F 49 00 00 0E 4B 2C 15 B0 12 E8 45 2A 17 -E6 3F 9F 4F 04 00 02 00 AF 4F 04 00 0E 4A 4E 93 -2B 17 0E 4C 82 4B DC 1D 06 24 32 C0 00 02 3F 50 -06 00 0E F3 30 4D 2F 53 9F 4F 02 00 04 00 BF 4F -00 00 3E E3 09 20 3E E3 BF E3 02 00 BF E3 00 00 -9F 53 02 00 8F 63 00 00 32 B0 00 02 01 20 2F 53 -30 4D BA 48 07 45 58 45 43 55 54 45 0A 4E 3E 4F -00 4A 26 45 01 2C 1A 42 C6 1D A2 53 C6 1D 8A 4E -00 00 3E 4F 30 4D D4 4B 87 4C 49 54 45 52 41 4C -82 93 BE 1D 0C 24 1A 42 C6 1D A2 52 C6 1D BA 40 -34 44 00 00 8A 4E 02 00 3E 4F 32 B0 00 02 32 C0 -00 02 06 24 19 4A 02 00 8A 4E 02 00 0E 49 EB 3F -30 4D 4C 49 05 43 4F 55 4E 54 2F 83 1E 53 8F 4E -00 00 5E 4E FF FF 30 4D 82 4E C0 1D B2 4F C2 1D -3E 4F 82 43 C4 1D 30 4D 87 12 38 4C B0 45 C4 49 -52 4C 3D 40 5A 4C E2 22 5D 3E 5C 4C 0A 4E 3E 4F -3D 40 72 4C 39 27 3D 40 4C 4C 1A E2 BE 1D B3 27 -AD 23 74 4C 3E 4F 3D 40 4C 4C BA 23 DE 53 00 00 -68 4E 08 5E F8 40 3F 00 00 00 3D 40 3E 4F CD 3F -C4 4B 08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D -3C 49 3B 49 3A 49 3D 15 B0 12 2A 44 48 4C B0 4C -B2 41 C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D -6C 45 04 51 55 49 54 00 82 43 08 18 31 40 E0 1C -B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 50 49 -A0 48 EA 48 48 4C DE 44 70 45 60 49 0C 73 74 61 -63 6B 20 65 6D 70 74 79 21 00 3C 4D 34 44 30 FF -F2 46 8A 45 60 49 0A 46 52 41 4D 20 66 75 6C 6C -21 00 3C 4D 24 47 DE 4C C0 47 05 41 42 4F 52 54 -3F 40 80 1C D1 3F 1A 4D 86 41 42 4F 52 54 22 00 -87 12 7A 49 34 44 3C 4D D6 4B 2A 44 8F 93 02 00 -03 20 2F 52 3E 4F 30 4D B0 12 FE 54 B0 12 00 48 -92 C3 FC 05 38 40 50 55 39 42 09 59 03 43 19 83 -FD 23 18 83 F9 23 92 B3 FC 05 F2 23 87 12 78 54 -34 44 DE 1D F2 44 C0 48 60 49 04 1B 5B 37 6D 00 -22 49 54 44 28 47 98 4D 50 49 60 49 05 6C 69 6E -65 3A 22 49 40 45 D2 46 22 49 60 49 04 1B 5B 30 -6D 00 22 49 20 4D 00 00 83 5B 27 5D 87 12 BE 4D -34 44 34 44 D6 4B D6 4B 2A 44 16 4A 01 27 87 12 -B0 45 C4 49 1C 4A 28 47 CC 4D 2A 44 7C 4C CE 45 -81 5C 92 42 C0 1D C4 1D 30 4D A8 4D 81 5B 82 43 -BE 1D 30 4D D0 4D 01 5D B2 43 BE 1D 30 4D BE 4F -02 00 3E 4F 30 4D 72 47 82 49 53 00 87 12 C8 45 -F2 44 28 47 10 4E AC 4D 34 44 EE 4D D6 4B 2A 44 -BE 4D EE 4D 2A 44 F8 4D 09 49 4D 4D 45 44 49 41 -54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D 76 49 -87 52 45 43 55 52 53 45 19 42 C6 1D 99 42 BA 1D -00 00 A2 53 C6 1D 30 4D C2 4C 88 50 4F 53 54 50 -4F 4E 45 00 87 12 B0 45 C4 49 1C 4A 54 44 28 47 -CC 4D 70 45 28 47 74 4E 34 44 34 44 D6 4B D6 4B -34 44 D6 4B D6 4B 2A 44 DC 4D 81 3B 82 93 BE 1D -A8 27 87 12 34 44 2A 44 D6 4B 12 4F DE 4D 2A 44 -7A 4E 07 3A 4E 4F 4E 41 4D 45 2F 83 8F 4E 00 00 -1E 42 C6 1D 0A 4E 39 40 00 02 38 40 02 02 B0 12 -FE 4E BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D -82 4F BC 1D 30 4D 92 4E 01 3A 30 12 B2 4E 87 12 -A0 49 B0 45 C4 49 D8 4E 3D 41 08 4E 7A 4E 5A D3 +30 4D 00 00 04 45 58 49 54 00 3D 41 30 4D 24 44 +03 44 55 50 2F 83 8F 4E 00 00 30 4D 00 00 04 32 +44 55 50 00 8F 4E FE FF AF 4F FC FF 2F 82 30 4D +00 00 04 3F 44 55 50 00 0E 93 EC 23 30 4D 30 44 +04 44 52 4F 50 00 3E 4F 30 4D 2F 53 30 4D 3E 44 +04 53 57 41 50 00 2A 4F 8F 4E 00 00 0E 4A 30 4D +52 44 02 3E 52 00 0E 12 3E 4F 30 4D 70 44 02 52 +3E 00 2F 83 8F 4E 00 00 3E 41 30 4D 60 44 05 44 +45 50 54 48 8F 4E FE FF 3E 40 80 1C 0E 8F 0E 11 +2F 83 30 4D 00 00 01 2D 3E 8F 3E E3 1E 53 30 4D +00 00 02 31 2B 00 1E 53 30 4D C2 44 02 31 2D 00 +1E 83 30 4D 3E F3 06 34 BF E3 00 00 3E E3 9F 53 +00 00 0E 63 30 4D 00 00 01 40 2E 4E 30 4D E8 44 +01 21 BE 4F 00 00 3E 4F 30 4D CC 44 02 30 3D 00 +1E 83 0E 7E 30 4D FC 44 02 30 3C 00 0E 5E 0E 7E +3E E3 30 4D 00 00 01 3D 3E 8F FA 27 0E F3 30 4D +00 00 02 55 3C 00 3E 8F F9 2B 01 24 3E 43 30 4D +16 45 02 3C 23 00 B2 40 B2 1D B2 1D 30 4D 0B 4E +1C 4F 02 00 2E 4F 0A 43 34 40 20 00 0E 93 04 20 +04 11 0E 4C 0C 43 09 43 0A 9B 01 28 0A 8B 09 69 +08 68 14 83 07 30 0C 5C 0E 6E 0A 6A F5 2B 0A 8B +12 D3 F5 3F 34 40 00 44 8F 4A 02 00 8F 49 00 00 +0E 48 30 41 00 00 01 23 1B 42 DC 1D 2C 4F 2F 83 +B0 12 46 45 BF 4F 00 00 7A 90 0A 00 02 28 7A 50 +07 00 7A 50 30 00 92 83 B2 1D 18 42 B2 1D C8 4A +00 00 30 4D 86 45 02 23 53 00 87 12 88 45 C0 45 +2D 83 09 93 E3 23 0E 93 E1 23 3D 41 30 4D B6 45 +02 23 3E 00 9F 42 B2 1D 00 00 3E 40 B2 1D 2E 8F +30 4D 00 00 04 48 4F 4C 44 00 0A 4E 3E 4F DB 3F +8E 44 04 53 49 47 4E 00 0E 93 3E 4F 3A 40 2D 00 +D2 33 30 4D 87 12 36 45 34 44 86 44 D4 44 BA 45 +92 44 F8 45 D4 45 D6 47 42 4B 82 47 2A 44 22 45 +02 55 2E 00 08 43 2F 83 8F 4E 00 00 0E 48 EA 3F +00 00 01 2E 0E 93 F6 37 38 43 F5 3F 2D 4D 30 4D +0E 93 3E 4F FB 27 2D 53 30 4D 0E 93 3E 4F F6 23 +2D 53 30 4D 39 40 00 80 39 8F 08 4E 3E 4F 08 59 +19 15 30 4D 81 5E 00 00 3E 4F 32 B0 00 01 E6 27 +2D 53 21 52 30 4D 91 53 00 00 F7 3F E4 45 01 49 +2F 83 8F 4E 00 00 2E 41 1E 81 02 00 30 4D 00 00 +03 4B 45 59 30 40 98 46 18 42 EC 05 2F 83 8F 4E +00 00 B0 12 B6 46 92 B3 FC 05 FD 27 1E 42 EC 05 +B0 12 C8 46 30 4D A2 B3 FC 05 FD 27 B2 40 11 00 +EE 05 D2 C3 22 02 30 41 B2 40 13 00 EE 05 D2 D3 +22 02 30 41 00 00 05 53 4C 45 45 50 30 40 E0 46 +B0 12 B6 46 12 D2 0A 18 F9 3F F0 44 06 41 43 43 +45 50 54 00 3C 40 64 47 3B 40 2E 47 2D 15 0A 4E +2E 4F 0A 5E 3B 40 0D 00 3C 40 20 00 3D 40 58 47 +92 B3 FC 05 05 24 18 42 EC 05 38 90 0A 00 CB 23 +21 53 3D 15 DB 3F 21 52 3A 17 58 42 EC 05 48 9C +08 2C 48 9B C9 27 78 92 11 20 2E 9F 0F 24 1E 83 +05 3C 0E 9A 03 24 CE 48 00 00 1E 53 A2 B3 FC 05 +FD 27 82 48 EE 05 30 4D 5A 47 2D 83 92 B3 FC 05 +E4 23 FC 27 82 93 DE 1D 02 24 92 53 DE 1D 3E 8F +3D 41 B2 40 18 00 0A 18 30 4D 9E 44 04 45 4D 49 +54 00 30 40 86 47 08 4E 3E 4F E0 3F 3F 80 06 00 +8F 4E 04 00 3E 40 54 00 BF 40 3C 1D 00 00 AF 4F +02 00 A8 3F 7C 47 04 45 43 48 4F 00 B2 40 82 48 +52 47 82 43 DE 1D 30 4D 32 46 06 4E 4F 45 43 48 +4F 00 B2 40 30 4D 52 47 92 43 DE 1D 30 4D 20 46 +04 54 59 50 45 00 0E 93 0F 24 1E 15 3D 40 EC 47 +28 4F 7E 48 8F 48 00 00 2F 83 CB 3F EE 47 2D 83 +91 83 02 00 F5 23 1D 17 2F 53 3E 4F 30 4D D0 45 +02 43 52 00 30 40 08 48 87 12 1E 48 02 0D 0A 00 +D6 47 2A 44 2F 83 8F 4E 00 00 3E 4D 30 4D 2F 82 +8F 4E 02 00 7E 4D 8F 4D 00 00 0D 5E 1D B3 0D 63 +30 4D F2 45 82 53 22 00 82 43 B4 1D 87 12 14 48 +1E 48 B0 4A 14 48 22 00 80 48 4C 48 B2 40 20 00 +B4 1D 6E 4E 1E 53 1E B3 82 6E C6 1D 3D 41 3E 4F +30 4D BA 47 82 2E 22 00 87 12 38 48 14 48 D6 47 +B0 4A 2A 44 48 43 05 3C 00 00 04 57 4F 52 44 00 +48 4E 19 42 C0 1D 1A 42 C2 1D 09 5A 1A 52 C4 1D +09 9A 03 24 7E 9A FC 27 1A 83 4E F8 06 20 0E 4A +1A 82 C2 1D 82 4A C4 1D 30 4D 18 42 C6 1D 3B 40 +60 00 C8 4C 00 00 09 9A 0C 24 7C 4A 4E 9C 09 24 +18 53 4B 9C F6 2F 7C 90 7B 00 F3 2F 5C 82 B4 1D +F0 3F 1A 82 C2 1D 82 4A C4 1D 1E 42 C6 1D 08 8E +CE 48 00 00 30 4D 00 00 04 46 49 4E 44 00 2F 83 +0C 4E 65 4C 74 40 80 00 3B 40 CA 1D 3E 4B 0E 93 +1E 24 58 4C 01 00 78 F0 1E 00 0E 58 2E 53 1E 4E +FE FF 0E 93 F3 27 09 4E 78 49 48 C4 48 95 F7 23 +0A 4C FA 99 01 00 F3 23 1A 53 58 83 FA 23 19 B3 +09 63 0C 49 6A 4E 1E 43 4A 93 01 30 2E 83 8F 4C +00 00 35 40 0E 44 34 40 00 44 30 4D 82 44 07 3E +4E 55 4D 42 45 52 3C 4F 38 4F 29 4F 2F 82 1B 42 +DC 1D 6A 4C 7A 80 30 00 7A 90 0A 00 05 28 7A 80 +07 00 7A 90 0A 00 12 28 0A 9B 22 C3 0F 2C 82 49 +D0 04 82 48 D2 04 82 4B C8 04 19 42 E4 04 18 42 +E6 04 09 5A 08 63 1C 53 1E 83 E3 23 8F 4C 00 00 +8F 48 02 00 8F 49 04 00 30 4D 32 C0 00 02 1B 42 +DC 1D 0C 43 2D 15 3D 40 F4 49 09 43 08 43 3F 82 +8F 4E 06 00 0C 4E 7E 4C 6A 4C 7A 90 2D 00 04 28 +C9 23 B1 43 02 00 DF 3F 2B 43 7A 80 25 00 07 24 +3B 52 6A 53 04 24 3B 40 10 00 5A 83 BA 23 1C 53 +1E 83 EA 3F F6 49 2F 24 2D 83 7A 90 28 00 CB 27 +32 D0 00 02 7A 90 F7 00 C6 27 7A 90 F5 00 23 20 +0A 4E 09 43 8F 49 02 00 5A 83 09 4A 09 5C 69 49 +79 80 30 00 79 90 0A 00 05 28 79 80 07 00 79 90 +0A 00 0A 28 09 9B 08 2C 8F 49 00 00 0E 4B 2C 15 +B0 12 3E 45 2A 17 E6 3F 9F 4F 04 00 02 00 AF 4F +04 00 0E 4A 4E 93 2B 17 0E 4C 82 4B DC 1D 06 24 +32 C0 00 02 3F 50 06 00 0E F3 30 4D 2F 53 9F 4F +02 00 04 00 BF 4F 00 00 3E E3 09 20 3E E3 BF E3 +02 00 BF E3 00 00 9F 53 02 00 8F 63 00 00 32 B0 +00 02 01 20 2F 53 30 4D 7E 46 04 48 45 52 45 00 +2F 83 8F 4E 00 00 1E 42 C6 1D 30 4D B6 44 01 2C +1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 3E 4F 30 4D +EC 46 05 41 4C 4C 4F 54 82 5E C6 1D 3E 4F 30 4D +A6 47 07 45 58 45 43 55 54 45 0A 4E 3E 4F 00 4A +AE 4A 87 4C 49 54 45 52 41 4C 82 93 BE 1D 0C 24 +1A 42 C6 1D A2 52 C6 1D BA 40 14 48 00 00 8A 4E +02 00 3E 4F 32 B0 00 02 32 C0 00 02 06 24 19 4A +02 00 8A 4E 02 00 0E 49 EB 3F 30 4D 00 48 05 43 +4F 55 4E 54 2F 83 1E 53 8F 4E 00 00 5E 4E FF FF +30 4D 82 4E C0 1D B2 4F C2 1D 3E 4F 82 43 C4 1D +30 4D 85 12 20 00 87 12 32 4B 42 4B 80 48 50 4B +3D 40 58 4B CC 22 82 3E 5A 4B 0A 4E 3E 4F 3D 40 +70 4B 23 27 3D 40 4A 4B 1A E2 BE 1D A1 27 B5 23 +72 4B 3E 4F 3D 40 4A 4B B8 23 DE 53 00 00 68 4E +08 5E F8 40 3F 00 00 00 3D 40 26 4E CB 3F D2 4A +08 45 56 41 4C 55 41 54 45 00 39 40 C0 1D 3C 49 +3B 49 3A 49 3D 15 B0 12 2A 44 46 4B AE 4B B2 41 +C4 1D B2 41 C2 1D B2 41 C0 1D 3D 41 30 4D 85 12 +BE 1D 08 45 04 51 55 49 54 00 82 43 08 18 31 40 +E0 1C B2 40 00 1C 00 1C 82 43 BE 1D B0 12 2A 44 +04 48 8C 47 42 4B 82 47 46 4B A4 44 0C 45 1E 48 +0C 73 74 61 63 6B 20 65 6D 70 74 79 21 00 40 4C +14 48 30 FF A0 4A 26 45 1E 48 0A 46 52 41 4D 20 +66 75 6C 6C 21 00 40 4C 3C 46 E0 4B C2 4A 05 41 +42 4F 52 54 3F 40 80 1C D0 3F 1E 4C 86 41 42 4F +52 54 22 00 87 12 38 48 14 48 40 4C B0 4A 2A 44 +8F 93 02 00 03 20 2F 52 3E 4F 30 4D B0 12 CC 51 +B0 12 B6 46 92 C3 FC 05 38 40 50 55 39 42 03 43 +19 83 FD 23 18 83 FA 23 92 B3 FC 05 F3 23 87 12 +46 51 14 48 DE 1D EA 44 AC 47 1E 48 04 1B 5B 37 +6D 00 D6 47 58 44 40 46 9A 4C 04 48 1E 48 05 6C +69 6E 65 3A D6 47 D0 44 24 46 D6 47 1E 48 04 1B +5B 30 6D 00 D6 47 24 4C 00 00 83 5B 27 5D 87 12 +C0 4C 14 48 14 48 B0 4A B0 4A 2A 44 E8 48 01 27 +87 12 42 4B 80 48 EE 48 40 46 CE 4C 2A 44 7A 4B +32 45 81 5C 92 42 C0 1D C4 1D 30 4D AA 4C 81 5B +82 43 BE 1D 30 4D D2 4C 01 5D B2 43 BE 1D 30 4D +BE 4F 02 00 3E 4F 30 4D 9A 4A 82 49 53 00 87 12 +BE 4B EA 44 40 46 12 4D AE 4C 14 48 F0 4C B0 4A +2A 44 C0 4C F0 4C 2A 44 FA 4C 09 49 4D 4D 45 44 +49 41 54 45 1A 42 B6 1D FA D0 80 00 00 00 30 4D +C4 4B 88 50 4F 53 54 50 4F 4E 45 00 87 12 42 4B +80 48 EE 48 58 44 40 46 CE 4C 0C 45 40 46 5C 4D +14 48 14 48 B0 4A B0 4A 14 48 B0 4A B0 4A 2A 44 +DE 4C 81 3B 82 93 BE 1D B5 27 87 12 14 48 2A 44 +B0 4A FA 4D E0 4C 2A 44 62 4D 07 3A 4E 4F 4E 41 +4D 45 30 12 A0 4D 2F 83 8F 4E 00 00 1E 42 C6 1D +1E B3 0E 63 0A 4E 39 40 00 02 38 40 02 02 21 3C +BA 40 87 12 FC FF A2 83 C6 1D B2 43 BE 1D 30 4D +7A 4D 01 3A 30 12 A0 4D 92 B3 C6 1D A2 63 C6 1D +87 12 42 4B 80 48 C8 4D 3D 41 08 4E 7A 4E 5A D3 5A 53 0A 58 19 42 DA 1D 6E 4E 3E F0 1E 00 09 5E -3E 4F BA 40 30 40 00 00 BA 40 C4 4E 02 00 82 48 -B6 1D 82 49 B8 1D 82 4A BA 1D 2A 52 82 4A C6 1D -30 41 82 9F BC 1D 09 20 18 42 B6 1D 19 42 B8 1D -A8 49 FE FF 89 48 00 00 30 4D 87 12 60 49 0F 73 -74 61 63 6B 20 6D 69 73 6D 61 74 63 68 21 48 4D -BE 49 08 56 41 52 49 41 42 4C 45 00 B0 12 CE 4E -BA 40 86 12 FC FF E4 3F 24 4C 08 43 4F 4E 53 54 -41 4E 54 00 B0 12 CE 4E BA 40 85 12 FC FF 8A 4E -FE FF 3E 4F D5 3F 5A 4F 06 43 52 45 41 54 45 00 -B0 12 CE 4E BA 40 85 12 FC FF 8A 4A FE FF C8 3F -92 4C 05 44 4F 45 53 3E 1A 42 BA 1D BA 40 84 12 -00 00 8A 4D 02 00 3D 41 30 4D 92 4F 05 44 45 46 -45 52 30 12 20 4F 8B 3F 7C 4A 05 3E 42 4F 44 59 -2E 52 30 4D 78 4F 04 43 4F 44 45 00 B0 12 CE 4E -2A 82 82 4A C6 1D 87 12 C0 4E A2 52 74 52 2A 44 -C6 4F 07 43 4F 44 45 4E 4E 4D 87 12 9A 4E DE 4D -D0 4F 2A 44 00 00 07 45 4E 44 43 4F 44 45 87 12 -BC 52 12 4F 2A 44 28 4D 03 41 53 4D 92 42 DA 1D -EC 1D B2 40 78 52 DA 1D D9 3F F6 4F 06 45 4E 44 -41 53 4D 00 92 42 EC 1D DA 1D E9 3F 00 00 05 43 -4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 00 00 A2 53 -C6 1D B2 43 BE 1D 30 40 BC 52 00 00 05 4C 4F 32 -48 49 1A 42 C6 1D BA 40 B0 12 00 00 BA 40 2A 44 -02 00 A2 52 C6 1D ED 3F 18 4E 85 48 49 32 4C 4F -87 12 F2 46 9A 50 D6 4B DE 4D A2 52 74 52 2A 44 -6A 50 82 49 46 00 2F 83 8F 4E 00 00 1E 42 C6 1D -A2 52 C6 1D BE 40 28 47 00 00 2E 53 30 4D AC 4F -84 45 4C 53 45 00 A2 52 C6 1D 1A 42 C6 1D BA 40 -24 47 FC FF 8E 4A 00 00 2A 83 0E 4A 30 4D 1C 49 -84 54 48 45 4E 00 9E 42 C6 1D 00 00 3E 4F 30 4D -E2 4F 85 42 45 47 49 4E 30 40 F2 46 C0 50 85 55 -4E 54 49 4C 39 40 28 47 A2 52 C6 1D 1A 42 C6 1D -8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D 08 50 85 41 -47 41 49 4E 39 40 24 47 EF 3F 42 4F 85 57 48 49 -4C 45 87 12 86 50 78 44 2A 44 30 4E 86 52 45 50 -45 41 54 00 87 12 04 51 C6 50 2A 44 A0 50 82 44 -4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D 1E 42 C6 1D -BE 40 3C 47 FE FF A2 53 00 1C 1A 42 00 1C 8A 43 -00 00 30 4D E8 4B 84 4C 4F 4F 50 00 39 40 5E 47 -A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF -1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 03 24 8E 4A -00 00 F6 3F 3E 4F 30 4D 98 47 85 2B 4C 4F 4F 50 -39 40 4C 47 E5 3F 56 51 85 4C 45 41 56 45 1A 42 -C6 1D BA 40 6E 47 00 00 BA 40 24 47 02 00 B2 50 -06 00 C6 1D A2 53 00 1C 2A 52 19 42 00 1C 89 4A -00 00 30 4D 98 51 04 4D 4F 56 45 00 0A 4E 38 4F -39 4F 3E 4F 0A 93 11 24 08 99 0F 24 06 2C F8 49 -00 00 18 53 1A 83 FB 23 30 4D 08 5A 09 5A 19 83 -18 83 E8 49 00 00 1A 83 FA 23 30 4D 0C 51 0A 56 -4F 43 41 42 55 4C 41 52 59 00 87 12 80 4F 34 44 -10 00 34 44 00 00 3C 47 34 44 00 00 D6 4B 5E 47 -18 52 F2 46 34 44 C8 1D 44 44 F2 44 D6 4B FA 44 -98 4F 34 44 CA 1D FA 44 2A 44 BC 4D 05 46 4F 52 -54 48 84 12 32 52 9C 52 DE 55 DA 52 3C 52 82 50 -8A 51 06 54 CC 52 9C 54 06 57 DE 50 4E 55 00 00 -DA 53 E6 4D BA 4F 00 00 FE 50 09 41 53 53 45 4D -42 4C 45 52 84 12 32 52 F8 62 90 62 F4 61 86 5D -2E 5C AA 5D BC 60 00 00 1E 64 30 64 86 5C C4 5C -C4 62 00 00 00 00 B8 5D 66 52 6A 52 04 41 4C 53 -4F 00 3A 40 0C 00 39 40 CA 1D 38 40 CC 1D 9D 3F -4A 4E 08 50 52 45 56 49 4F 55 53 00 3A 40 0E 00 -39 40 CC 1D 38 40 CA 1D 8A 3F AC 49 04 4F 4E 4C -59 00 82 43 CC 1D 30 4D 2E 51 0B 44 45 46 49 4E -49 54 49 4F 4E 53 92 42 CA 1D DA 1D 30 4D D2 50 -07 43 4F 4D 50 41 52 45 0C 4E 38 4F 3B 4F 39 4F -0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 07 30 19 53 -F9 98 FF FF F5 27 02 2C 3E 43 30 4D 1E 43 30 4D -C8 4E 86 5B 54 48 45 4E 5D 00 30 4D 22 53 86 5B -45 4C 53 45 5D 00 87 12 34 44 00 00 36 45 B0 45 -C4 49 2A 4C 44 44 28 47 9C 53 8A 44 8A 44 60 49 -06 5B 54 48 45 4E 5D 00 F8 52 32 47 6A 53 44 49 -40 45 54 44 32 47 3E 53 2A 44 8A 44 8A 44 60 49 -06 5B 45 4C 53 45 5D 00 F8 52 32 47 8A 53 44 49 -40 45 54 44 32 47 3C 53 2A 44 60 49 04 5B 49 46 -5D 00 F8 52 32 47 3E 53 24 47 3C 53 44 49 60 49 -05 0D 0A 6B 6F 20 22 49 A0 48 38 4C 24 47 3E 53 -2E 53 84 5B 49 46 5D 00 0E 93 3E 4F BC 27 30 4D -B2 53 89 5B 44 45 46 49 4E 45 44 5D 87 12 B0 45 -C4 49 1C 4A 6C 44 2A 44 C2 53 8B 5B 55 4E 44 45 -46 49 4E 45 44 5D 87 12 B0 45 C4 49 1C 4A 6C 44 -64 45 2A 44 F6 53 3D 41 B2 4E 0E 18 A2 4E 0C 18 -3E 4F 44 3C C6 51 06 4D 41 52 4B 45 52 00 B0 12 -CE 4E BA 40 84 12 FC FF BA 40 F4 53 FE FF 9A 42 -C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D 30 40 -18 4F 42 52 D2 52 E6 52 3A 54 3A 4E 82 4A C8 1D -2E 4E 82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 -18 48 FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 -2A 4A 0A 93 F0 23 3E 4F 3D 41 30 4D B2 52 09 50 -57 52 5F 53 54 41 54 45 84 12 32 54 98 52 66 64 -1C 51 09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 -7C 54 92 42 0C 18 7E 54 EF 3F 6E 54 08 50 57 52 -5F 48 45 52 45 00 92 42 C8 1D 7C 54 92 42 C6 1D -7E 54 30 4D 82 54 08 52 53 54 5F 48 45 52 45 00 -92 42 C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F FE 51 -04 57 49 50 45 00 39 40 10 00 29 83 B9 43 80 FF -FC 23 B2 40 2A 48 28 48 B2 40 58 55 56 55 B2 40 -98 52 0E 18 B2 40 66 64 0C 18 30 12 8C 54 B2 40 -90 48 8E 48 B2 40 54 49 52 49 B2 40 A0 47 9E 47 -B2 40 CC 47 CA 47 B2 40 3C 1D 9E 48 B2 40 18 00 -0A 18 37 40 1A 44 36 40 BC 44 35 40 0E 44 34 40 -00 44 39 40 10 00 29 83 89 43 E0 1D FC 23 B2 40 -0A 00 DC 1D B2 40 20 00 B4 1D 30 41 D0 54 04 57 -41 52 4D 00 30 40 58 55 3D 40 8E 55 92 C3 30 01 -1E 42 08 18 0E 93 12 24 F2 B0 10 00 20 02 02 20 -3E E3 1E 53 F2 D0 30 00 2A 02 3E 90 0A 00 AB 27 -3E 90 16 00 A8 2F 2E 93 77 27 80 2F 30 4D 60 49 -06 0D 1B 5B 37 6D 23 00 22 49 E2 46 60 49 1F 46 -61 73 74 46 6F 72 74 68 20 56 33 30 30 20 28 43 -29 4A 2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 22 49 -34 44 80 FF F2 46 28 45 D2 46 60 49 0B 62 79 74 -65 73 20 66 72 65 65 20 24 47 98 4D F0 52 04 43 +3E 4F 82 48 B6 1D 82 49 B8 1D 82 4A BA 1D 82 4F +BC 1D 2A 52 82 4A C6 1D 30 41 82 9F BC 1D 09 20 +18 42 B6 1D 19 42 B8 1D A8 49 FE FF 89 48 00 00 +30 4D 87 12 1E 48 0F 73 74 61 63 6B 20 6D 69 73 +6D 61 74 63 68 21 4C 4C 90 4B 05 44 45 46 45 52 +B0 12 B8 4D BA 40 30 40 FC FF BA 40 AE 4D FE FF +E3 3F 1E 4B 06 43 52 45 41 54 45 00 B0 12 B8 4D +BA 40 85 12 FC FF 8A 4A FE FF D6 3F 2A 4E 05 44 +4F 45 53 3E 1A 42 BA 1D BA 40 84 12 00 00 8A 4D +02 00 3D 41 30 4D 4E 49 05 3E 42 4F 44 59 2E 52 +30 4D 44 4E 04 43 4F 44 45 00 B0 12 B8 4D 82 43 +58 61 A2 82 C6 1D 87 12 D6 50 B0 50 2A 44 84 4E +07 43 4F 44 45 4E 4E 4D B0 12 86 4D F0 3F 00 00 +07 45 4E 44 43 4F 44 45 87 12 E4 50 FA 4D 2A 44 +2C 4C 03 41 53 4D B2 40 B4 50 DA 1D DE 3F B0 4E +06 45 4E 44 41 53 4D 00 87 12 B8 4E F8 50 2A 44 +00 00 05 43 4F 4C 4F 4E 1A 42 C6 1D BA 40 87 12 +00 00 A2 53 C6 1D B2 43 BE 1D 30 40 E4 50 00 00 +05 4C 4F 32 48 49 1A 42 C6 1D BA 40 B0 12 00 00 +BA 40 2A 44 02 00 A2 52 C6 1D ED 3F 1A 4D 85 48 +49 32 4C 4F 87 12 A0 4A 4E 4F B0 4A E0 4C D6 50 +B0 50 2A 44 1E 4F 82 49 46 00 2F 83 8F 4E 00 00 +1E 42 C6 1D A2 52 C6 1D BE 40 40 46 00 00 2E 53 +30 4D 5E 4E 84 45 4C 53 45 00 A2 52 C6 1D 1A 42 +C6 1D BA 40 3C 46 FC FF 8E 4A 00 00 2A 83 0E 4A +30 4D D0 47 84 54 48 45 4E 00 9E 42 C6 1D 00 00 +3E 4F 30 4D A0 4E 85 42 45 47 49 4E 30 40 A0 4A +74 4F 85 55 4E 54 49 4C 39 40 40 46 A2 52 C6 1D +1A 42 C6 1D 8A 49 FC FF 8A 4E FE FF 3E 4F 30 4D +C2 4E 85 41 47 41 49 4E 39 40 3C 46 EF 3F 7A 48 +85 57 48 49 4C 45 87 12 3A 4F 76 44 2A 44 34 48 +86 52 45 50 45 41 54 00 87 12 B8 4F 7A 4F 2A 44 +54 4F 82 44 4F 00 2F 83 8F 4E 00 00 A2 53 C6 1D +1E 42 C6 1D BE 40 54 46 FE FF A2 53 00 1C 1A 42 +00 1C 8A 43 00 00 30 4D E2 4A 84 4C 4F 4F 50 00 +39 40 76 46 A2 52 C6 1D 1A 42 C6 1D 8A 49 FC FF +8A 4E FE FF 1E 42 00 1C A2 83 00 1C 2E 4E 0E 93 +03 24 8E 4A 00 00 F6 3F 3E 4F 30 4D 90 46 85 2B +4C 4F 4F 50 39 40 64 46 E5 3F 0A 50 04 4D 4F 56 +45 00 0A 4E 38 4F 39 4F 3E 4F 0A 93 11 24 08 99 +0F 24 06 2C F8 49 00 00 18 53 1A 83 FB 23 30 4D +08 5A 09 5A 19 83 18 83 E8 49 00 00 1A 83 FA 23 +30 4D 14 48 CA 1D F2 44 2A 44 84 12 82 50 B2 4F +64 53 E2 4F BE 4C 36 4F 3E 50 78 54 64 48 6A 51 +84 51 92 4F 04 52 00 00 4A 54 E8 4C 78 4E 00 00 +84 12 82 50 22 60 BA 5F 1E 5F E2 5A 86 59 00 00 +E6 5D 00 00 48 61 5C 61 DE 59 1C 5A EE 5F 00 00 +00 00 BE 5A AE 50 3A 40 0C 00 39 40 CA 1D 38 40 +CC 1D C6 3F 3A 40 0E 00 39 40 CC 1D 38 40 CA 1D +B9 3F 82 43 CC 1D 30 4D 92 42 CA 1D DA 1D 30 4D +8A 50 F2 50 F8 50 08 51 3A 4E 82 4A C8 1D 2E 4E +82 4E C6 1D 3D 40 10 00 09 4A 08 49 29 83 18 48 +FE FF 0E 98 FC 2B 89 48 00 00 1D 83 F6 23 2A 4A +0A 93 F0 23 3E 4F 3D 41 30 4D 32 4D 09 50 57 52 +5F 53 54 41 54 45 84 12 00 51 D4 50 94 61 D0 4F +09 52 53 54 5F 53 54 41 54 45 92 42 0E 18 4A 51 +92 42 0C 18 4C 51 EF 3F 3C 51 08 50 57 52 5F 48 +45 52 45 00 92 42 C8 1D 4A 51 92 42 C6 1D 4C 51 +30 4D 50 51 08 52 53 54 5F 48 45 52 45 00 92 42 +C8 1D 0E 18 92 42 C6 1D 0C 18 EC 3F C0 4F 04 57 +49 50 45 00 39 40 10 00 29 83 B9 43 80 FF FC 23 +B2 40 E0 46 DE 46 B2 40 0E 52 0C 52 B2 40 D4 50 +0E 18 B2 40 94 61 0C 18 30 12 5A 51 B2 40 86 47 +84 47 B2 40 08 48 06 48 B2 40 98 46 96 46 B2 40 +18 00 0A 18 37 40 1A 44 36 40 92 44 35 40 0E 44 +34 40 00 44 B2 40 0A 00 DC 1D B2 40 20 00 B4 1D +30 41 9E 51 04 57 41 52 4D 00 30 40 0E 52 3D 40 +44 52 92 C3 30 01 1E 42 08 18 0E 93 12 24 F2 B0 +10 00 20 02 02 20 3E E3 1E 53 F2 D0 30 00 2A 02 +3E 90 0A 00 B7 27 3E 90 16 00 B4 2F 2E 93 83 27 +8C 2F 30 4D 1E 48 06 0D 1B 5B 37 6D 23 00 D6 47 +34 46 1E 48 19 46 61 73 74 46 6F 72 74 68 20 C2 +A9 4A 2E 4D 2E 54 68 6F 6F 72 65 6E 73 20 D6 47 +14 48 30 FF A0 4A B8 44 24 46 1E 48 0A 62 79 74 +65 73 20 66 72 65 65 00 3C 46 9A 4C 86 4F 04 43 4F 4C 44 00 92 B3 EA 05 FD 23 B2 40 04 A5 20 01 -B2 40 88 5A 5C 01 92 43 04 02 B2 40 FE FF 02 02 -A2 83 06 02 B2 43 26 02 B2 43 22 02 D2 D3 24 02 -B2 43 42 02 B2 43 46 02 B2 43 62 02 B2 43 66 02 -B2 40 80 00 84 02 B2 40 7F FF 82 02 B2 40 7F FF -86 02 F2 43 22 03 F2 43 26 03 F2 40 A5 00 61 01 -82 43 66 01 39 40 80 00 B2 40 33 00 64 01 D2 43 -61 01 92 D2 9E 01 08 18 38 40 59 14 18 83 FE 23 -19 83 FA 23 B2 42 B0 01 F2 D0 10 00 2A 03 F2 C0 -40 00 A2 04 39 40 00 08 29 83 89 43 00 1C FC 23 -39 40 3A 00 29 83 B9 40 F0 55 C6 FF FB 23 B2 40 -30 48 E4 FF B2 40 81 00 E0 05 92 42 02 18 E6 05 -92 42 04 18 E8 05 92 C3 E0 05 92 D3 FA 05 3F 40 -80 1C 31 40 E0 1C 30 12 54 55 30 3F 38 40 C0 1D -39 48 2A 48 09 5A 1A 52 C4 1D 09 9A 03 24 7E 9A -FC 27 1A 83 0E 4A 2A 88 82 4A C4 1D 30 4D B6 54 -09 32 43 4F 4E 53 54 41 4E 54 87 12 80 4F D6 4B -D6 4B 98 4F F6 56 2F 83 9F 4E 02 00 00 00 2E 4E -3D 41 30 4D E0 56 09 32 56 41 52 49 41 42 4C 45 -87 12 80 4F 34 44 04 00 06 47 98 4F 2A 44 1C 15 -B0 12 2A 44 C4 49 1C 4A 32 47 34 57 D8 4A 28 47 -CC 4D 6C 57 36 57 29 4E 39 90 86 12 02 20 2E 53 -15 3C 39 90 85 12 03 20 1E 4E 02 00 0F 3C 39 90 -84 12 0C 20 2E 52 B9 90 F4 56 02 00 04 24 B9 90 -1C 57 02 00 03 20 B0 12 F6 56 6C 57 1B 17 30 41 -32 B0 00 02 01 24 3E 4F 30 41 3E 40 28 00 B0 12 -1E 57 B0 12 70 57 19 42 C6 1D A2 53 C6 1D 89 4E -00 00 3E 40 29 00 1C 15 12 12 C4 1D 92 53 C4 1D -B0 12 2A 44 C4 49 D8 4A 28 47 B8 57 AE 57 21 53 -3E 90 10 00 87 2D DA 2B BA 57 B2 41 C4 1D D6 3F -87 12 B0 45 BC 56 C8 57 0C 43 1B 42 C6 1D A2 53 -C6 1D 6A 4E 3E 4F 7A 90 23 00 2F 20 92 53 C4 1D -B0 12 1E 57 B0 12 70 57 0E 93 03 20 3C 40 00 03 -21 3C 1E 93 03 20 3C 40 10 03 1C 3C 2E 93 03 20 -3C 40 20 03 17 3C 2E 92 03 20 3C 40 20 02 12 3C -3E 92 03 20 3C 40 30 02 0D 3C 3E 93 03 20 3C 40 -30 03 08 3C 3C 40 30 00 19 42 C6 1D A2 53 C6 1D -89 4E 00 00 3E 4F 3D 41 30 4D 7A 90 26 00 09 20 -3C 40 10 02 92 53 C4 1D B0 12 1E 57 B0 12 70 57 -EB 3F 7A 90 40 00 16 20 3C 40 20 00 92 53 C4 1D -B0 12 96 57 0C 20 3C 50 10 00 3E 40 2B 00 B0 12 -96 57 92 92 C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 -0C 5E D8 3F B0 12 96 57 FA 23 3C 50 10 00 B0 12 -7A 57 EF 3F 0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 -B0 45 BC 56 A6 58 FE 90 26 00 00 00 3E 40 20 00 -03 20 3C 50 82 00 C6 3F B0 12 96 57 E1 23 3C 50 -80 00 B0 12 7A 57 DC 3F 20 48 04 52 45 54 49 00 -87 12 34 44 00 13 D6 4B 2A 44 34 44 2C 00 C0 57 -9E 58 E4 58 2E 4E 0E DC 09 4B A2 3F 4C 50 03 4D -4F 56 84 12 DA 58 00 40 EE 58 05 4D 4F 56 2E 42 -84 12 DA 58 40 40 00 00 03 41 44 44 84 12 DA 58 -00 50 08 59 05 41 44 44 2E 42 84 12 DA 58 40 50 -14 59 04 41 44 44 43 00 84 12 DA 58 00 60 22 59 -06 41 44 44 43 2E 42 00 84 12 DA 58 40 60 CA 58 -04 53 55 42 43 00 84 12 DA 58 00 70 40 59 06 53 -55 42 43 2E 42 00 84 12 DA 58 40 70 4E 59 03 53 -55 42 84 12 DA 58 00 80 5E 59 05 53 55 42 2E 42 -84 12 DA 58 40 80 2E 50 03 43 4D 50 84 12 DA 58 -00 90 78 59 05 43 4D 50 2E 42 84 12 DA 58 40 90 -1C 50 04 44 41 44 44 00 84 12 DA 58 00 A0 92 59 -06 44 41 44 44 2E 42 00 84 12 DA 58 40 A0 84 59 -03 42 49 54 84 12 DA 58 00 B0 B0 59 05 42 49 54 -2E 42 84 12 DA 58 40 B0 BC 59 03 42 49 43 84 12 -DA 58 00 C0 CA 59 05 42 49 43 2E 42 84 12 DA 58 -40 C0 D6 59 03 42 49 53 84 12 DA 58 00 D0 E4 59 -05 42 49 53 2E 42 84 12 DA 58 40 D0 00 00 03 58 -4F 52 84 12 DA 58 00 E0 FE 59 05 58 4F 52 2E 42 -84 12 DA 58 40 E0 30 59 03 41 4E 44 84 12 DA 58 -00 F0 18 5A 05 41 4E 44 2E 42 84 12 DA 58 40 F0 -B0 45 C0 57 36 5A 0A 4C 3C F0 70 00 8A 10 3A F0 -0F 00 0C DA 4F 3F 6A 59 03 52 52 43 84 12 30 5A -00 10 48 5A 05 52 52 43 2E 42 84 12 30 5A 40 10 -54 5A 04 53 57 50 42 00 84 12 30 5A 80 10 62 5A -03 52 52 41 84 12 30 5A 00 11 70 5A 05 52 52 41 -2E 42 84 12 30 5A 40 11 7C 5A 03 53 58 54 84 12 -30 5A 80 11 00 00 04 50 55 53 48 00 84 12 30 5A -00 12 96 5A 06 50 55 53 48 2E 42 00 84 12 30 5A -40 12 F0 59 04 43 41 4C 4C 00 84 12 30 5A 80 12 -1A 53 0E 4A 87 12 E2 46 60 49 0D 6F 75 74 20 6F -66 20 62 6F 75 6E 64 73 48 4D B0 45 BC 56 E0 5A -92 53 C4 1D 3E 40 2C 00 B0 12 2A 44 C4 49 D8 4A -28 47 CC 4D 94 58 F8 5A 0A 4E 3E 4F 1A 83 E0 33 -29 4E 59 0E 0A 28 08 4C 59 0A 01 28 0C 8A 08 8A -38 90 10 00 D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 -5A 06 8F 3F 8A 5A 06 52 52 43 4D 2E 41 00 84 12 -DA 5A 40 00 26 5B 04 52 52 43 4D 00 84 12 DA 5A -50 00 36 5B 06 52 52 41 4D 2E 41 00 84 12 DA 5A -40 01 44 5B 04 52 52 41 4D 00 84 12 DA 5A 50 01 -54 5B 06 52 4C 41 4D 2E 41 00 84 12 DA 5A 40 02 -62 5B 04 52 4C 41 4D 00 84 12 DA 5A 50 02 72 5B -06 52 52 55 4D 2E 41 00 84 12 DA 5A 40 03 80 5B -04 52 52 55 4D 00 84 12 DA 5A 50 03 A4 5A 07 50 -55 53 48 4D 2E 41 84 12 DA 5A 00 14 9E 5B 05 50 -55 53 48 4D 84 12 DA 5A 00 15 AE 5B 06 50 4F 50 -4D 2E 41 00 84 12 DA 5A 00 16 BC 5B 04 50 4F 50 -4D 00 84 12 DA 5A 00 17 85 12 00 3C 90 5B 03 53 -3E 3D 85 12 00 38 DE 5B 02 53 3C 00 85 12 00 34 -CC 5B 03 30 3E 3D 85 12 00 30 F2 5B 02 30 3C 00 -85 12 00 30 00 00 02 55 3C 00 85 12 00 2C 06 5C -03 55 3E 3D 85 12 00 28 FC 5B 03 30 3C 3E 85 12 -00 24 1A 5C 02 30 3D 00 85 12 00 20 00 00 02 49 -46 00 1A 42 C6 1D 8A 4E 00 00 A2 53 C6 1D 0E 4A -30 4D 10 5C 04 54 48 45 4E 00 1A 42 C6 1D 08 4E -3E 4F 09 48 29 53 0A 89 0A 11 3A 90 00 02 31 2F -88 DA 00 00 30 4D A0 59 04 45 4C 53 45 00 1A 42 -C6 1D BA 40 00 3C 00 00 A2 53 C6 1D 2F 83 8F 4A -00 00 E3 3F 44 5C 05 55 4E 54 49 4C 3A 4F 08 4E -3E 4F 19 42 C6 1D 2A 83 0A 89 0A 11 3A 90 00 FE -10 3B 3A F0 FF 03 08 DA 89 48 00 00 A2 53 C6 1D -30 4D 24 5A 05 41 47 41 49 4E 87 12 D8 5B 8C 5C -2A 44 00 00 05 57 48 49 4C 45 87 12 32 5C 78 44 -2A 44 E8 5B 06 52 45 50 45 41 54 00 87 12 D8 5B -8C 5C 4A 5C 2A 44 E8 5C 3D 41 2E 4E 08 4E 3E 4F -2A 48 0A 93 88 43 00 00 CA 23 98 42 C6 1D 00 00 -30 4D B4 5A 03 42 57 31 84 12 E6 5C E0 1D 04 5D -03 42 57 32 84 12 E6 5C E2 1D 10 5D 03 42 57 33 -84 12 E6 5C E4 1D 28 5D 3D 41 1A 42 C6 1D 2E 4E -28 4E 08 93 8E 43 00 00 8B 23 BA 4F 00 00 A2 53 -C6 1D 8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 -84 12 26 5D E6 1D 4C 5D 03 46 57 32 84 12 26 5D -E8 1D 58 5D 03 46 57 33 84 12 26 5D EA 1D 3E 90 -00 30 07 24 3E E0 00 04 3E B0 00 10 02 24 3E E0 -00 08 30 4D 64 5D 04 47 4F 54 4F 00 87 12 D8 5B -BE 4D CC 4B 2A 44 00 00 05 3F 47 4F 54 4F 87 12 -6E 5D BE 4D CC 4B 2A 44 00 00 03 4A 4D 50 87 12 -BE 4D BA 5C 2A 44 98 5D 04 3F 4A 4D 50 00 87 12 -6E 5D BE 4D 78 44 8C 5C 2A 44 87 12 B0 45 BC 56 -D2 5D 69 4E 3E 4F 3C 4F 2C 4C 1B 42 C6 1D A2 53 -C6 1D 79 90 52 00 0A 20 B0 12 96 57 5E 0E 5E 0E -0E DC 8B 4E 00 00 0E 4B 3D 41 30 4D 79 90 23 00 -0D 20 3C C0 40 00 92 53 C4 1D A2 53 C6 1D B0 12 -1E 57 BB 4F 02 00 3E F0 0F 00 E8 3F 79 90 26 00 -03 20 3C E0 E0 00 EF 3F 3C C0 F0 00 79 90 40 00 -12 20 92 53 C4 1D B0 12 96 57 D8 23 3C D0 10 00 -3E 40 2B 00 B0 12 96 57 92 92 C0 1D C4 1D CE 27 -92 53 C4 1D CB 3F 3C D0 30 00 A2 53 C6 1D 3E 40 -28 00 B0 12 1E 57 BB 4F 02 00 3E 40 29 00 EA 3F -87 12 B0 45 BC 56 78 5E 3B 4F 2C 4B 69 4E 7E 40 -20 00 79 90 52 00 03 20 B0 12 96 57 B1 3F 3C C0 -F0 00 A2 53 C6 1D 79 90 26 00 09 20 3C D0 60 00 -92 53 C4 1D B0 12 1E 57 BB 4F 02 00 A1 3F 3C D0 -70 00 3E 40 28 00 B0 12 1E 57 BB 4F 02 00 3E 40 -29 00 E2 3F 34 44 2C 00 CA 5D 70 5E 62 44 2A 44 -FA 58 04 4D 4F 56 41 00 84 12 C4 5E C0 00 1C 5D -04 43 4D 50 41 00 84 12 C4 5E D0 00 B4 5C 04 41 -44 44 41 00 84 12 C4 5E E0 00 D4 5C 04 53 55 42 -41 00 84 12 C4 5E F0 00 E0 5E 05 43 41 4C 4C 41 -87 12 B0 45 BC 56 18 5F 1B 42 C6 1D A2 53 C6 1D -6E 4E 3C 40 34 01 7E 90 52 00 0B 20 7E 40 20 00 -B0 12 96 57 5C 0E 0C DE 8B 4C 00 00 3E 4F 3D 41 -30 4D 2C 53 7E 90 40 00 0B 20 92 53 C4 1D 7E 40 -20 00 B0 12 96 57 EE 23 1C 53 3E 40 2B 00 E8 3F -A2 53 C6 1D 7E 90 23 00 09 20 3C 40 3B 01 92 53 -C4 1D B0 12 1E 57 BB 4F 02 00 DC 3F 7E 90 26 00 -02 20 2C 53 F4 3F 7E 40 28 00 1C 83 B0 12 1E 57 -BB 4F 02 00 3E 40 29 00 CB 3F 87 12 B0 45 BC 56 -A2 5F 69 4E 3E 4F 3C 40 00 18 79 90 52 00 05 20 -B0 12 96 57 0E 4C 3D 41 30 4D 82 43 EE 1D 79 90 -23 00 0B 20 92 53 C4 1D B0 12 1E 57 2F 53 3E F0 -0F 00 5E 0A 5E 0E 0C DE ED 3F 79 90 26 00 F2 27 -79 90 40 00 12 20 92 53 C4 1D B0 12 96 57 E2 23 -3E 40 2B 00 92 53 C4 1D B0 12 96 57 92 92 C0 1D -C4 1D D8 27 92 53 C4 1D D5 3F 3E 40 28 00 B0 12 -1E 57 8F 4E 00 00 3E 40 29 00 B0 12 96 57 3E 4F -3E F0 0F 00 0C DE EA 3F 87 12 B0 45 BC 56 30 60 -3C 4F 69 4E 3E 40 20 00 79 90 52 00 BB 27 82 43 -EE 1D 79 90 26 00 08 20 92 53 C4 1D B0 12 1E 57 -2F 53 3E F0 0F 00 BF 3F 3E 40 28 00 B0 12 1E 57 -F7 3F 1B 42 C6 1D A2 53 C6 1D 0C 4E 3E 4F 1C D2 -EE 1D 82 43 EE 1D 3C DE 8B 4C 00 00 B2 41 C4 1D -30 4D 34 44 C4 1D F2 44 B0 44 34 44 2C 00 9A 5F -28 60 62 60 24 47 DA 58 D2 5E 04 4D 4F 56 58 00 -84 12 82 60 40 00 00 40 9A 60 06 4D 4F 56 58 2E -41 00 84 12 82 60 00 00 40 40 AA 60 06 4D 4F 56 -58 2E 42 00 84 12 82 60 40 00 40 40 EE 5E 04 41 -44 44 58 00 84 12 82 60 40 00 00 50 CE 60 06 41 -44 44 58 2E 41 00 84 12 82 60 00 00 40 50 DE 60 -06 41 44 44 58 2E 42 00 84 12 82 60 40 00 40 50 -F0 60 05 41 44 44 43 58 84 12 82 60 40 00 00 60 -02 61 07 41 44 44 43 58 2E 41 84 12 82 60 00 00 -40 60 12 61 07 41 44 44 43 58 2E 42 84 12 82 60 -40 00 40 60 FC 5E 05 53 55 42 43 58 84 12 82 60 -40 00 00 70 36 61 07 53 55 42 43 58 2E 41 84 12 -82 60 00 00 40 70 46 61 07 53 55 42 43 58 2E 42 -84 12 82 60 40 00 40 70 58 61 04 53 55 42 58 00 -84 12 82 60 40 00 00 80 6A 61 06 53 55 42 58 2E -41 00 84 12 82 60 00 00 40 80 7A 61 06 53 55 42 -58 2E 42 00 84 12 82 60 40 00 40 80 0A 5F 04 43 -4D 50 58 00 84 12 82 60 40 00 00 90 9E 61 06 43 -4D 50 58 2E 41 00 84 12 82 60 00 00 40 90 AE 61 -06 43 4D 50 58 2E 42 00 84 12 82 60 40 00 40 90 -68 5C 05 44 41 44 44 58 84 12 82 60 40 00 00 A0 -D2 61 07 44 41 44 44 58 2E 41 84 12 82 60 00 00 -40 A0 E2 61 07 44 41 44 44 58 2E 42 84 12 82 60 -40 00 40 A0 C0 61 04 42 49 54 58 00 84 12 82 60 -40 00 00 B0 06 62 06 42 49 54 58 2E 41 00 84 12 -82 60 00 00 40 B0 16 62 06 42 49 54 58 2E 42 00 -84 12 82 60 40 00 40 B0 28 62 04 42 49 43 58 00 -84 12 82 60 40 00 00 C0 3A 62 06 42 49 43 58 2E -41 00 84 12 82 60 00 00 40 C0 4A 62 06 42 49 43 -58 2E 42 00 84 12 82 60 40 00 40 C0 5C 62 04 42 -49 53 58 00 84 12 82 60 40 00 00 D0 6E 62 06 42 -49 53 58 2E 41 00 84 12 82 60 00 00 40 D0 7E 62 -06 42 49 53 58 2E 42 00 84 12 82 60 40 00 40 D0 -0A 5A 04 58 4F 52 58 00 84 12 82 60 40 00 00 E0 -A2 62 06 58 4F 52 58 2E 41 00 84 12 82 60 00 00 -40 E0 B2 62 06 58 4F 52 58 2E 42 00 84 12 82 60 -40 00 40 E0 24 61 04 41 4E 44 58 00 84 12 82 60 -40 00 00 F0 D6 62 06 41 4E 44 58 2E 41 00 84 12 -82 60 00 00 40 F0 E6 62 06 41 4E 44 58 2E 42 00 -84 12 82 60 40 00 40 F0 34 44 C4 1D F2 44 B0 44 -B0 45 9A 5F 62 60 24 47 30 5A 8C 61 04 52 52 43 -58 00 84 12 08 63 40 00 00 10 1C 63 06 52 52 43 -58 2E 41 00 84 12 08 63 00 00 40 10 2C 63 06 52 -52 43 58 2E 42 00 84 12 08 63 40 00 40 10 3E 63 -04 52 52 55 58 00 84 12 08 63 40 01 00 10 50 63 -06 52 52 55 58 2E 41 00 84 12 08 63 00 01 40 10 -60 63 06 52 52 55 58 2E 42 00 84 12 08 63 40 01 -40 10 72 63 05 53 57 50 42 58 84 12 08 63 40 00 -80 10 84 63 07 53 57 50 42 58 2E 41 84 12 08 63 -00 00 80 10 94 63 04 52 52 41 58 00 84 12 08 63 -40 00 00 11 A6 63 06 52 52 41 58 2E 41 00 84 12 -08 63 00 00 40 11 B6 63 06 52 52 41 58 2E 42 00 -84 12 08 63 40 00 40 11 C8 63 04 53 58 54 58 00 -84 12 08 63 40 00 80 11 DA 63 06 53 58 54 58 2E -41 00 84 12 08 63 00 00 80 11 24 5C 05 50 55 53 -48 58 84 12 08 63 40 00 00 12 FC 63 07 50 55 53 -48 58 2E 41 84 12 08 63 00 00 40 12 0C 64 07 50 -55 53 48 58 2E 42 84 12 08 63 40 00 40 12 EA 63 -03 52 50 54 87 12 B0 45 BC 56 3C 64 29 4E 7E 40 -20 00 79 90 52 00 06 20 B0 12 96 57 03 24 3E D0 -80 00 04 3C B0 12 1E 57 3E F0 0F 00 82 4E EE 1D -3E 4F 3D 41 30 4D +44 52 B2 40 88 5A 5C 01 B2 40 FE FF 02 02 B2 D3 +06 02 B2 43 26 02 B2 43 22 02 D2 D3 24 02 B2 43 +42 02 B2 43 46 02 B2 43 62 02 B2 43 66 02 B2 40 +7F FF 82 02 B2 43 86 02 F2 43 22 03 F2 43 26 03 +F2 40 A5 00 61 01 82 43 66 01 39 40 80 00 B2 40 +33 00 64 01 D2 43 61 01 92 D2 9E 01 08 18 38 40 +59 14 18 83 FE 23 19 83 FA 23 B2 42 B0 01 F2 D0 +10 00 2A 03 F2 C0 40 00 A2 04 39 40 00 08 29 83 +89 43 00 1C FC 23 39 40 3A 00 29 83 B9 40 A2 52 +C6 FF FB 23 B2 40 26 47 E4 FF B2 40 81 00 E0 05 +92 42 02 18 E6 05 92 42 04 18 E8 05 92 C3 E0 05 +92 D3 FA 05 3F 40 80 1C 31 40 E0 1C 30 12 0A 52 +3E 3F 8E 52 07 43 4F 4D 50 41 52 45 0C 4E 38 4F +3B 4F 39 4F 0E 4B 0E 5C 0C 24 1B 83 07 30 1C 83 +07 30 19 53 F9 98 FF FF F5 27 02 2C 3E 43 30 4D +1E 43 30 4D B2 4D 86 5B 54 48 45 4E 5D 00 30 4D +96 53 86 5B 45 4C 53 45 5D 00 87 12 14 48 00 00 +C6 44 42 4B 80 48 24 4B 34 44 40 46 0C 54 44 44 +1E 48 06 5B 54 48 45 4E 5D 00 6C 53 4A 46 DC 53 +F8 47 D0 44 58 44 4A 46 B2 53 2A 44 44 44 1E 48 +06 5B 45 4C 53 45 5D 00 6C 53 4A 46 FA 53 F8 47 +D0 44 58 44 4A 46 B0 53 2A 44 1E 48 04 5B 49 46 +5D 00 6C 53 4A 46 B2 53 3C 46 B0 53 F8 47 1E 48 +05 0D 0A 6B 6F 20 D6 47 8C 47 32 4B 3C 46 B2 53 +A2 53 84 5B 49 46 5D 00 0E 93 3E 4F BE 27 30 4D +22 54 89 5B 44 45 46 49 4E 45 44 5D 87 12 42 4B +80 48 EE 48 6A 44 2A 44 32 54 8B 5B 55 4E 44 45 +46 49 4E 45 44 5D 87 12 42 4B 80 48 EE 48 6A 44 +00 45 2A 44 66 54 3D 41 B2 4E 0E 18 A2 4E 0C 18 +3E 4F 30 40 5A 51 4C 50 06 4D 41 52 4B 45 52 00 +B0 12 B8 4D BA 40 84 12 FC FF BA 40 64 54 FE FF +9A 42 C8 1D 00 00 28 83 8A 48 02 00 A2 52 C6 1D +30 40 00 4E 1C 15 B0 12 2A 44 80 48 EE 48 4A 46 +BA 54 AA 49 40 46 CE 4C D4 54 BC 54 39 4E 39 80 +86 12 08 24 19 53 02 20 2E 4E 04 3C 2E 53 19 53 +01 24 2E 82 1B 17 30 41 32 B0 00 02 01 24 3E 4F +30 41 3E 40 28 00 B0 12 A4 54 B0 12 D8 54 19 42 +C6 1D A2 53 C6 1D 89 4E 00 00 3E 40 29 00 1C 15 +12 12 C4 1D 92 53 C4 1D B0 12 2A 44 80 48 AA 49 +40 46 20 55 16 55 21 53 3E 90 10 00 81 2D DA 2B +22 55 B2 41 C4 1D D6 3F 87 12 42 4B 74 48 30 55 +0C 43 1B 42 C6 1D A2 53 C6 1D 6A 4E 3E 4F 7A 90 +23 00 29 20 92 53 C4 1D B0 12 A4 54 B0 12 D8 54 +3C 40 00 03 0E 93 1C 24 3C 40 10 03 1E 93 18 24 +3C 40 20 03 2E 93 14 24 3C 40 20 02 2E 92 10 24 +3C 40 30 02 3E 92 0C 24 3C 40 30 03 3E 93 08 24 +3C 40 30 00 19 42 C6 1D A2 53 C6 1D 89 4E 00 00 +3E 4F 3D 41 30 4D 7A 90 26 00 09 20 3C 40 10 02 +92 53 C4 1D B0 12 A4 54 B0 12 D8 54 EB 3F 7A 90 +40 00 16 20 3C 40 20 00 92 53 C4 1D B0 12 FE 54 +0C 20 3C 50 10 00 3E 40 2B 00 B0 12 FE 54 92 92 +C0 1D C4 1D 02 24 92 53 C4 1D 8E 10 0C 5E D8 3F +B0 12 FE 54 FA 23 3C 50 10 00 B0 12 E2 54 EF 3F +0C 43 1B 42 C6 1D A2 53 C6 1D 87 12 42 4B 74 48 +02 56 FE 90 26 00 00 00 3E 40 20 00 03 20 3C 50 +82 00 C6 3F B0 12 FE 54 E1 23 3C 50 80 00 B0 12 +E2 54 DC 3F D6 46 04 52 45 54 49 00 87 12 14 48 +00 13 B0 4A 2A 44 14 48 2C 00 28 55 FA 55 40 56 +09 4B 2E 4E 0E DC A2 3F 00 4F 03 4D 4F 56 84 12 +36 56 00 40 4A 56 05 4D 4F 56 2E 42 84 12 36 56 +40 40 00 00 03 41 44 44 84 12 36 56 00 50 64 56 +05 41 44 44 2E 42 84 12 36 56 40 50 70 56 04 41 +44 44 43 00 84 12 36 56 00 60 7E 56 06 41 44 44 +43 2E 42 00 84 12 36 56 40 60 26 56 04 53 55 42 +43 00 84 12 36 56 00 70 9C 56 06 53 55 42 43 2E +42 00 84 12 36 56 40 70 AA 56 03 53 55 42 84 12 +36 56 00 80 BA 56 05 53 55 42 2E 42 84 12 36 56 +40 80 E2 4E 03 43 4D 50 84 12 36 56 00 90 D4 56 +05 43 4D 50 2E 42 84 12 36 56 40 90 D0 4E 04 44 +41 44 44 00 84 12 36 56 00 A0 EE 56 06 44 41 44 +44 2E 42 00 84 12 36 56 40 A0 E0 56 03 42 49 54 +84 12 36 56 00 B0 0C 57 05 42 49 54 2E 42 84 12 +36 56 40 B0 18 57 03 42 49 43 84 12 36 56 00 C0 +26 57 05 42 49 43 2E 42 84 12 36 56 40 C0 32 57 +03 42 49 53 84 12 36 56 00 D0 40 57 05 42 49 53 +2E 42 84 12 36 56 40 D0 00 00 03 58 4F 52 84 12 +36 56 00 E0 5A 57 05 58 4F 52 2E 42 84 12 36 56 +40 E0 8C 56 03 41 4E 44 84 12 36 56 00 F0 74 57 +05 41 4E 44 2E 42 84 12 36 56 40 F0 42 4B 28 55 +92 57 0A 4C 3C F0 70 00 8A 10 3A F0 0F 00 0C DA +4F 3F C6 56 03 52 52 43 84 12 8C 57 00 10 A4 57 +05 52 52 43 2E 42 84 12 8C 57 40 10 B0 57 04 53 +57 50 42 00 84 12 8C 57 80 10 BE 57 03 52 52 41 +84 12 8C 57 00 11 CC 57 05 52 52 41 2E 42 84 12 +8C 57 40 11 D8 57 03 53 58 54 84 12 8C 57 80 11 +00 00 04 50 55 53 48 00 84 12 8C 57 00 12 F2 57 +06 50 55 53 48 2E 42 00 84 12 8C 57 40 12 4C 57 +04 43 41 4C 4C 00 84 12 8C 57 80 12 1A 53 0E 4A +87 12 34 46 1E 48 0D 6F 75 74 20 6F 66 20 62 6F +75 6E 64 73 4C 4C 42 4B 74 48 3C 58 92 53 C4 1D +3E 40 2C 00 B0 12 2A 44 80 48 AA 49 40 46 CE 4C +F0 55 54 58 0A 4E 3E 4F 1A 83 E0 33 29 4E 59 0E +0A 28 08 4C 59 0A 01 28 0C 8A 08 8A 38 90 10 00 +D5 2F 5A 0E 94 3F 2A 92 D1 2F 8A 10 5A 06 8F 3F +E6 57 06 52 52 43 4D 2E 41 00 84 12 36 58 40 00 +82 58 04 52 52 43 4D 00 84 12 36 58 50 00 92 58 +06 52 52 41 4D 2E 41 00 84 12 36 58 40 01 A0 58 +04 52 52 41 4D 00 84 12 36 58 50 01 B0 58 06 52 +4C 41 4D 2E 41 00 84 12 36 58 40 02 BE 58 04 52 +4C 41 4D 00 84 12 36 58 50 02 CE 58 06 52 52 55 +4D 2E 41 00 84 12 36 58 40 03 DC 58 04 52 52 55 +4D 00 84 12 36 58 50 03 00 58 07 50 55 53 48 4D +2E 41 84 12 36 58 00 14 FA 58 05 50 55 53 48 4D +84 12 36 58 00 15 0A 59 06 50 4F 50 4D 2E 41 00 +84 12 36 58 00 16 18 59 04 50 4F 50 4D 00 84 12 +36 58 00 17 EC 58 03 53 3E 3D 85 12 00 38 36 59 +02 53 3C 00 85 12 00 34 28 59 03 30 3E 3D 85 12 +00 30 4A 59 02 30 3C 00 85 12 00 30 00 00 02 55 +3C 00 85 12 00 2C 5E 59 03 55 3E 3D 85 12 00 28 +54 59 03 30 3C 3E 85 12 00 24 72 59 02 30 3D 00 +85 12 00 20 00 00 02 49 46 00 1A 42 C6 1D 8A 4E +00 00 A2 53 C6 1D 0E 4A 30 4D 68 59 04 54 48 45 +4E 00 1A 42 C6 1D 08 4E 3E 4F 09 48 29 53 0A 89 +0A 11 3A 90 00 02 33 2F 88 DA 00 00 30 4D FC 56 +04 45 4C 53 45 00 1A 42 C6 1D BA 40 00 3C 00 00 +A2 53 C6 1D 2F 83 8F 4A 00 00 E3 3F 9C 59 05 55 +4E 54 49 4C 3A 4F 08 4E 3E 4F 19 42 C6 1D 2A 83 +0A 89 0A 11 3A 90 00 FE 12 3B 3A F0 FF 03 08 DA +89 48 00 00 A2 53 C6 1D 30 4D 80 57 05 41 47 41 +49 4E 0A 4E 38 40 00 3C E7 3F 00 00 05 57 48 49 +4C 45 87 12 8A 59 76 44 2A 44 40 59 06 52 45 50 +45 41 54 00 87 12 12 5A A2 59 2A 44 3E 5A 3D 41 +08 4E 3E 4F 2A 48 B2 92 C4 1D CD 2F 98 42 C6 1D +00 00 30 4D 10 58 03 42 57 31 84 12 3C 5A 00 00 +56 5A 03 42 57 32 84 12 3C 5A 00 00 62 5A 03 42 +57 33 84 12 3C 5A 00 00 7A 5A 3D 41 1A 42 C6 1D +28 4E B2 92 C4 1D 90 2B BA 4F 00 00 A2 53 C6 1D +8E 4A 00 00 3E 4F 30 4D 00 00 03 46 57 31 84 12 +78 5A 00 00 9A 5A 03 46 57 32 84 12 78 5A 00 00 +A6 5A 03 46 57 33 84 12 78 5A 00 00 00 00 05 3F +47 4F 54 4F 3E 90 00 30 07 24 3E E0 00 04 3E B0 +00 10 02 24 3E E0 00 08 87 12 C0 4C DA 4A 2A 44 +B2 5A 04 47 4F 54 4F 00 2F 83 8F 4E 00 00 3E 40 +00 3C F2 3F 87 12 42 4B 74 48 FC 5A 69 4E 3E 4F +3C 4F 2C 4C 1B 42 C6 1D A2 53 C6 1D 79 90 52 00 +0A 20 B0 12 FE 54 5E 0E 5E 0E 0E DC 8B 4E 00 00 +0E 4B 3D 41 30 4D 79 90 23 00 0D 20 3C C0 40 00 +92 53 C4 1D A2 53 C6 1D B0 12 A4 54 BB 4F 02 00 +3E F0 0F 00 E8 3F 79 90 26 00 03 20 3C E0 E0 00 +EF 3F 3C C0 F0 00 79 90 40 00 12 20 92 53 C4 1D +B0 12 FE 54 D8 23 3C D0 10 00 3E 40 2B 00 B0 12 +FE 54 92 92 C0 1D C4 1D CE 27 92 53 C4 1D CB 3F +3C D0 30 00 A2 53 C6 1D 3E 40 28 00 B0 12 A4 54 +BB 4F 02 00 3E 40 29 00 EA 3F 87 12 42 4B 74 48 +A2 5B 3B 4F 2C 4B 69 4E 7E 40 20 00 79 90 52 00 +03 20 B0 12 FE 54 B1 3F 3C C0 F0 00 A2 53 C6 1D +79 90 26 00 09 20 3C D0 60 00 92 53 C4 1D B0 12 +A4 54 BB 4F 02 00 A1 3F 3C D0 70 00 3E 40 28 00 +B0 12 A4 54 BB 4F 02 00 3E 40 29 00 E2 3F 14 48 +2C 00 F4 5A 9A 5B 66 44 2A 44 56 56 04 4D 4F 56 +41 00 84 12 EE 5B C0 00 6E 5A 04 43 4D 50 41 00 +84 12 EE 5B D0 00 0C 5A 04 41 44 44 41 00 84 12 +EE 5B E0 00 2C 5A 04 53 55 42 41 00 84 12 EE 5B +F0 00 0A 5C 05 43 41 4C 4C 41 87 12 42 4B 74 48 +42 5C 1B 42 C6 1D A2 53 C6 1D 6E 4E 3C 40 34 01 +7E 90 52 00 0B 20 7E 40 20 00 B0 12 FE 54 5C 0E +0C DE 8B 4C 00 00 3E 4F 3D 41 30 4D 2C 53 7E 90 +40 00 0B 20 92 53 C4 1D 7E 40 20 00 B0 12 FE 54 +EE 23 1C 53 3E 40 2B 00 E8 3F A2 53 C6 1D 7E 90 +23 00 09 20 3C 40 3B 01 92 53 C4 1D B0 12 A4 54 +BB 4F 02 00 DC 3F 7E 90 26 00 02 20 2C 53 F4 3F +7E 40 28 00 1C 83 B0 12 A4 54 BB 4F 02 00 3E 40 +29 00 CB 3F 87 12 42 4B 74 48 CC 5C 69 4E 3E 4F +3C 40 00 18 79 90 52 00 05 20 B0 12 FE 54 0E 4C +3D 41 30 4D 82 43 58 61 79 90 23 00 0B 20 92 53 +C4 1D B0 12 A4 54 2F 53 3E F0 0F 00 5E 0A 5E 0E +0C DE ED 3F 79 90 26 00 F2 27 79 90 40 00 12 20 +92 53 C4 1D B0 12 FE 54 E2 23 3E 40 2B 00 92 53 +C4 1D B0 12 FE 54 92 92 C0 1D C4 1D D8 27 92 53 +C4 1D D5 3F 3E 40 28 00 B0 12 A4 54 8F 4E 00 00 +3E 40 29 00 B0 12 FE 54 3E 4F 3E F0 0F 00 0C DE +EA 3F 87 12 42 4B 74 48 5A 5D 3C 4F 69 4E 3E 40 +20 00 79 90 52 00 BB 27 82 43 58 61 79 90 26 00 +08 20 92 53 C4 1D B0 12 A4 54 2F 53 3E F0 0F 00 +BF 3F 3E 40 28 00 B0 12 A4 54 F7 3F 1B 42 C6 1D +A2 53 C6 1D 0C 4E 3E 4F 1C D2 58 61 82 43 58 61 +3C DE 8B 4C 00 00 B2 41 C4 1D 30 4D 14 48 C4 1D +EA 44 86 44 14 48 2C 00 C4 5C 52 5D 8C 5D 3C 46 +36 56 FC 5B 04 4D 4F 56 58 00 84 12 AC 5D 40 00 +00 40 C4 5D 06 4D 4F 56 58 2E 41 00 84 12 AC 5D +00 00 40 40 D4 5D 06 4D 4F 56 58 2E 42 00 84 12 +AC 5D 40 00 40 40 18 5C 04 41 44 44 58 00 84 12 +AC 5D 40 00 00 50 F8 5D 06 41 44 44 58 2E 41 00 +84 12 AC 5D 00 00 40 50 08 5E 06 41 44 44 58 2E +42 00 84 12 AC 5D 40 00 40 50 1A 5E 05 41 44 44 +43 58 84 12 AC 5D 40 00 00 60 2C 5E 07 41 44 44 +43 58 2E 41 84 12 AC 5D 00 00 40 60 3C 5E 07 41 +44 44 43 58 2E 42 84 12 AC 5D 40 00 40 60 26 5C +05 53 55 42 43 58 84 12 AC 5D 40 00 00 70 60 5E +07 53 55 42 43 58 2E 41 84 12 AC 5D 00 00 40 70 +70 5E 07 53 55 42 43 58 2E 42 84 12 AC 5D 40 00 +40 70 82 5E 04 53 55 42 58 00 84 12 AC 5D 40 00 +00 80 94 5E 06 53 55 42 58 2E 41 00 84 12 AC 5D +00 00 40 80 A4 5E 06 53 55 42 58 2E 42 00 84 12 +AC 5D 40 00 40 80 34 5C 04 43 4D 50 58 00 84 12 +AC 5D 40 00 00 90 C8 5E 06 43 4D 50 58 2E 41 00 +84 12 AC 5D 00 00 40 90 D8 5E 06 43 4D 50 58 2E +42 00 84 12 AC 5D 40 00 40 90 C0 59 05 44 41 44 +44 58 84 12 AC 5D 40 00 00 A0 FC 5E 07 44 41 44 +44 58 2E 41 84 12 AC 5D 00 00 40 A0 0C 5F 07 44 +41 44 44 58 2E 42 84 12 AC 5D 40 00 40 A0 EA 5E +04 42 49 54 58 00 84 12 AC 5D 40 00 00 B0 30 5F +06 42 49 54 58 2E 41 00 84 12 AC 5D 00 00 40 B0 +40 5F 06 42 49 54 58 2E 42 00 84 12 AC 5D 40 00 +40 B0 52 5F 04 42 49 43 58 00 84 12 AC 5D 40 00 +00 C0 64 5F 06 42 49 43 58 2E 41 00 84 12 AC 5D +00 00 40 C0 74 5F 06 42 49 43 58 2E 42 00 84 12 +AC 5D 40 00 40 C0 86 5F 04 42 49 53 58 00 84 12 +AC 5D 40 00 00 D0 98 5F 06 42 49 53 58 2E 41 00 +84 12 AC 5D 00 00 40 D0 A8 5F 06 42 49 53 58 2E +42 00 84 12 AC 5D 40 00 40 D0 66 57 04 58 4F 52 +58 00 84 12 AC 5D 40 00 00 E0 CC 5F 06 58 4F 52 +58 2E 41 00 84 12 AC 5D 00 00 40 E0 DC 5F 06 58 +4F 52 58 2E 42 00 84 12 AC 5D 40 00 40 E0 4E 5E +04 41 4E 44 58 00 84 12 AC 5D 40 00 00 F0 00 60 +06 41 4E 44 58 2E 41 00 84 12 AC 5D 00 00 40 F0 +10 60 06 41 4E 44 58 2E 42 00 84 12 AC 5D 40 00 +40 F0 14 48 C4 1D EA 44 86 44 42 4B C4 5C 8C 5D +3C 46 8C 57 B6 5E 04 52 52 43 58 00 84 12 32 60 +40 00 00 10 46 60 06 52 52 43 58 2E 41 00 84 12 +32 60 00 00 40 10 56 60 06 52 52 43 58 2E 42 00 +84 12 32 60 40 00 40 10 68 60 04 52 52 55 58 00 +84 12 32 60 40 01 00 10 7A 60 06 52 52 55 58 2E +41 00 84 12 32 60 00 01 40 10 8A 60 06 52 52 55 +58 2E 42 00 84 12 32 60 40 01 40 10 9C 60 05 53 +57 50 42 58 84 12 32 60 40 00 80 10 AE 60 07 53 +57 50 42 58 2E 41 84 12 32 60 00 00 80 10 BE 60 +04 52 52 41 58 00 84 12 32 60 40 00 00 11 D0 60 +06 52 52 41 58 2E 41 00 84 12 32 60 00 00 40 11 +E0 60 06 52 52 41 58 2E 42 00 84 12 32 60 40 00 +40 11 F2 60 04 53 58 54 58 00 84 12 32 60 40 00 +80 11 04 61 06 53 58 54 58 2E 41 00 84 12 32 60 +00 00 80 11 7C 59 05 50 55 53 48 58 84 12 32 60 +40 00 00 12 26 61 07 50 55 53 48 58 2E 41 84 12 +32 60 00 00 40 12 36 61 07 50 55 53 48 58 2E 42 +84 12 32 60 40 00 40 12 00 00 14 61 03 52 50 54 +87 12 42 4B 74 48 68 61 29 4E 7E 40 20 00 79 90 +52 00 06 20 B0 12 FE 54 03 24 3E D0 80 00 05 3C +B0 12 A4 54 1E 83 3E F0 0F 00 82 4E 58 61 3E 4F +3D 41 30 4D @FFFE -F0 55 +A2 52 q diff --git a/config/Preprocess.bat b/config/Preprocess.bat index f118906..49cc83e 100644 --- a/config/Preprocess.bat +++ b/config/Preprocess.bat @@ -31,15 +31,13 @@ exit :preprocess -::%~d1\prog\gema.exe -nobackup -line -t '\n=\r\n;\r\n=\r\n' -f %~d1\inc\%~n2.pat %1 %~dp1last.4TH -%~d1\prog\gema.exe -nobackup -line -t '-\r\n=\r\n' -f %~d1\inc\%~n2.pat %1 %~dp1last.4TH -::%~d1\prog\gema.exe -nobackup -line -t -f %~d1\inc\%~n2.pat %1 %~dp1last.4TH -@XCOPY /D /Y "%~dp1last.4TH" "%~dp1\%~n2\%~n1.4TH*" > NUL +%~d1\prog\gema.exe -nobackup -line -t '-\r\n=\r\n' -f %~d1\inc\%~n2.pat %~dpn1.f %~dp1LAST.4TH +XCOPY /D /Y %~dp1LAST.4TH %~dp1\%~n2\%~n1.4TH* > NUL exit :: %~dpn1.f is the symbolic source file :: %~d1\inc\%~n2.pat is the pattern file for preprocessor gema.exe -:: %~dpn1.4TH is the output source file (ready to send to the target) +:: %~dp1LAST.4TH is the output source file (ready to send to the target) :: %~d1 is the drive of arg %1 :: %~n2 is your selected template by SelectTarget.bat or your scite $(1) diff --git a/config/Select.bat b/config/Select.bat index b828347..47f5c67 100644 --- a/config/Select.bat +++ b/config/Select.bat @@ -15,7 +15,7 @@ @echo 6 MSP_EXP430FR2433 @echo 7 CHIPSTICK_FR2433 @echo 8 MSP_EXP430FR2355 - +@echo 9 LP_MSP430FR2476 @set /p choice=your choice: @@ -27,6 +27,7 @@ @if %choice% == 6 set template=MSP_EXP430FR2433 @if %choice% == 7 set template=CHIPSTICK_FR2433 @if %choice% == 8 set template=MSP_EXP430FR2355 +@if %choice% == 9 set template=LP_MSP430FR2476 @exit /b @@ -44,6 +45,7 @@ @if /I %device:~0,16% == MSP_EXP430FR2433 set device=MSP430FR2433 @if /I %device:~0,16% == CHIPSTICK_FR2433 set device=MSP430FR2433 @if /I %device:~0,16% == MSP_EXP430FR2355 set device=MSP430FR2355 +@if /I %device:~0,15% == LP_EXP430FR2476 set device=MSP430FR2476 @exit /b diff --git a/config/SendFile.ttl b/config/SendFile.ttl index 29a302f..caabf28 100644 --- a/config/SendFile.ttl +++ b/config/SendFile.ttl @@ -2,11 +2,11 @@ testlink if result=0 connect param3 -inputbox 'Send a File' 'Select File : ' param2 +inputbox 'Send this file to the MSP430FR target:' ' ' param2 strcompare param4 'NOECHO' if result = 0 then - sendln 'NOECHO $0A BASE ! [DEFINED] STOP [IF] STOP [THEN]' ; set no echo from FastForth + sendln 'NOECHO PWR_STATE [DEFINED] STOP [IF] STOP [THEN]' ; set no echo from FastForth setecho 0 ; suppr. echo from Teraterm showtt 0 ; clearscreen 1 @@ -17,7 +17,7 @@ endif strcompare param4 'HALF' if result = 0 then - sendln 'NOECHO $0A BASE ! [DEFINED] STOP [IF] STOP [THEN]' ; set no echo from FastForth + sendln 'NOECHO PWR_STATE [DEFINED] STOP [IF] STOP [THEN]' ; set no echo from FastForth showtt 0 ; clearscreen 1 sendfile inputstr 0 @@ -27,7 +27,7 @@ if result = 0 then endif ; default mode = ECHO - sendln 'ECHO $0A BASE ! [DEFINED] STOP [IF] STOP [THEN]' + sendln 'ECHO PWR_STATE [DEFINED] STOP [IF] STOP [THEN]' setecho 0 ; no echo from Teraterm showtt 0 ; clearscreen 1 diff --git a/config/SendToSD.ttl b/config/SendToSD.ttl index e2bd883..64db942 100644 --- a/config/SendToSD.ttl +++ b/config/SendToSD.ttl @@ -9,9 +9,9 @@ strinsert fname 1 '\' ; fname = \file.ext, to force absolute path testlink if result=0 connect param3 -sendln ' $0A BASE ! PWR_STATE ECHO [DEFINED] STOP [IF] STOP [THEN]' ; blanks are to pass LPMx wake up time... +sendln ' PWR_STATE ECHO [DEFINED] STOP [IF] STOP [THEN]' ; blanks are to pass LPMx wake up time... -inputbox 'here you can add a path to the file: ' 'Send a File to SD_CARD target' fname +inputbox 'here you can change path of the file: ' 'Send this file to SD_CARD target' fname sendln 'TERM2SD" ' inputstr '"' ; send to FastForth the command TERM2SD" \file.ext" ...with optionnal path added in inputbox diff --git a/forthMSP430FR.asm b/forthMSP430FR.asm index aea5f15..10f081f 100644 --- a/forthMSP430FR.asm +++ b/forthMSP430FR.asm @@ -27,6 +27,9 @@ ; Ajoutez quelquefois, et souvent effacez. ; Boileau, L'Art poétique ;------------------------------------------------------------------------------- +; Purgare ... et repurgare. +; Molière, Le Malade imaginaire ;-) +;------------------------------------------------------------------------------- ;=============================================================================== ;=============================================================================== @@ -35,22 +38,23 @@ ;=============================================================================== ;=============================================================================== -VER .equ "V300" ; FORTH version +VER .equ "V301" ; FORTH version - macexp off ; uncomment to hide macro results in forthMSP430FR.lst + macexp off ; uncomment to hide macros development in forthMSP430FR.lst ;------------------------------------------------------------------------------- ; TARGETS kernel ; sizes are for 8MHz, DTC=1, THREADS=1, 3WIRES (XON/XOFF) ;------------------------------------------------------------------------------- -; ;INFO+VECTOR+ MAIN -;MSP_EXP430FR5739 ; compile for MSP-EXP430FR5739 launchpad ; 24 + 2 + 3840 bytes -;MSP_EXP430FR5969 ; compile for MSP-EXP430FR5969 launchpad ; 24 + 2 + 3816 bytes -;MSP_EXP430FR5994 ; compile for MSP-EXP430FR5994 launchpad ; 24 + 2 + 3842 bytes -;MSP_EXP430FR6989 ; compile for MSP-EXP430FR6989 launchpad ; 24 + 2 + 3852 bytes -;MSP_EXP430FR4133 ; compile for MSP-EXP430FR4133 launchpad ; 24 + 2 + 3906 bytes -;MSP_EXP430FR2355 ; compile for MSP-EXP430FR2355 launchpad ; 24 + 2 + 3818 bytes -;MSP_EXP430FR2433 ; compile for MSP-EXP430FR2433 launchpad ; 24 + 2 + 3804 bytes -CHIPSTICK_FR2433 ;; compile for the "CHIPSTICK" of M. Ken BOAK ; 24 + 2 + 3804 bytes +; ;INFO+VECTOR+ MAIN +;MSP_EXP430FR5739 ; compile for MSP-EXP430FR5739 launchpad ; 24 + 2 + 3434 bytes +;MSP_EXP430FR5969 ; compile for MSP-EXP430FR5969 launchpad ; 24 + 2 + 3424 bytes +MSP_EXP430FR5994 ;; compile for MSP-EXP430FR5994 launchpad ; 24 + 2 + 3444 bytes +;MSP_EXP430FR6989 ; compile for MSP-EXP430FR6989 launchpad ; 24 + 2 + 3448 bytes +;MSP_EXP430FR4133 ; compile for MSP-EXP430FR4133 launchpad ; 24 + 2 + 3484 bytes +;MSP_EXP430FR2355 ; compile for MSP-EXP430FR2355 launchpad ; 24 + 2 + 3416 bytes +;MSP_EXP430FR2433 ; compile for MSP-EXP430FR2433 launchpad ; 24 + 2 + 3408 bytes +;LP_MSP430FR2476 ; compile for LP_MSP430FR2476 launchpad ; 24 + 2 + 3422 bytes +;CHIPSTICK_FR2433 ; compile for "CHIPSTICK" of M. Ken BOAK ; 24 + 2 + 3414 bytes ; choose DTC (Direct Threaded Code) model, if you don't know, choose 1 DTC .equ 1 ; DTC model 1 : DOCOL = CALL rDOCOL 14 cycles 1 word shortest DTC model @@ -59,43 +63,44 @@ DTC .equ 1 ; DTC model 1 : DOCOL = CALL rDOCOL 14 cycles 1 word THREADS .equ 16 ; 1, 2 , 4 , 8 , 16, 32 search entries in dictionnary. ; +0, +42, +54, +70, +104, +168 bytes, usefull to speed up compilation; - ; choose 16 + ; choose 16 if FRAM > 15 kb, else 1. FREQUENCY .equ 16 ; fully tested at 1,2,4,8,16 MHz (+ 24 MHz for MSP430FR57xx,MSP430FR2355) ;------------------------------------------------------------------------------- ; KERNEL OPTIONS that can't be added later ;------------------------------------------------------------------------------- -CONDCOMP ;; + 368 bytes : adds conditionnal compilation : COMPARE [DEFINED] [UNDEFINED] [IF] [ELSE] [THEN] MARKER -MSP430ASSEMBLER ;; + 1828 bytes : adds embedded assembler with TI syntax; without, you can do all but all much more slowly... -;EXTENDED_ASM ; + 1896 bytes : adds extended assembler for programming or data access beyond $FFFF. -NONAME ;; + 54 bytes : adds :NONAME CODENNM (CODENoNaMe) -VOCABULARY_SET ;; + 104 bytes : adds words: VOCABULARY FORTH ASSEMBLER ALSO PREVIOUS ONLY DEFINITIONS (FORTH83) -DOUBLE_INPUT ;; + 74 bytes : adds the interpretation input for double numbers (dot numbers) -FIXPOINT_INPUT ;; + 120 bytes : adds the interpretation input for Q15.16 numbers, mandatory for FIXPOINT ADD-ON -;SD_CARD_LOADER ; + 1748 bytes : to LOAD source files from SD_card -;SD_CARD_READ_WRITE ; + 1192 bytes : to read, create, write and del files + copy text files from PC to SD_Card -;BOOTLOADER ; + 72 bytes : includes to SD_CARD\BOOT.4TH as bootloader. To do: ' BOOT IS QUIT +CONDCOMP ;; + 320 bytes : adds conditionnal compilation : COMPARE [DEFINED] [UNDEFINED] [IF] [ELSE] [THEN] MARKER +MSP430ASSEMBLER ;; + 1690 bytes : adds embedded assembler with TI syntax; without, you can do all but all much more slowly... +DOUBLE_INPUT ;; + 58 bytes : adds the interpretation input for double numbers (dot numbers) +EXTENDED_MEM ;; + 318 bytes : adds to assembler the data access beyond $FFFF. +EXTENDED_ASM ;; + 1488 bytes : adds extended assembler for programming beyond $FFFF. +FIXPOINT_INPUT ;; + 128 bytes : adds the interpretation input for Q15.16 numbers, mandatory for FIXPOINT ADD-ON +NONAME ;; + 56 bytes : adds :NONAME CODENNM (CODE No NaMe) +SD_CARD_LOADER ;; + 1766 bytes : to LOAD source files from SD_card +SD_CARD_READ_WRITE ;; + 1148 bytes : to read, create, write and del files + copy text files from PC to target SD_Card +BOOTLOADER ;; + 74 bytes : includes to SD_CARD\BOOT.4TH as bootloader. To do: ' BOOT IS QUIT +VOCABULARY_SET ;; + 106 bytes : adds words: VOCABULARY FORTH ASSEMBLER ALSO PREVIOUS ONLY DEFINITIONS (FORTH83) ;PROMPT ; + 22 bytes : to display prompt "ok " ;------------------------------------------------------------------------------- ; OPTIONAL ADDITIONS that can be added later by downloading their source file >-----------------------+ -; when added in kernel, they are protected against WIPE and Deep Reset... | +; however, added in kernel, they are protected against WIPE and Deep Reset... | ;------------------------------------------------------------------------------- v +;ANS_CORE_COMPLEMENT ; + 1376 bytes : required to pass coretest.4th ANS_COMP.f ;FIXPOINT ; + 422/528 bytes add HOLDS F+ F- F/ F* F#S F. S>F 2@ 2CONSTANT FIXPOINT.f ;UTILITY ; + 434/524 bytes (1/16threads) : add .S .RS WORDS U.R DUMP ? UTILITY.f ;SD_TOOLS ; + 142 bytes for trivial DIR, FAT, CLUSTER and SECTOR view, adds UTILITY SD_TOOLS.f -;ANS_CORE_COMPLEMENT ; + 924 bytes : required to pass coretest.4th ANS_COMP.f ;------------------------------------------------------------------------------- ; FAST FORTH TERMINAL configuration ;------------------------------------------------------------------------------- ;HALFDUPLEX ; to use FAST FORTH with half duplex terminal TERMINALBAUDRATE .equ 115200 ; choose value considering the frequency and the UART2USB bridge, see explanations below. -TERMINAL3WIRES ;; enable 3 wires (GND,TX,RX) with XON/XOFF software flow control (PL2303TA/HXD, CP2102) +TERMINAL3WIRES ;; (18 bytes) enable 3 wires (GND,TX,RX) with XON/XOFF software flow control (PL2303TA/HXD, CP2102) TERMINAL4WIRES ;; + 12 bytes enable 4 wires with hardware flow control on RX with RTS (PL2303TA/HXD, FT232RL) ; this RTS pin may be permanently wired on SBWTCK/TEST pin without disturbing SBW 2 wires programming -;TERMINAL5WIRES ; + 6 bytes enable 5 wires with hardware flow control on RX/TX with RTS/CTS (PL2303TA/HXD, FT232RL)... +;TERMINAL5WIRES ; + 10 bytes enable 5 wires with hardware flow control on RX/TX with RTS/CTS (PL2303TA/HXD, FT232RL)... ;=============================================================================== ; Software control flow XON/XOFF configuration: @@ -128,16 +133,15 @@ TERMINAL4WIRES ;; + 12 bytes enable 4 wires with hardware flow control o ; -------------------------------------------------------------------------------------------- ; WARNING ! if you use PL2303TA/HXD cable as supply, open the box before to weld red wire on 3v3 pad ! ; -------------------------------------------------------------------------------------------- -; 9600,19200,38400,57600 (250kHz) -; + 115200,134400 (500kHz) +; 9600 up to 134400 Bds (500kHz) ; + 201600,230400,268800 (1MHz) ; + 403200,460800,614400 (2MHz) ; + 806400,921600,1228800 (4MHz) ; + 2457600 (8MHz,PL2303TA) ; + 1843200,2457600 (8MHz,PL2303HXD) ; + 3MBds (16MHz,PL2303TA) -; + 3MBds,4MBds,5MBds (16MHz,PL2303HXD) -; + 6MBds (MSP430FR57xx,MSP430FR2355 families,24MHz) +; + 3MBds,4MBds,5MBds (16MHz,PL2303HXD with shortened cable) 5MBds at 16MHz, not too lazy !:-) +; + 6MBds (24MHz,MSP430FR57xx and MSP430FR2355 families, PL2303HXD with shortened cable) ; UARTtoUSB module with Silabs CP2102 (supply current = 20 mA) ; --------------------------------------------------------------------------------------------------- @@ -234,23 +238,23 @@ TERMINAL4WIRES ;; + 12 bytes enable 4 wires with hardware flow control o ;------------------------------------------------------------------------------- ;------------------------------------- -; name words ; comment +; name words ; comment ;------------------------------------- ;LSTACK = L0 = LEAVEPTR ; ----- RAM_ORG ; | -LSTACK_LEN .equ 16 ; | grows up +LSTACK_LEN .equ 16 ; | grows up ; V ; ^ -PSTACK_LEN .equ 48 ; | grows down +PSTACK_LEN .equ 48 ; | grows down ; | ;PSTACK=S0 ; ----- RAM_ORG + $80 ; ^ -RSTACK_LEN .equ 48 ; | grows down +RSTACK_LEN .equ 48 ; | grows down ; | ;RSTACK=R0 ; ----- RAM_ORG + $E0 ;------------------------------------- -; names bytes ; comments +; names bytes ; comments ;------------------------------------- ; PAD_I2CADR ; ----- RAM_ORG + $E0 ; PAD_I2CCNT ; @@ -266,7 +270,7 @@ TIB_LEN .equ 84 ; | grows up (ans spec. : TIB >= 80 chars) ; v ; HOLDS_ORG ; ------RAM_ORG + $190 ; ^ -HOLD_LEN .equ 34 ; | grows down (ans spec. : HOLD_LEN >= (2*n) + 2 char, with n = 16 bits/cell +HOLD_LEN .equ 34 ; | grows down (ans spec. : HOLD_LEN >= (2*n) + 2 char, with n = 16 bits/cell ; | ; HOLD_BASE ; ----- RAM_ORG + $1B2 ; @@ -284,7 +288,7 @@ HOLD_LEN .equ 34 ; | grows down (ans spec. : HOLD_LEN >= (2*n) + 2 c ; SD_BUF_I2CCNT ; ; SD_BUF ; ----- RAM_ORG + $200 ; -SD_BUF_LEN .equ 200h ; 512 bytes buffer +SD_BUF_LEN .equ 200h ; 512 bytes buffer ; ; SD_BUF_END ; ----- RAM_ORG + $400 @@ -323,24 +327,10 @@ CONTEXT .equ HOLD_BASE+24 ; CONTEXT dictionnary space (8 CELLS) CURRENT .equ HOLD_BASE+40 ; CURRENT dictionnary ptr BASE .equ HOLD_BASE+42 LINE .equ HOLD_BASE+44 ; line in interpretation (initialized by NOECHO) - ; --------------------------------------------------------------; ; RAM_ORG + $1E0 : free for user after source file compilation ; ; --------------------------------------------------------------; -RAM_ASM_ORG .equ HOLD_BASE+46 -ASMBW1 .equ HOLD_BASE+46 -ASMBW2 .equ HOLD_BASE+48 -ASMBW3 .equ HOLD_BASE+50 -ASMFW1 .equ HOLD_BASE+52 -ASMFW2 .equ HOLD_BASE+54 -ASMFW3 .equ HOLD_BASE+56 -SAV_CURRENT .equ HOLD_BASE+58 ; save current CURRENT during create assembler words -RPT_WORD .equ HOLD_BASE+60 ; for extended assembler -RAM_ASM_END .equ HOLD_BASE+62 ; -RAM_ASM_LEN .equ RAM_ASM_END-RAM_ASM_ORG -; ----------------------------------; -; RAM_ORG + $1F0 : free for user ; -; ----------------------------------; + ; -------------------------------------------------- ; RAM_ORG + $1FC : RAM SD_CARD SD_BUF 4 + 512 bytes @@ -359,41 +349,41 @@ SD_BUF_END .equ SD_BUF + 200h ; 512bytes ; -------------------------- ; FRAM INFO KERNEL CONSTANTS ; -------------------------- -INI_THREAD .word THREADS ; used by ADDON_UTILITY.f -TERMBRW_RST .word TERMBRW_INI ; set by TERMINALBAUDRATE.inc -TERMMCTLW_RST .word TERMMCTLW_INI ; set by TERMINALBAUDRATE.inc - .IF FREQUENCY = 0.25 -FREQ_KHZ .word 250 ; - .ELSEIF FREQUENCY = 0.5 -FREQ_KHZ .word 500 ; - .ELSE -FREQ_KHZ .word FREQUENCY*1000 ; user use - .ENDIF -SAVE_SYSRSTIV .word 5 ; -LPM_MODE .word CPUOFF+GIE ; LPM0 is the default mode -;LPM_MODE .word CPUOFF+GIE+SCG0 ; LPM1 is the default mode (disable FLL) -INIDP .word ROMDICT ; define RST_STATE -INIVOC .word lastvoclink ; define RST_STATE -FORTHVERSION .word VERSIO ; -FORTHADDON .word FADDON ; - .word RXON ; 1814h for user use: CALL &RXON - .word RXOFF ; 1816h for user use: CALL &RXOFF +INI_THREAD .word THREADS ; used by ADDON_UTILITY.f +TERMBRW_RST .word TERMBRW_INI ; set by TERMINALBAUDRATE.inc +TERMMCTLW_RST .word TERMMCTLW_INI ; set by TERMINALBAUDRATE.inc + .IF FREQUENCY = 0.25 +FREQ_KHZ .word 250 ; + .ELSEIF FREQUENCY = 0.5 +FREQ_KHZ .word 500 ; + .ELSE +FREQ_KHZ .word FREQUENCY*1000 ; user use + .ENDIF +SAVE_SYSRSTIV .word 5 ; +LPM_MODE .word CPUOFF+GIE ; LPM0 is the default mode +;LPM_MODE .word CPUOFF+GIE+SCG0 ; LPM1 is the default mode (disable FLL) +INIDP .word ROMDICT ; define RST_STATE +INIVOC .word lastvoclink ; define RST_STATE +FORTHVERSION .word VERSIO ; +FORTHADDON .word FADDON ; + .word RXON ; 1814h for user use: CALL &RXON + .word RXOFF ; 1816h for user use: CALL &RXOFF .IFDEF SD_CARD_LOADER - .word ReadSectorWX ; 1818h used by ADDON_SD_TOOLS.f + .word ReadSectorWX ; 1818h used by ADDON_SD_TOOLS.f .IFDEF SD_CARD_READ_WRITE - .word WriteSectorWX ; 181Ah used by ADDON_SD_TOOLS.f + .word WriteSectorWX ; 181Ah used by ADDON_SD_TOOLS.f .ENDIF ; SD_CARD_READ_WRITE .ENDIF ; SD_CARD_LOADER -; ------------------------------- +; --------------------------------------- ; VARIABLES that should be in RAM -; ------------------------------- +; --------------------------------------- .IFDEF SD_CARD_LOADER - .IF RAM_LEN < 2048 ; if RAM < 2K (FR57xx) the variables below are in INFO space (FRAM) -SD_ORG .equ INFO_ORG+2Ch ; - .ELSE ; if RAM >= 2k the variables below are in RAM -SD_ORG .equ SD_BUF_END+2 ; 1 word guard + .IF RAM_LEN < 2048 ; if RAM < 2K (FR57xx) the variables below are in INFO space (FRAM) +SD_ORG .equ INFO_ORG+2Ch ; + .ELSE ; if RAM >= 2k the variables below are in RAM +SD_ORG .equ SD_BUF_END+2 ; 1 word guard .ENDIF .org SD_ORG @@ -402,20 +392,20 @@ SD_ORG .equ SD_BUF_END+2 ; 1 word guard ; FAT FileSystemInfos ; --------------------------------------- FATtype .equ SD_ORG+0 -BS_FirstSectorL .equ SD_ORG+2 ; init by SD_Init, used by RW_Sector_CMD -BS_FirstSectorH .equ SD_ORG+4 ; init by SD_Init, used by RW_Sector_CMD -OrgFAT1 .equ SD_ORG+6 ; init by SD_Init, -FATSize .equ SD_ORG+8 ; init by SD_Init, -OrgFAT2 .equ SD_ORG+10 ; init by SD_Init, -OrgRootDIR .equ SD_ORG+12 ; init by SD_Init, (FAT16 specific) -OrgClusters .equ SD_ORG+14 ; init by SD_Init, Sector of Cluster 0 -SecPerClus .equ SD_ORG+16 ; init by SD_Init, byte size +BS_FirstSectorL .equ SD_ORG+2 ; init by SD_Init, used by RW_Sector_CMD +BS_FirstSectorH .equ SD_ORG+4 ; init by SD_Init, used by RW_Sector_CMD +OrgFAT1 .equ SD_ORG+6 ; init by SD_Init, +FATSize .equ SD_ORG+8 ; init by SD_Init, +OrgFAT2 .equ SD_ORG+10 ; init by SD_Init, +OrgRootDIR .equ SD_ORG+12 ; init by SD_Init, (FAT16 specific) +OrgClusters .equ SD_ORG+14 ; init by SD_Init, Sector of Cluster 0 +SecPerClus .equ SD_ORG+16 ; init by SD_Init, byte size SD_LOW_LEVEL .equ SD_ORG+18 ; --------------------------------------- ; SD command ; --------------------------------------- -SD_CMD_FRM .equ SD_LOW_LEVEL ; SD_CMDx inverted frame ${CRC7,ll,LL,hh,HH,CMD} +SD_CMD_FRM .equ SD_LOW_LEVEL ; SD_CMDx inverted frame ${CRC7,ll,LL,hh,HH,CMD} SectorL .equ SD_LOW_LEVEL+6 SectorH .equ SD_LOW_LEVEL+8 @@ -429,11 +419,11 @@ SD_FAT_LEVEL .equ SD_LOW_LEVEL+14 ; --------------------------------------- ; FAT entry ; --------------------------------------- -ClusterL .equ SD_FAT_LEVEL ; -ClusterH .equ SD_FAT_LEVEL+2 ; -NewClusterL .equ SD_FAT_LEVEL+4 ; -NewClusterH .equ SD_FAT_LEVEL+6 ; -CurFATsector .equ SD_FAT_LEVEL+8 ; current FATSector of last free cluster +ClusterL .equ SD_FAT_LEVEL ; +ClusterH .equ SD_FAT_LEVEL+2 ; +NewClusterL .equ SD_FAT_LEVEL+4 ; +NewClusterH .equ SD_FAT_LEVEL+6 ; +CurFATsector .equ SD_FAT_LEVEL+8 ; current FATSector of last free cluster ; --------------------------------------- ; DIR entry @@ -550,14 +540,14 @@ T .reg R11 S .reg R12 ; Forth virtual machine -IP .reg R13 ; interpretative pointer -TOS .reg R14 ; first PSP cell -PSP .reg R15 ; PSP = Parameters Stack Pointer (stack data) +IP .reg R13 ; interpretative pointer +TOS .reg R14 ; first PSP cell +PSP .reg R15 ; PSP = Parameters Stack Pointer (stack data) -mNEXT .MACRO ; return for low level words (written in assembler) +mNEXT .MACRO ; return (inverted round trip) for low level words (written in assembler) MOV @IP+,PC ; 4 fetch code address into PC, IP=PFA - .ENDM ; 4 cycles,1word = ITC -2cycles -1 word + .ENDM ; 4 cycles, 1word = ITC -2cycles -1 word NEXT .equ 4D30h ; 4 MOV @IP+,PC @@ -570,6 +560,8 @@ mSEMI .MACRO MOV @IP+,PC .ENDM +; that is obviously faster than the same sized "BR #EXIT,PC" ! + ;------------------------------------------------------------------------------- ; mDODOES leave on parameter stack the PFA of a CREATE definition and execute Master word ;------------------------------------------------------------------------------- @@ -676,10 +668,6 @@ DOCOL3 .equ 522Dh ; 1 ADD #4,IP .ENDCASE ; DTC -;------------------------------------------------------------------------------- -; INTERPRETER LOGIC -;------------------------------------------------------------------------------- - ;https://forth-standard.org/standard/core/EXIT ;C EXIT -- exit a colon definition; CALL #EXIT performs ASMtoFORTH (10 cycles) ; JMP #EXIT performs EXIT @@ -688,15 +676,6 @@ EXIT MOV @RSP+,IP ; 2 pop previous IP (or next PC) from return sta MOV @IP+,PC ; 4 = NEXT ; 6 = ITC - 2 -;Z lit -- x fetch inline literal to stack -; This is the execution part of LITERAL. - FORTHWORD "LIT" -lit SUB #2,PSP ; 2 push old TOS.. - MOV TOS,0(PSP) ; 3 ..onto stack - MOV @IP+,TOS ; 2 fetch new TOS value - MOV @IP+,PC ; 4 NEXT - ; 11 = ITC - 2 - ;------------------------------------------------------------------------------- ; STACK OPERATIONS ;------------------------------------------------------------------------------- @@ -708,6 +687,14 @@ DUP SUB #2,PSP ; 2 push old TOS.. MOV TOS,0(PSP) ; 3 ..onto stack mNEXT ; 4 +; https://forth-standard.org/standard/core/TwoDUP +; 2DUP x1 x2 -- x1 x2 x1 x2 dup top 2 cells + FORTHWORD "2DUP" +TWODUP MOV TOS,-2(PSP) ;3 -- x1 x2 x x2 + MOV @PSP,-4(PSP) ;4 -- x1 x2 x1 x2 + SUB #4,PSP ;1 -- x1 x x x2 + mNEXT + ;https://forth-standard.org/standard/core/qDUP ;C ?DUP x -- 0 | x x DUP if nonzero FORTHWORD "?DUP" @@ -723,7 +710,9 @@ DROP MOV @PSP+,TOS ; 2 ;https://forth-standard.org/standard/core/NIP ;C NIP x1 x2 -- x2 Drop the first item below the top of stack + .IFDEF ANS_CORE_COMPLEMENT FORTHWORD "NIP" + .ENDIF NIP ADD #2,PSP ; 1 mNEXT ; 4 @@ -735,23 +724,6 @@ SWAP MOV @PSP,W ; 2 MOV W,TOS ; 1 mNEXT ; 4 -;https://forth-standard.org/standard/core/OVER -;C OVER x1 x2 -- x1 x2 x1 - FORTHWORD "OVER" -OVER MOV TOS,-2(PSP) ; 3 -- x1 (x2) x2 - MOV @PSP,TOS ; 2 -- x1 (x2) x1 - SUB #2,PSP ; 1 -- x1 x2 x1 - mNEXT ; 4 - -;https://forth-standard.org/standard/core/ROT -;C ROT x1 x2 x3 -- x2 x3 x1 - FORTHWORD "ROT" -ROT MOV @PSP,W ; 2 fetch x2 - MOV TOS,0(PSP) ; 3 store x3 - MOV 2(PSP),TOS ; 3 fetch x1 - MOV W,2(PSP) ; 3 store x2 - mNEXT ; 4 - ;https://forth-standard.org/standard/core/toR ;C >R x -- R: -- x push to return stack FORTHWORD ">R" @@ -767,14 +739,6 @@ RFROM SUB #2,PSP ; 1 MOV @RSP+,TOS ; 2 mNEXT ; 4 -;https://forth-standard.org/standard/core/RFetch -;C R@ -- x R: x -- x fetch from rtn stk - FORTHWORD "R@" -RFETCH SUB #2,PSP - MOV TOS,0(PSP) - MOV @RSP,TOS - mNEXT - ;https://forth-standard.org/standard/core/DEPTH ;C DEPTH -- +n number of items on stack, must leave 0 if stack empty FORTHWORD "DEPTH" @@ -786,46 +750,9 @@ DECPSP SUB #2,PSP ; post decrement stack... mNEXT ;------------------------------------------------------------------------------- -; MEMORY OPERATIONS -;------------------------------------------------------------------------------- - -;https://forth-standard.org/standard/core/Fetch -;C @ a-addr -- x fetch cell from memory - FORTHWORD "@" -FETCH MOV @TOS,TOS - mNEXT - -;https://forth-standard.org/standard/core/Store -;C ! x a-addr -- store cell in memory - FORTHWORD "!" -STORE MOV @PSP+,0(TOS) ;4 - MOV @PSP+,TOS ;2 - mNEXT ;4 - -;https://forth-standard.org/standard/core/CFetch -;C C@ c-addr -- char fetch char from memory - FORTHWORD "C@" -CFETCH MOV.B @TOS,TOS ;2 - mNEXT ;4 - -;https://forth-standard.org/standard/core/CStore -;C C! char c-addr -- store char in memory - FORTHWORD "C!" -CSTORE MOV.B @PSP+,0(TOS) ;4 - ADD #1,PSP ;1 - MOV @PSP+,TOS ;2 - mNEXT - -;------------------------------------------------------------------------------- ; ARITHMETIC OPERATIONS ;------------------------------------------------------------------------------- -;https://forth-standard.org/standard/core/Plus -;C + n1/u1 n2/u2 -- n3/u3 add n1+n2 - FORTHWORD "+" -PLUS ADD @PSP+,TOS - mNEXT - ;https://forth-standard.org/standard/core/Minus ;C - n1/u1 n2/u2 -- n3/u3 n3 = n1-n2 FORTHWORD "-" @@ -848,7 +775,7 @@ ONEMINUS SUB #1,TOS ;https://forth-standard.org/standard/double/DABS ;C DABS d1 -- |d1| absolute value - FORTHWORD "DABS" +; FORTHWORD "DABS" DABBS AND #-1,TOS ; clear V, set N JGE DABBSEND ; if positive DNEGATE XOR #-1,0(PSP) @@ -858,6 +785,23 @@ DNEGATE XOR #-1,0(PSP) DABBSEND mNEXT ;------------------------------------------------------------------------------- +; MEMORY OPERATIONS +;------------------------------------------------------------------------------- + +;https://forth-standard.org/standard/core/Fetch +;C @ a-addr -- x fetch cell from memory + FORTHWORD "@" +FETCH MOV @TOS,TOS + mNEXT + +;https://forth-standard.org/standard/core/Store +;C ! x a-addr -- store cell in memory + FORTHWORD "!" +STORE MOV @PSP+,0(TOS) ;4 + MOV @PSP+,TOS ;2 + mNEXT ;4 + +;------------------------------------------------------------------------------- ; COMPARAISON OPERATIONS ;------------------------------------------------------------------------------- @@ -873,66 +817,25 @@ ZEROEQUAL SUB #1,TOS ; borrow (clear cy) if TOS was 0 FORTHWORD "0<" ZEROLESS ADD TOS,TOS ;1 set carry if TOS negative SUBC TOS,TOS ;1 TOS=-1 if carry was clear - XOR #-1,TOS ;1 TOS=-1 if carry was set +INVERT XOR #-1,TOS ;1 TOS=-1 if carry was set mNEXT ;https://forth-standard.org/standard/core/Equal ;C = x1 x2 -- flag test x1=x2 FORTHWORD "=" EQUAL SUB @PSP+,TOS ;2 - JZ TOSTRUE ;2 -TOSFALSE MOV #0,TOS ;1 + JZ INVERT ;2 +TOSFALSE AND #0,TOS ;1 flag Z = 1 mNEXT ;4 ;https://forth-standard.org/standard/core/Uless ;C U< u1 u2 -- flag test u1 +5 - -;https://forth-standard.org/standard/core/more -;C > n1 n2 -- flag test n1>n2, signed - FORTHWORD ">" -GREATER SUB @PSP+,TOS ;2 TOS=n2-n1 - JL TOSTRUE ;2 signed - JGE TOSFALSE ;2 --> +5 - -;------------------------------------------------------------------------------- -; SYSTEM CONSTANTS -;------------------------------------------------------------------------------- - -;https://forth-standard.org/standard/core/BL -;C BL -- char an ASCII space - FORTHWORD "BL" -FBLANK mDOCON - .word 32 - -;------------------------------------------------------------------------------- -; SYSTEM VARIABLES -;------------------------------------------------------------------------------- - -;https://forth-standard.org/standard/core/BASE -;C BASE -- a-addr holds conversion radix - FORTHWORD "BASE" -FBASE mDOCON - .word BASE ; VARIABLE address in RAM space - -;https://forth-standard.org/standard/core/STATE -;C STATE -- a-addr holds compiler state - FORTHWORD "STATE" -FSTATE mDOCON - .word STATE ; VARIABLE address in RAM space +ULESS SUB @PSP+,TOS ;2 + JNC TOSFALSE ;2 unsigned + JZ ULESSEND ;2 + MOV #-1,TOS ;1 flag Z = 0 +ULESSEND mNEXT ;4 ;------------------------------------------------------------------------------- ; ANS complement OPTION @@ -954,11 +857,6 @@ FSTATE mDOCON LESSNUM MOV #HOLD_BASE,&HP mNEXT -;https://forth-standard.org/standard/core/UMDivMOD -; UM/MOD udlo|udhi u1 -- r q unsigned 32/16->r16 q16 - FORTHWORD "UM/MOD" -UMSLASHMOD PUSH #DROP ;3 as return address for MU/MOD - ; unsigned 32-BIT DiViDend : 16-BIT DIVisor --> 32-BIT QUOTient, 16-BIT REMainder ; 2 times faster if DVDhi = 0 (it's the general case) @@ -972,15 +870,14 @@ UMSLASHMOD PUSH #DROP ;3 as return address for MU/MOD ; Y = QUOThi = ud2hi = ud2hi ; rDODOES = count -; MU/MOD DVDlo DVDhi DIVlo -- REMlo QUOTlo QUOThi, also used by fixpoint and # MUSMOD MOV TOS,T ;1 T = DIVlo MOV 2(PSP),S ;3 S = DVDlo MOV @PSP,TOS ;2 TOS = DVDhi MUSMOD1 MOV #0,W ;1 W = REMlo = 0 -MUSMOD2 MOV #32,rDODOES ;2 init loop count -; ----------------------------------------- + MOV #32,rDODOES ;2 init loop count CMP #0,TOS ;1 DVDhi=0 ? JNZ MDIV1 ;2 no +; ----------------------------------------- RRA rDODOES ;1 yes:loop count / 2 MOV S,TOS ;1 DVDhi <-- DVDlo MOV #0,S ;1 DVDlo <-- 0 @@ -1030,9 +927,9 @@ NUMS mDOCOL .word NUM ; X=QUOTlo FORTHtoASM ; SUB #2,IP ;1 restore NUM return - CMP #0,X ;1 test ud2lo first (result generally false) + CMP #0,X ;1 test ud2lo first (generally <>0) JNZ NUM1 ;2 - CMP #0,TOS ;1 then test ud2hi (result generally true) + CMP #0,TOS ;1 then test ud2hi (generally =0) JNZ NUM1 ;2 mSEMI ;6 10 words, about 241/417 cycles/char @@ -1062,57 +959,30 @@ SIGN CMP #0,TOS ;https://forth-standard.org/standard/double/Dd ;C D. dlo dhi -- display d (signed) - FORTHWORD "D." +; FORTHWORD "D." DDOT mDOCOL .word LESSNUM,DUP,TOR,DABBS,NUMS - .word RFROM,SIGN,NUMGREATER,TYPE,SPACE,EXIT + .word RFROM,SIGN,NUMGREATER,TYPE + .word FBLANK,EMIT,EXIT ;https://forth-standard.org/standard/core/Ud ;C U. u -- display u (unsigned) FORTHWORD "U." -UDOT MOV #0,Y -UDOT1 SUB #2,PSP ; convert n|u to d|ud - MOV TOS,0(PSP) - MOV Y,TOS - JMP DDOT +UDOT MOV #0,Y ; 1 +UDOT1 SUB #2,PSP ; 1 convert n|u to d|ud + MOV TOS,0(PSP) ; 3 + MOV Y,TOS ; 1 + JMP DDOT ; 2 ;https://forth-standard.org/standard/core/d ;C . n -- display n (signed) FORTHWORD "." -DOT CMP #0,TOS +DOT CMP #0,TOS ; JGE UDOT MOV #-1,Y JMP UDOT1 ;------------------------------------------------------------------------------- -; DICTIONARY MANAGEMENT -;------------------------------------------------------------------------------- - -;https://forth-standard.org/standard/core/HERE -;C HERE -- addr returns memory ptr - FORTHWORD "HERE" -HERE SUB #2,PSP - MOV TOS,0(PSP) - MOV &DDP,TOS - mNEXT - -;https://forth-standard.org/standard/core/ALLOT -;C ALLOT n -- allocate n bytes - FORTHWORD "ALLOT" -ALLOT ADD TOS,&DDP - MOV @PSP+,TOS - mNEXT - -;https://forth-standard.org/standard/core/CComma -;C C, char -- append char - FORTHWORD "C," -CCOMMA MOV &DDP,W - MOV.B TOS,0(W) - ADD #1,&DDP - MOV @PSP+,TOS - mNEXT - -;------------------------------------------------------------------------------- ; BRANCH and LOOP OPERATORS ;------------------------------------------------------------------------------- @@ -1153,10 +1023,9 @@ xploop ADD TOS,0(RSP) ;4 increment INDEX by TOS value xloopnext BIT #100h,SR ;2 is overflow bit set? JZ BRAN ;2 no overflow = loop ADD #2,IP ;1 overflow = loop done, skip branch ofs -UNXLOOP ADD #4,RSP ;1 empty RSP + ADD #4,RSP ;1 empty RSP mNEXT ;4 16~ taken or not taken xloop/loop - ;Z (loop) R: sys1 sys2 -- | sys1 sys2 ; run-time code for LOOP ; Add 1 to the loop index. If loop terminates, clean up the @@ -1165,11 +1034,6 @@ UNXLOOP ADD #4,RSP ;1 empty RSP xloop ADD #1,0(RSP) ;4 increment INDEX JMP xloopnext ;2 -;https://forth-standard.org/standard/core/UNLOOP -;C UNLOOP -- R: sys1 sys2 -- drop loop parms - FORTHWORD "UNLOOP" -UNLOOP JMP UNXLOOP - ;https://forth-standard.org/standard/core/I ;C I -- n R: sys1 sys2 -- sys1 sys2 ;C get the innermost loop index @@ -1180,16 +1044,6 @@ II SUB #2,PSP ;1 make room in TOS SUB 2(RSP),TOS ;3 mNEXT ;4 13~ -;https://forth-standard.org/standard/core/J -;C J -- n R: 4*sys -- 4*sys -;C get the second loop index - FORTHWORD "J" -JJ SUB #2,PSP ; make room in TOS - MOV TOS,0(PSP) - MOV 4(RSP),TOS ; index = loopctr - fudge - SUB 6(RSP),TOS - mNEXT - ; ------------------------------------------------------------------------------ ; TERMINAL I/O, input part ; ------------------------------------------------------------------------------ @@ -1213,61 +1067,6 @@ KEYLOOP BIT #UCRXIFG,&TERM_IFG ; loop if bit0 = 0 in interupt flag register ; INTERPRETER INPUT, the kernel of kernel ! ;------------------------------------------------------------------------------- - .IFDEF SD_CARD_LOADER - .include "forthMSP430FR_SD_ACCEPT.asm" - .ENDIF - - .IFDEF DEFER_ACCEPT - -;https://forth-standard.org/standard/core/ACCEPT -;C ACCEPT addr addr len -- addr len' get line at addr to interpret len' chars - FORTHWORD "ACCEPT" -ACCEPT MOV @PC+,PC ;3 Code Field Address (CFA) of ACCEPT -PFAACCEPT .word BODYACCEPT ; Parameter Field Address (PFA) of ACCEPT -BODYACCEPT ; BODY of ACCEPT = default execution of ACCEPT - - .ELSE - -;https://forth-standard.org/standard/core/ACCEPT -;C ACCEPT addr addr len -- addr len' get line at addr to interpret len' chars - FORTHWORD "ACCEPT" -ACCEPT - - .ENDIF - - .IFDEF HALFDUPLEX ; to use FAST FORTH with half duplex input terminal (bluetooth or wifi connexion) - - .include "forthMSP430FR_HALFDUPLEX.asm" - - .ELSE ; to use FAST FORTH with full duplex terminal (USBtoUART bridge) - -; con speed of TERMINAL link, there are three bottlenecks : -; 1- time to send XOFF/RTS_high on CR (CR+LF=EOL), first emergency. -; 2- the char loop time, -; 3- the time between sending XON/RTS_low and clearing UCRXIFG on first received char, -; everything must be done to reduce these times, taking into account the necessity of switching to SLEEP (LPMx mode). -; ----------------------------------; -; ACCEPT part I prepare TERMINAL_INT; -; ----------------------------------; - MOV #ENDACCEPT,S ;2 S = XOFF_ret - MOV #AKEYREAD1,T ;2 T = XON_ret - PUSHM #3,IP ;5 PUSHM IP,S,T r-- ACCEPT_ret XOFF_ret XON_ret - MOV TOS,W ;1 -- addr len - MOV @PSP,TOS ;2 -- org ptr ) - ADD TOS,W ;1 -- org ptr W=Bound ) - MOV #0Dh,T ;2 T = 'CR' to speed up char loop in part II > prepare stack and registers for TERMINAL_INT use - MOV #20h,S ;2 S = 'BL' to speed up char loop in part II ) - MOV #AYEMIT_RET,IP ;2 IP = return for YEMIT ) - BIT #UCRXIFG,&TERM_IFG ;3 RX_Int ? - JZ ACCEPTNEXT ;2 no : case of quiet input terminal - MOV &TERM_RXBUF,Y ;3 yes: clear RX_Int - CMP #0Ah,Y ;2 received char = LF ? (end of downloading ?) - JNZ RXON ;2 no : send XON then RET to AKEYREAD1 to process first char of new line. -ACCEPTNEXT ADD #2,RSP ;1 replace XON_ret = AKEYREAD1 by XON_ret = SLEEP - MOV #SLEEP,X ;2 - PUSHM #5,IP ;7 PUSH IP,S,T,W,X r-- ACCEPT_ret XOFF_ret YEMIT_ret 'BL' 'CR' bound XON_ret -; ----------------------------------; - ; ----------------------------------; RXON ; ; ----------------------------------; @@ -1301,8 +1100,8 @@ RXOFF ; ASMWORD "SLEEP" ; may be redirected SLEEP MOV @PC+,PC ;3 Code Field Address (CFA) of SLEEP PFASLEEP .word BODYSLEEP ; Parameter Field Address (PFA) of SLEEP, with default value -BODYSLEEP BIS &LPM_MODE,SR ;3 enter in LPMx sleep mode with GIE=1 -; NOP ; +BODYSLEEP CALL #RXON ;4 + BIS &LPM_MODE,SR ;3 enter in LPMx sleep mode with GIE=1 ; ----------------------------------; default FAST FORTH mode (for its input terminal use) : LPM0. ;############################################################################################################### @@ -1327,11 +1126,67 @@ BODYSLEEP BIS &LPM_MODE,SR ;3 enter in LPMx sleep mode with GIE=1 ; to force return to SLEEP. ; or (bad idea ? previous SR flags are lost) simply : ADD #2 RSP, then RET instead of RETI - ; ==================================; JMP SLEEP ;2 here is the return for any interrupts, else TERMINAL_INT :-) ; ==================================; + .IFDEF SD_CARD_LOADER + .include "forthMSP430FR_SD_ACCEPT.asm" + .ENDIF + + .IFDEF DEFER_ACCEPT + +;https://forth-standard.org/standard/core/ACCEPT +;C ACCEPT addr addr len -- addr len' get line at addr to interpret len' chars + FORTHWORD "ACCEPT" +ACCEPT MOV @PC+,PC ;3 Code Field Address (CFA) of ACCEPT +PFAACCEPT .word BODYACCEPT ; Parameter Field Address (PFA) of ACCEPT +BODYACCEPT ; BODY of ACCEPT = default execution of ACCEPT + + .ELSE + +;https://forth-standard.org/standard/core/ACCEPT +;C ACCEPT addr addr len -- addr len' get line at addr to interpret len' chars + FORTHWORD "ACCEPT" +ACCEPT + + .ENDIF + + .IFDEF HALFDUPLEX ; to use FAST FORTH with half duplex input terminal (bluetooth or wifi connexion) + + .include "forthMSP430FR_HALFDUPLEX.asm" + + .ELSE ; to use FAST FORTH with full duplex terminal (USBtoUART bridge) + +; con speed of TERMINAL link, there are three bottlenecks : +; 1- time to send XOFF/RTS_high on CR (CR+LF=EOL), first emergency. +; 2- the char loop time, +; 3- the time between sending XON/RTS_low and clearing UCRXIFG on first received char, +; everything must be done to reduce these times, taking into account the necessity of switching to SLEEP (LPMx mode). +; ----------------------------------; +; ACCEPT part I prepare TERMINAL_INT; +; ----------------------------------; + MOV #ENDACCEPT,S ;2 S = XOFF_ret + MOV #AKEYREAD1,T ;2 T = XON_ret + PUSHM #3,IP ;5 PUSHM IP,S,T r-- ACCEPT_ret XOFF_ret XON_ret + MOV TOS,W ;1 -- addr len + MOV @PSP,TOS ;2 -- org ptr ) + ADD TOS,W ;1 -- org ptr W=Bound ) + MOV #0Dh,T ;2 T = 'CR' to speed up char loop in part II > prepare stack and registers for TERMINAL_INT use + MOV #20h,S ;2 S = 'BL' to speed up char loop in part II ) + MOV #AYEMIT_RET,IP ;2 IP = return for YEMIT ) + BIT #UCRXIFG,&TERM_IFG ;3 RX_Int ? + JZ ACCEPTNEXT ;2 no : case of quiet input terminal + MOV &TERM_RXBUF,Y ;3 yes: clear RX_Int + CMP #0Ah,Y ;2 received char = LF ? (end of downloading ?) + JNZ RXON ;2 no : send XON then RET to AKEYREAD1 to process this first char of new line. +; ----------------------------------; +ACCEPTNEXT ADD #2,RSP ;1 replace XON_ret = AKEYREAD1 by XON_ret = SLEEP + PUSHM #4,IP ;6 PUSH IP,S,T,W r-- ACCEPT_ret XOFF_ret YEMIT_ret 'BL' 'CR' bound XON_ret + JMP SLEEP ;2 which calls RXON before falling down to LPMx mode +; ----------------------------------; + + ; **********************************; TERMINAL_INT ; <--- TEMR RX interrupt vector, delayed by the LPMx wake up time ; **********************************; if wake up time increases, max bauds rate decreases... @@ -1423,7 +1278,7 @@ BODYEMIT MOV TOS,Y ; output character to the default output: T .IFDEF DEFER_ACCEPT ; CIB -- addr of Current Input Buffer - FORTHWORD "CIB" ; constant, may be redirected as SDIB_ORG by OPEN. +; FORTHWORD "CIB" ; constant, may be redirected as SDIB_ORG by OPEN. FCIB mDOCON ; Code Field Address (CFA) of FCIB PFACIB .WORD TIB_ORG ; Parameter Field Address (PFA) of FCIB @@ -1440,12 +1295,12 @@ REFILL SUB #6,PSP ;2 ; REFILL accept one line from input and leave org len of input buffer ; : REFILL TIB DUP TIB_LEN ACCEPT ; -- TIB len shared by QUIT and [ELSE] -REFILL SUB #6,PSP ;2 - MOV TOS,4(PSP) ;3 - MOV #TIB_LEN,TOS ;2 - MOV #TIB_ORG,0(PSP) ;4 - MOV @PSP,2(PSP) ;4 - JMP ACCEPT ;2 +REFILL SUB #6,PSP ;2 -- x x x x + MOV TOS,4(PSP) ;3 -- Saved_TOS x x TOS + MOV #TIB_LEN,TOS ;2 -- Saved_TOS x x TIB_LEN + MOV #TIB_ORG,0(PSP) ;4 -- Saved_TOS x TIB TIB_LEN + MOV @PSP,2(PSP) ;4 -- Saved_TOS TIB TIB TIB_LEN + JMP ACCEPT ;2 -- TIB LEN .ENDIF @@ -1461,49 +1316,25 @@ NOECHO MOV #NEXT,&YEMIT ; NEXT = 4030h = MOV @IP+,PC MOV #1,&LINE ; mNEXT -;https://forth-standard.org/standard/core/SPACE -;C SPACE -- output a space - FORTHWORD "SPACE" -SPACE SUB #2,PSP ;1 - MOV TOS,0(PSP) ;3 - MOV #20h,TOS ;2 - JMP EMIT ;17~ 23~ - -;https://forth-standard.org/standard/core/SPACES -;C SPACES n -- output n spaces - FORTHWORD "SPACES" -SPACES CMP #0,TOS - JZ ONEDROP - PUSH IP - MOV #SPACESNEXT,IP - JMP SPACE ;25~ -SPACESNEXT FORTHtoASM - SUB #2,IP ;1 - SUB #1,TOS ;1 - JNZ SPACE ;25~ ==> 27~ by space ==> 2.963 MBds @ 8 MHz -DROPEXIT MOV @RSP+,IP ; -ONEDROP MOV @PSP+,TOS ; -- drop n - mNEXT ; - ;https://forth-standard.org/standard/core/TYPE ;C TYPE adr len -- type line to terminal FORTHWORD "TYPE" TYPE CMP #0,TOS JZ TWODROP ; abort fonction - PUSHM #2,TOS ;4 R-- len,IP - MOV #TYPE_NEXT,IP -TYPELOOP MOV @PSP,Y ;2 -- adr x ; 30~ char loop - MOV.B @Y+,TOS ;2 + PUSHM #2,TOS ;4 R-- len IP + MOV #TYPE_NEXT,IP ; +TYPELOOP MOV @PSP,Y ;2 -- adr x 30~ char loop + MOV.B @Y+,TOS ;2 -- adr char MOV Y,0(PSP) ;3 -- adr+1 char - SUB #2,PSP ;1 emit consumes one cell + SUB #2,PSP ;1 -- adr+1 x char emit consumes one cell JMP EMIT ;15 -TYPE_NEXT FORTHtoASM +TYPE_NEXT FORTHtoASM ; -- adr+1 x SUB #2,IP ;1 - SUB #1,2(RSP) ;4 len-1 + SUB #1,2(RSP) ;4 -- adr+1 x R-- len-1 IP JNZ TYPELOOP ;2 POPM #2,TOS ;4 POPM IP,TOS TWODROP ADD #2,PSP ; - MOV @PSP+,TOS ; -- +ONEDROP MOV @PSP+,TOS ; -- mNEXT ; ;https://forth-standard.org/standard/core/CR @@ -1520,6 +1351,14 @@ BODYCR mDOCOL ; send CR to the default output device ; STRINGS PROCESSING ; ------------------------------------------------------------------------------ +;Z lit -- x fetch inline literal to stack +; This is the execution part of LITERAL. +; FORTHWORD "LIT" +lit SUB #2,PSP ; 2 push old TOS.. + MOV TOS,0(PSP) ; 3 ..onto stack + MOV @IP+,TOS ; 2 fetch new TOS value + MOV @IP+,PC ; 4 NEXT + ;Z (S") -- addr u run-time code for S" ; get address and length of string. XSQUOTE SUB #4,PSP ; 1 -- x x TOS ; push old TOS on stack @@ -1539,15 +1378,13 @@ SQUOTE MOV #0,&CAPS ; CAPS OFF .word lit,XSQUOTE,COMMA SQUOTE1 .word lit,'"',WORDD ; -- c-addr (= HERE) FORTHtoASM - MOV @RSP+,IP MOV #32,&CAPS ; CAPS ON MOV.B @TOS,TOS ; -- u - SUB #1,TOS ; -- u-1 bytes - ADD TOS,&DDP + ADD #1,TOS ; -- u+1 + BIT #1,TOS ;1 carry set if odd + ADDC TOS,&DDP +DROPEXIT MOV @RSP+,IP MOV @PSP+,TOS -CELLPLUSALIGN - BIT #1,&DDP ;3 carry set if odd - ADDC #2,&DDP ;4 +2/+3 bytes mNEXT ;https://forth-standard.org/standard/core/Dotq @@ -1561,24 +1398,78 @@ DOTQUOTE mDOCOL ; INTERPRETER ;------------------------------------------------------------------------------- + .IFNDEF MSP430ASSEMBLER + ;https://forth-standard.org/standard/core/WORD ;C WORD char -- addr Z=1 if len=0 -; parse a word delimited by char separator, by default "word" is capitalized ([CAPS]=32) +; parse a word delimited by char separator; by default (CAPS=$20), this "word" is capitalized +; when used by S" (CAPS=0), this "word" will not be capitalized. FORTHWORD "WORD" -WORDD MOV #SOURCE_LEN,S ;2 -- separator - MOV @S+,X ;2 X = str_len - MOV @S+,W ;2 W = str_org - ADD W,X ;1 W = str_org X = str_org + str_len = str_end - ADD @S+,W ;2 W = str_org + >IN = str_ptr X = str_end - MOV @S,Y ;2 -- separator W = str_ptr X = str_end Y = HERE, as dst_ptr -SKIPCHARLOO CMP W,X ;1 str_ptr = str_end ? - JZ EOL_END ;2 -- separator if yes : End Of Line ! - CMP.B @W+,TOS ;2 does char = separator ? - JZ SKIPCHARLOO ;2 -- separator if yes -SCANWORD SUB #1,W ;1 +WORDD +SKIPCHAR MOV #SOURCE_LEN,S ;2 -- separator + MOV @S+,X ;2 X = str_len + MOV @S+,W ;2 W = str_org + ADD W,X ;1 W = str_org X = str_org + str_len = str_end + ADD @S+,W ;2 W = str_org + >IN = str_ptr X = str_end + MOV @S,Y ;2 W = str_ptr X = str_end Y = HERE, as dst_ptr +SKIPCHARLOO CMP W,X ;1 str_ptr = str_end ? + JZ SCANWORDEND ;2 if yes : End Of Line ! + CMP.B @W+,TOS ;2 does char = separator ? + JZ SKIPCHARLOO ;2 if yes; 7~ loop + SUB #1,W ;1 +SKIPCHARNXT +SCANWORD MOV #96,T ;2 T = 96 = ascii(a)-1 (test value set in a register before SCANWORD loop) +SCANWORDLOO MOV.B S,0(Y) ;3 first time make room in dst for word length; next, put char @ dst. + CMP W,X ;1 str_ptr = str_end ? + JZ SCANWORDEND ;2 if yes + MOV.B @W+,S ;2 + CMP.B S,TOS ;1 does char = separator ? + JZ SCANWORDEND ;2 if yes + ADD #1,Y ;1 increment dst just before test loop + CMP.B S,T ;1 char U< 'a' ? ('a'-1 U>= char) this condition is tested at each loop + JC SCANWORDLOO ;2 15~ upper case char loop + CMP.B #123,S ;2 char U>= 'z'+1 ? + JC SCANWORDLOO ;2 if yes + SUB.B &CAPS,S ;3 convert lowercase char to uppercase if CAPS ON (CAPS=32) + JMP SCANWORDLOO ;2 24~ lower case char loop +SCANWORDEND SUB &SOURCE_ORG,W ;3 -- separator W=str_ptr - str_org = new >IN (first char separator next) + MOV W,&TOIN ;3 update >IN + MOV &DDP,TOS ;3 -- c-addr + SUB TOS,Y ;1 Y=Word_Length Z=1 + MOV.B Y,0(TOS) ;3 + mNEXT ;4 -- c-addr 40 words Z=1 <==> lenght=0 <==> EOL + + .ELSE + +;;Z SKIP char -- addr ; skip all occurring character 'char' in input stream +SKIP MOV.B #0,Y ; used by assembler to parse input stream + JMP SKIPCHAR + +;https://forth-standard.org/standard/core/WORD +;C WORD char -- addr Z=1 if len=0 +; parse a word delimited by char separator; by default (CAPS=$20), this "word" is capitalized +; when used by S" (CAPS=0), this "word" will not be capitalized. + FORTHWORD "WORD" +WORDD MOV.B TOS,Y ;1 +SKIPCHAR MOV &SOURCE_LEN,X ;3 -- separator + MOV &SOURCE_ORG,W ;3 W = str_org + ADD W,X ;1 W = str_org X = str_org + str_len = str_end + ADD &TOIN,W ;3 W = str_org + >IN = str_ptr X = str_end +SKIPCHARLOO CMP W,X ;1 str_ptr = str_end ? + JZ SKIPCHARNXT ;2 if yes : End Of Line ! + CMP.B @W+,TOS ;2 does char = separator ? + JZ SKIPCHARLOO ;2 if yes; 7~ loop + SUB #1,W ;1 +SKIPCHARNXT AND.B Y,TOS ;1 + JNZ SCANWORD ;2 +SKIPEND: MOV W,TOS ;1 -- addr + SUB &SOURCE_ORG,W ;3 -- addr W=Ptr-Org=Toin + MOV W,&TOIN ;3 + mNEXT ;4 + +SCANWORD MOV &DDP,Y ;3 Y = HERE, as dst_ptr MOV #96,T ;2 T = 96 = ascii(a)-1 (test value set in a register before SCANWORD loop) -SCANWORDLOO ; -- separator 15/24 cycles loop for upper/lower case char... write words in upper case ! - MOV.B S,0(Y) ;3 first time make room in dst for word length, then put char @ dst. +SCANWORDLOO MOV.B S,0(Y) ;3 first time make room in dst for word length; next, put char @ dst. CMP W,X ;1 str_ptr = str_end ? JZ SCANWORDEND ;2 if yes MOV.B @W+,S ;2 @@ -1591,12 +1482,13 @@ SCANWORDLOO ; -- separator 15/24 cycles loop for upper/ JC SCANWORDLOO ;2 if yes SUB.B &CAPS,S ;3 convert lowercase char to uppercase if CAPS ON (CAPS=32) JMP SCANWORDLOO ;2 24~ lower case char loop -SCANWORDEND SUB &SOURCE_ORG,W ;3 -- separator W=str_ptr - str_org = new >IN (first char separator next) - MOV W,&TOIN ;3 update >IN -EOL_END MOV &DDP,TOS ;3 -- c-addr - SUB TOS,Y ;1 Y=Word_Length +SCANWORDEND SUB &SOURCE_ORG,W ;3 -- separator W=str_ptr - str_org = new >IN (first char separator next) + MOV W,&TOIN ;3 update >IN + MOV &DDP,TOS ;3 -- c-addr + SUB TOS,Y ;1 Y=Word_Length Z=1 MOV.B Y,0(TOS) ;3 - mNEXT ;4 -- c-addr 40 words Z=1 <==> lenght=0 <==> EOL + mNEXT ;4 -- c-addr 40 words Z=1 <==> lenght=0 <==> EOL + .ENDIF ;https://forth-standard.org/standard/core/FIND ;C FIND c-addr -- c-addr 0 if not found ; flag Z=1 @@ -1706,6 +1598,7 @@ TONUMEND MOV S,0(PSP) ;3 -- x x addr2 cnt2 ;Z ?NUMBER addr -- n|d -1 if convert ok ; flag Z=0, UF9=1 if double ;Z addr -- addr 0 if convert ko ; flag Z=1 QNUMBER + BIC #UF9,SR ;2 reset flag UF9, before use as double number flag MOV &BASE,T ;3 T=BASE MOV #0,S ;1 S=sign of result PUSHM #3,IP ;5 R-- IP sign base PUSH IP,S,T @@ -1902,6 +1795,7 @@ TONUMEND MOV S,0(PSP) ;3 -- ud2lo ud2hi adr2 count2 ;Z addr -- addr 0 if convert ko ; flag Z=1 ; FORTHWORD "?NUMBER" QNUMBER + BIC #UF9,SR ;2 reset flag UF9, before use as double number flag MOV &BASE,T ;3 T=BASE MOV #0,S ;1 PUSHM #3,IP ;5 R-- IP sign base (push IP,S,T) @@ -2014,22 +1908,41 @@ QNUMEND mNEXT ;4 TOS=-1 and Z ; ----------------------------------;128 words .ENDIF ; of Hardware/Software MPY -;https://forth-standard.org/standard/core/EXECUTE -;C EXECUTE i*x xt -- j*x execute Forth word at 'xt' - FORTHWORD "EXECUTE" -EXECUTE MOV TOS,W ; 1 put word address into W - MOV @PSP+,TOS ; 2 fetch new TOS - MOV W,PC ; 3 fetch code address into PC +;------------------------------------------------------------------------------- +; DICTIONARY MANAGEMENT +;------------------------------------------------------------------------------- + +;https://forth-standard.org/standard/core/HERE +;C HERE -- addr returns memory ptr + FORTHWORD "HERE" +HERE SUB #2,PSP + MOV TOS,0(PSP) + MOV &DDP,TOS + mNEXT ;https://forth-standard.org/standard/core/Comma ;C , x -- append cell to dict FORTHWORD "," COMMA MOV &DDP,W ;3 - ADD #2,&DDP ;3 MOV TOS,0(W) ;3 + ADD #2,&DDP ;3 MOV @PSP+,TOS ;2 mNEXT ;4 15~ +;https://forth-standard.org/standard/core/ALLOT +;C ALLOT n -- allocate n bytes + FORTHWORD "ALLOT" +ALLOT ADD TOS,&DDP + MOV @PSP+,TOS + mNEXT + +;https://forth-standard.org/standard/core/EXECUTE +;C EXECUTE i*x xt -- j*x execute Forth word at 'xt' + FORTHWORD "EXECUTE" +EXECUTE MOV TOS,W ; 1 put word address into W + MOV @PSP+,TOS ; 2 fetch new TOS + MOV W,PC ; 3 fetch code address into PC + .IFDEF DOUBLE_NUMBERS ; are recognized ;https://forth-standard.org/standard/core/LITERAL ;C LITERAL n -- append single numeric literal if compiling state @@ -2081,6 +1994,14 @@ SETIB MOV TOS,&SOURCE_LEN ; -- org len MOV #0,&TOIN ; mNEXT ; +;https://forth-standard.org/standard/core/BL +;C BL -- char an ASCII space + .IFDEF ANS_CORE_COMPLEMENT + FORTHWORD "BL" + .ENDIF +FBLANK mDOCON + .word 32 + ;C INTERPRET i*x addr u -- j*x interpret given buffer ; This is the common factor of EVALUATE and QUIT. ; set addr u as input buffer then parse it word by word @@ -2130,6 +2051,14 @@ EVALUATE MOV #SOURCE_LEN,X ;2 MOV @RSP+,&SOURCE_LEN ;4 mSEMI +;https://forth-standard.org/standard/core/STATE +;C STATE -- a-addr holds compiler state + .IFDEF ANS_CORE_COMPLEMENT + FORTHWORD "STATE" + .ENDIF +FSTATE mDOCON + .word STATE ; VARIABLE address in RAM space + .IFDEF DEFER_QUIT ; defined in ThingsInFirst.inc QUIT0 MOV #0,&SAVE_SYSRSTIV ; clear SAVE_SYSRSTIV, usefull for next ABORT... @@ -2188,7 +2117,7 @@ QUIT2 .word TYPE ; display it QUIT2 .word CR .ENDIF .word REFILL ; -- org len refill input buffer from ACCEPT (one line) -QUIT3 .word SPACE ; +QUIT3 .word FBLANK,EMIT ; QUIT4 .word INTERPRET ; interpret this line|string .word DEPTH,ZEROLESS ; stack empty test .word XSQUOTE ; ABORT" stack empty! " @@ -2231,33 +2160,24 @@ THREEDROP ADD #4,PSP ; MOV @PSP+,TOS ; mNEXT ; ; ----------------------------------; QABORTYES = QABORT + 14 -QABORTYES CALL #QAB_DEFER ; init some variables, see WIPE -; ----------------------------------; -QABORT_SDCARD ; close all handles +QABORTYES CALL #QAB_DEFER ; init some variables, common part with WIPE, see WIPE ; ----------------------------------; - .IFDEF SD_CARD_LOADER ; - MOV &CurrentHdl,T ; -QABORTCLOSE CMP #0,T ; - JZ QABORTCLOSEND ; - MOV.B #0,HDLB_Token(T) ; - MOV @T,T ; - JMP QABORTCLOSE ; -QABORTCLOSEND ; - .ENDIF ; -; ----------------------------------; -QABORT_TERM ; wait the end of downloading source file -; ----------------------------------; - CALL #RXON ; send XON and/or set RTS low +QABORT_TERM CALL #RXON ; resume downloading source file then wait the end of downloading. QABORTLOOP BIC #UCRXIFG,&TERM_IFG ; clear UCRXIFG MOV #int(frequency*2730),Y ; 2730*frequency ==> 65520 @ 24MHz -QABUSBLOOPJ MOV #8,X ; 1~ <-------+ windows 10 seems very slow... ==> 2730*37 = 101ms delay - ADD X,X ; 1~ | linux seems very very slow... ==> 2730*69 = 188ms delay +QABUSBLOOPJ MOV #8,X ; 1~ <-------+ windows 10 seems very slow... ==> ((8*4)+4)*2730) = 98ms delay QABUSBLOOPI NOP ; 1~ <---+ | - SUB #1,X ; 1~ | | the loop must be longer than longuest existing silence on terminal - JNZ QABUSBLOOPI ; 2~ 4~ loop ---+ | i.e. when USB driver refill they buffers. + SUB #1,X ; 1~ | | the QABUSBLOOPJ delay must be longer than this of OS of TERMINAL + JNZ QABUSBLOOPI ; 2~ 4~ loop ---+ | to refill its USB buffer SUB #1,Y ; 1~ | - JNZ QABUSBLOOPJ ; 2~ 37~/69~ loop --+ - BIT #UCRXIFG,&TERM_IFG ; 4 new char in TERMRXBUF after delay for refill ? + JNZ QABUSBLOOPJ ; 2~ 36~ loop ------+ +; QABUSBLOOPJ MOV #20,X ; 2~ <-------+ linux with minicom seems very very slow... ==> ((20*4)+5)*2730 = 232ms delay +; QABUSBLOOPI NOP ; 1~ <---+ | +; SUB #1,X ; 1~ | | the QABUSBLOOPJ delay must be longer than this of OS of TERMINAL +; JNZ QABUSBLOOPI ; 2~ 4~ loop ---+ | to refill its USB buffer +; SUB #1,Y ; 1~ | +; JNZ QABUSBLOOPJ ; 2~ 85~ loop ------+ + BIT #UCRXIFG,&TERM_IFG ; 4 new char in TERMRXBUF after QABUSBLOOPJ delay ? JNZ QABORTLOOP ; 2 yes, the input stream is still active: loop back ; ----------------------------------; mDOCOL ; @@ -2365,14 +2285,6 @@ IMMEDIATE MOV &LAST_NFA,W BIS.B #80h,0(W) mNEXT -;https://forth-standard.org/standard/core/RECURSE -;C RECURSE -- recurse to current definition (compile current definition) - FORTHWORDIMM "RECURSE" ; immediate -RECURSE MOV &DDP,X ; - MOV &LAST_CFA,0(X) ; - ADD #2,&DDP ; - mNEXT - ;https://forth-standard.org/standard/core/POSTPONE FORTHWORDIMM "POSTPONE" ; immediate POSTPONE mDOCOL @@ -2396,19 +2308,21 @@ SEMICOLON CMP #0,&STATE ; if interpret mode, semicolon becomes a com .IFDEF NONAME ;https://forth-standard.org/standard/core/ColonNONAME -;CE :NONAME -- xt +; :NONAME -- xt FORTHWORD ":NONAME" -COLONNONAME SUB #2,PSP + PUSH #COLONNEXT ; define COLONNEXT as the next of HEADERLESS +HEADERLESS SUB #2,PSP ; common part of :NONAME and CODENNM MOV TOS,0(PSP) - MOV &DDP,TOS ; -- xt of this NONAME word + MOV &DDP,TOS ; -- HERE + BIT #1,TOS ; + ADDC #0,TOS ; -- xt aligned CFA of this NONAME or CODENNM word MOV TOS,W ; W=CFA MOV #PAIN,X ;2 MOV Y,0(X) writes to PAIN read only register = first lure for semicolon REVEAL... MOV #PAOUT,Y ;2 MOV @X,-2(Y) also writes to PAIN register = 2th lure for semicolon REVEAL... - CALL #HEADEREND ; ...because we don't want write a preamble of this :NONAME definition in dictionnary! + JMP HEADEREND ; ...because we don't want to write a preamble of this :NONAME definition in dictionnary! .ENDIF ; NONAME -;-----------------------------------; common part of NONAME and : -COLONNEXT +COLONNEXT ; common part of :NONAME and : .SWITCH DTC .CASE 1 MOV #DOCOL1,-4(W) ; compile CALL rDOCOL @@ -2424,21 +2338,20 @@ COLONNEXT ADD #4,&DDP .ENDCASE ; of DTC MOV #-1,&STATE ; enter compiling state -SAVE_PSP MOV PSP,&LAST_PSP ; save PSP for check compiling, used by QREVEAL NEXT_ADR mNEXT -;-----------------------------------; ;https://forth-standard.org/standard/core/Colon ;C : -- begin a colon definition FORTHWORD ":" -COLON PUSH #COLONNEXT ; define COLONNEXT as RET from HEADER +COLON PUSH #COLONNEXT ; define COLONNEXT as the next of HEADER ; HEADER create an header for a new word. Max count of chars = 126 ; common code for DEFER, VARIABLE, CONSTANT, CREATE, :, MARKER, CODE, ASM. ; doesn't link the created word in vocabulary. -HEADER mDOCOL - .word CELLPLUSALIGN ; align and make room for LFA +HEADER BIT #1,&DDP ;3 carry set if odd + ADDC #2,&DDP ;4 (DP+2|DP+3) bytes + mDOCOL .word FBLANK,WORDD ; FORTHtoASM ; -- HERE HERE is the NFA of this new word MOV @RSP+,IP @@ -2456,21 +2369,19 @@ HEADER mDOCOL ADD TOS,X ; X=VOC_PFAx = thread x of VOC_PFA of CURRENT .ENDCASE MOV @PSP+,TOS ; -- - MOV #4030h,0(W) ; by default, HEADER create a DEFERred word: CFA = MOV @PC+,PC = BR mNEXT - MOV #NEXT_ADR,2(W) ; by default, HEADER create a DEFERred word: PFA = address of mNEXT to do nothing. HEADEREND MOV Y,&LAST_NFA ; NFA --> LAST_NFA used by QREVEAL, IMMEDIATE, MARKER MOV X,&LAST_THREAD ; VOC_PFAx --> LAST_THREAD used by QREVEAL MOV W,&LAST_CFA ; HERE=CFA --> LAST_CFA used by DOES>, RECURSE + MOV PSP,&LAST_PSP ; save PSP for check compiling, used by QREVEAL ADD #4,W ; by default make room for two words... MOV W,&DDP ; - RET ; 30 words, W is the new DDP value ) + RET ; 33 words, W is the new DDP value ) ; X is LAST_THREAD > used by VARIABLE, CONSTANT, CREATE, DEFER and : ; Y is NFA ) ;;Z ?REVEAL -- if no stack mismatch, link this new word in the CURRENT vocabulary -; FORTHWORD "REVEAL" ; used by SEMICOLON and ENDCODE -QREVEAL CMP PSP,&LAST_PSP ; Check SP with its saved value by : +QREVEAL CMP PSP,&LAST_PSP ; Check SP with its saved value by :, :NONAME, CODE... JNZ BAD_CSP ; if no stack mismatch. GOOD_CSP MOV &LAST_NFA,Y ; GOOD_CSP is the end of word MARKER MOV &LAST_THREAD,X ; @@ -2483,21 +2394,20 @@ BAD_CSP mDOCOL .byte 15,"stack mismatch!" FQABORTYES .word QABORTYES -;https://forth-standard.org/standard/core/VARIABLE -;C VARIABLE -- define a Forth VARIABLE - FORTHWORD "VARIABLE" -VARIABLE CALL #HEADER ; W = DDP = CFA + 2 words - MOV #DOVAR,-4(W) ; CFA = DOVAR, PFA is undefined - JMP REVEAL ; to link created VARIABLE in vocabulary +;https://forth-standard.org/standard/core/DEFER +;C DEFER "name" -- +;Skip leading space delimiters. Parse name delimited by a space. +;Create a definition for name with the execution semantics defined below. -;https://forth-standard.org/standard/core/CONSTANT -;C CONSTANT n -- define a Forth CONSTANT (and also a Forth VALUE) - FORTHWORD "CONSTANT" -CONSTANT CALL #HEADER ; W = DDP = CFA + 2 words - MOV #DOCON,-4(W) ; CFA = DOCON - MOV TOS,-2(W) ; PFA = n - MOV @PSP+,TOS - JMP REVEAL ; to link created CONSTANT in vocabulary +;name Execution: -- +;Execute the xt that name is set to execute, i.e. NEXT (nothing), +;until the phrase ' word IS name is executed, causing a new value of xt to be assigned to name. + + FORTHWORD "DEFER" +DEFER CALL #HEADER ; -- W = DDP + MOV #4030h,-4(W) ; by default, HEADER create a DEFERred word: CFA = MOV @PC+,PC = BR mNEXT + MOV #NEXT_ADR,-2(W) ; by default, HEADER create a DEFERred word: PFA = address of mNEXT to do nothing. + JMP REVEAL ; to link created VARIABLE in vocabulary ;https://forth-standard.org/standard/core/CREATE ;C CREATE -- define a CONSTANT with its next address @@ -2517,19 +2427,6 @@ DOES MOV &LAST_CFA,W ; W = CFA of CREATEd word MOV IP,2(W) ; replace PFA by the address after DOES> as execution address mSEMI ; exit of the new created word -;https://forth-standard.org/standard/core/DEFER -;C DEFER "name" -- -;Skip leading space delimiters. Parse name delimited by a space. -;Create a definition for name with the execution semantics defined below. - -;name Execution: -- -;Execute the xt that name is set to execute, i.e. NEXT (nothing), -;until the phrase ' word IS name is executed, causing a new value of xt to be assigned to name. - - FORTHWORD "DEFER" -DEFER PUSH #REVEAL ; to link created DEFER word in vocabulary - JMP HEADER ; that create a secondary DEFERed word (whithout default code) - ;https://forth-standard.org/standard/core/toBODY ; >BODY -- addr leave BODY of a CREATEd word FORTHWORD ">BODY" @@ -2539,20 +2436,21 @@ DEFER PUSH #REVEAL ; to link created DEFER word in vocabulary .IFDEF MSP430ASSEMBLER FORTHWORD "CODE" ; a CODE word must be finished with ENDCODE -ASMCODE CALL #HEADER ; -ASMCODE1 SUB #4,W ; W = CFA - MOV W,&DDP ; CFA --> DDP +ASMCODE CALL #HEADER ; (that makes room for CFA and PFA) +ASMCODE1 + .IFDEF EXTENDED_ASM + MOV #0,&RPT_WORD ; clear RPT instruction + .ENDIF + SUB #4,&DDP ; remove this room mDOCOL - .word SAVE_PSP .word ALSO,ASSEMBLER .word EXIT - .IFDEF NONAME - FORTHWORD "CODENNM" ; CODENoNaMe is the assembly counterpart of :NONAME -CODENNM mDOCOL - .word COLONNONAME,LEFTBRACKET - .word ASMCODE1,EXIT - .ENDIF + .IFDEF NONAME + FORTHWORD "CODENNM" ; CODENoNaMe is the assembly counterpart of :NONAME +CODENNM CALL #HEADERLESS ; (that makes room for CFA and PFA) + JMP ASMCODE1 + .ENDIF asmword "ENDCODE" ; restore previous context and test PSP balancing ENDCODE mDOCOL @@ -2567,13 +2465,12 @@ ENDCODE mDOCOL ; prohibited because it doesn't restore CURRENT. FORTHWORD "ASM" - MOV &CURRENT,&SAV_CURRENT MOV #BODYASSEMBLER,&CURRENT JMP ASMCODE asmword "ENDASM" ; end of an ASM word - MOV &SAV_CURRENT,&CURRENT - JMP ENDCODE + mDOCOL + .WORD ENDCODE,DEFINITIONS,EXIT ; here are words used to switch from/to FORTH to/from ASSEMBLER @@ -2616,11 +2513,11 @@ COLON2 MOV #-1,&STATE ; enter in compile state JMP COLON1 .ENDCASE - FORTHWORDIMM "HI2LO" ; immediate, switch to low level, add ASSEMBLER context, set interpretation state + FORTHWORDIMM "HI2LO" ; immediate, switch to low level, set interpretation state, add ASSEMBLER context mDOCOL HI2LO .word HERE,CELLPLUS,COMMA .word LEFTBRACKET -HI2LONEXT .word ALSO,ASSEMBLER + .word ALSO,ASSEMBLER .word EXIT .ENDIF ; MSP430ASSEMBLER @@ -2734,19 +2631,6 @@ LOOPEND MOV @PSP+,TOS PLUSLOOP MOV #xploop,X JMP LOOPNEXT -;https://forth-standard.org/standard/core/LEAVE -;C LEAVE -- L: -- adrs - FORTHWORDIMM "LEAVE" ; immediate -LEAV MOV &DDP,W ; compile three words - MOV #UNLOOP,0(W) ; [HERE] = UNLOOP - MOV #BRAN,2(W) ; [HERE+2] = BRAN - ADD #6,&DDP ; [HERE+4] = After LOOP adr - ADD #2,&LEAVEPTR - ADD #4,W - MOV &LEAVEPTR,X - MOV W,0(X) ; leave HERE+4 on LEAVEPTR stack - mNEXT - ;https://forth-standard.org/standard/core/MOVE ;C MOVE addr1 addr2 u -- smart move ; VERSION FOR 1 ADDRESS UNIT = 1 CHAR @@ -2783,18 +2667,17 @@ MOVE_X mNEXT ;X VOCABULARY -- create a vocabulary, up to 7 vocabularies in CONTEXT .IFDEF VOCABULARY_SET - FORTHWORD "VOCABULARY" VOCABULARY mDOCOL .word CREATE - .SWITCH THREADS - .CASE 1 + .SWITCH THREADS + .CASE 1 .word lit,0,COMMA ; will keep the NFA of the last word of the future created vocabularies - .ELSECASE + .ELSECASE .word lit,THREADS,lit,0,xdo VOCABULOOP .word lit,0,COMMA .word xloop,VOCABULOOP - .ENDCASE + .ENDCASE .word HERE ; link via LASTVOC the future created vocabulary .word LIT,LASTVOC,DUP .word FETCH,COMMA ; compile [LASTVOC] to HERE+ @@ -2878,6 +2761,7 @@ BODYFORTH ; BODY of FORTH .word lastforthword29 .word lastforthword30 .word lastforthword31 + .ELSECASE .ENDCASE .word voclink ; here, voclink = 0 voclink .set $-2 @@ -2954,6 +2838,7 @@ BODYASSEMBLER .word lastasmword ; here is the structure created by VOCABULAR .word lastasmword29 .word lastasmword30 .word lastasmword31 + .ELSECASE .ENDCASE .word voclink voclink .set $-2 @@ -2992,16 +2877,6 @@ ONLY MOV #0,&CONTEXT+2 DEFINITIONS MOV &CONTEXT,&CURRENT mNEXT -; ------------------------------------------------------------------------------ -; forthMSP430FR : CONDITIONNAL COMPILATION -; ------------------------------------------------------------------------------ - .IFDEF CONDCOMP - .include "forthMSP430FR_CONDCOMP.asm" - - ; compile COMPARE [THEN] [ELSE] [IF] [UNDEFINED] [DEFINED] MARKER - - .ENDIF -; ------------------------------------------------------------------------------ ;------------------------------------------------------------------------------- ; IMPROVED ON/OFF AND RESET ;------------------------------------------------------------------------------- @@ -3069,18 +2944,18 @@ RST_HERE MOV &LASTVOC,&INIVOC FORTHWORD "WIPE" ; restore the program as it was in forthMSP430FR.txt file WIPE ; reset JTAG and BSL signatures ; unlock JTAG, SBW and BSL - MOV #16,X ; max known SIGNATURES length = 16 -SIGNLOO SUB #2,X - MOV #-1,SIGNATURES(X) ; reset signature; WARNING ! DON'T CHANGE THIS IMMEDIATE VALUE ! - JNZ SIGNLOO - MOV #BODYSLEEP,&PFASLEEP ;4 MOV #SLEEP,X ADD #4,X MOV X,-2(X), restore default background task - MOV #BODYWARM,&PFAWARM ;4 ' WARM >BODY IS WARM, restore default WARM + MOV #16,X ; max known SIGNATURES length = 16 +SIGNLOO SUB #2,X + MOV #-1,SIGNATURES(X) ; reset signature; WARNING ! DON'T CHANGE THIS IMMEDIATE VALUE ! + JNZ SIGNLOO + MOV #BODYSLEEP,&PFASLEEP;4 MOV #SLEEP,X ADD #4,X MOV X,-2(X), restore default background task + MOV #BODYWARM,&PFAWARM ;4 ' WARM >BODY IS WARM, restore default WARM .IFDEF DEFER_QUIT ; true if BOOTLOADER - MOV #BODYQUIT,&PFAQUIT ;4 ' QUIT >BODY IS QUIT + MOV #BODYQUIT,&PFAQUIT ;4 ' QUIT >BODY IS QUIT .ENDIF - MOV #lastvoclink,&INIVOC ; reinit this 2 factory values - MOV #ROMDICT,&INIDP - PUSH #RST_STATE ; define the next of WIPE + MOV #lastvoclink,&INIVOC; reinit this 2 factory values + MOV #ROMDICT,&INIDP + PUSH #RST_STATE ; define the next of WIPE ;-----------------------------------; ; WIPE, QABORT common subroutine ; <--- ?ABORT calls here ;-----------------------------------; @@ -3088,10 +2963,21 @@ QAB_DEFER MOV #BODYEMIT,&PFAEMIT ;4 ' EMIT >BODY IS EMIT default console output MOV #BODYCR,&PFACR ;4 ' CR >BODY IS CR default CR MOV #BODYKEY,&PFAKEY ;4 ' KEY >BODY IS KEY default KEY - .IFDEF DEFER_ACCEPT ; true if SD_LOADER + .IFDEF DEFER_ACCEPT ; true if SD_CARD_LOADER MOV #BODYACCEPT,&PFAACCEPT ;4 ' ACCEPT >BODY IS ACCEPT MOV #TIB_ORG,&PFACIB ;4 TIB_ORG TO CIB (Current Input Buffer) .ENDIF + .IFDEF SD_CARD_LOADER ; close all handles + MOV &CurrentHdl,T ; +QAB_CLOSE ; + CMP #0,T ; + JZ QAB_CLOSEND ; + MOV.B #0,HDLB_Token(T) ; + MOV @T,T ; + JMP QAB_CLOSE ; +QAB_CLOSEND ; + .ENDIF ; +; ----------------------------------; ;-----------------------------------; ; WIPE, QABORT, COLD common subrouti; <--- COLD, reset and PUC calls here ;-----------------------------------; @@ -3106,13 +2992,6 @@ RST_INIT MOV #RFROM,rDOVAR MOV #xdocon,rDOCON MOV #xdodoes,rDODOES - .IFDEF MSP430ASSEMBLER - MOV #RAM_ASM_LEN,X ; reset all 6 branch labels + SAVECURRENT + RPT_WORD if any -CLR_RAM_ASM - SUB #2,X - MOV #0,RAM_ASM_ORG(X) ; - JNZ CLR_RAM_ASM ; - .ENDIF MOV #10,&BASE ;4 MOV #32,&CAPS ; init CAPS ON RET @@ -3127,43 +3006,41 @@ CLR_RAM_ASM WARM MOV @PC+,PC ;3 Code Field Address (CFA) of WARM PFAWARM .word BODYWARM ; Parameter Field Address of WARM, may be redirected. BODYWARM MOV @PC+,IP ; MOV [BODYWARM+2],IP - .word WARMTYPE ; define next step of WARM, examples: WARMTYPE, ABORT, BOOT... +ENDOFWARM .word WARMTYPE ; define next step of WARM, examples: WARMTYPE, ABORT, BOOT... ; ;================================================================================= ; WARM 1: activates I/O: inputs and outputs are active only here (hiZ before here) ;================================================================================= - BIC #LOCKLPM5,&PM5CTL0 ; activate all previous I/O settings (before I/O tests below). + BIC #LOCKLPM5,&PM5CTL0 ; activate all previous I/O settings (before I/O tests below). ; Moved in WARM area to be redirected in your app START routine, ; enabling you full control of the I/O RESET state. ;================================================================================= - MOV &SAVE_SYSRSTIV,TOS ; - CMP #0,TOS ; WARM event ? - JZ RST_SEL_END ; yes + MOV &SAVE_SYSRSTIV,TOS ; + CMP #0,TOS ; WARM event ? + JZ RST_SEL_END ; yes ;--------------------------------------------------------------------------------- ; RESET 7: test DEEP RESET before init TERMINAL I/O ;--------------------------------------------------------------------------------- -RST_EVENT - BIT.B #TXD,&TERM_IN ; TERM_TXD wired to GND via 4k7 resistor ? - JNZ RST_TERM_IO ; no - XOR #-1,TOS ; yes : force DEEP_RST (RESET + WIPE) - ADD #1,TOS ; to display SAVE_SYSRSTIV as negative value +RST_EVENT BIT.B #TXD,&TERM_IN ; TERM_TXD wired to GND via 4k7 resistor ? + JNZ INITERMIO ; no + XOR #-1,TOS ; yes : force DEEP_RST (RESET + WIPE) + ADD #1,TOS ; to display SAVE_SYSRSTIV as negative value ;--------------------------------------------------------------------------------- ; RESET 8: INIT TERMINAL I/O ;--------------------------------------------------------------------------------- -RST_TERM_IO ; - BIS.B #TERM_BUS,&TERM_SEL ; Configure pins TXD & RXD for TERM_UART +INITERMIO BIS.B #TERM_BUS,&TERM_SEL; Configure pins TXD & RXD for TERM_UART ;--------------------------------------------------------------------------------- ; RESET 9: INIT SD_Card ;--------------------------------------------------------------------------------- .IFDEF SD_CARD_LOADER ; - BIT.B #SD_CD,&SD_CDIN ; SD_memory in SD_Card module ? - JNZ RST_SEL ; no - .IF RAM_LEN < 2048 ; case of MSP430FR57xx : SD datas are in FRAM - MOV #SD_LEN,X ; not initialised by RESET. -ClearSDdata SUB #2,X ; 1 - MOV #0,SD_ORG(X) ; 3 - JNZ ClearSDdata ; 2 - .ENDIF + BIT.B #SD_CD,&SD_CDIN ; SD_memory in SD_Card module ? + JNZ RST_SEL ; no + .IF RAM_LEN < 2048 ; case of MSP430FR57xx : SD datas are in FRAM + MOV #SD_LEN,X ; not initialised by RESET. +ClearSDdata SUB #2,X ; 1 + MOV #0,SD_ORG(X) ; 3 + JNZ ClearSDdata ; 2 + .ENDIF .include "forthMSP430FR_SD_INIT.asm"; no use IP,TOS .ENDIF ;--------------------------------------------------------------------------------- @@ -3186,20 +3063,21 @@ WARMTYPE .word XSQUOTE ; .word TYPE ; .word DOT ; display signed SAVE_SYSRSTIV .word XSQUOTE - .byte 31,"FastForth ",VER," (C)J.M.Thoorens " + .byte 25,"FastForth ©J.M.Thoorens " .word TYPE - .word LIT,SIGNATURES,HERE,MINUS,UDOT + .word LIT,FRAM_FULL,HERE,MINUS,UDOT .word XSQUOTE ; - .byte 11,"bytes free "; + .byte 10,"bytes free" ; .word BRAN,QABORT_DISPLAY ; ;Z COLD -- performs a software reset - FORTHWORD "COLD" -COLD BIT #1,&TERM_STATW ; - JNZ COLD ; loop back while TERM_UART is busy - MOV #0A504h,&PMMCTL0 ; performs BOR (SYSRSTIV = #6) reset @ next address -; MOV #0A508h,&PMMCTL0 ; performs POR (SYSRSTIV = #20) reset @ next address + FORTHWORD "COLD" +COLD BIT #1,&TERM_STATW ; + JNZ COLD ; loop back while TERM_UART is busy + MOV #0A504h,&PMMCTL0 ; performs BOR (SYSRSTIV = #6) +; MOV #0A508h,&PMMCTL0 ; performs POR (SYSRSTIV = #20) + .word WARMTYPE ; default value for ENDOFWARM ;--------------------------------------------------------------------------------- ; RESET 1: Initialisation limited to FastForth usage : I/O, RAM, RTC ; all unused I/O are set as input with pullup resistor @@ -3246,60 +3124,71 @@ VECTORLOOP SUB #2,X ;1 PUSH #WARM ; return for RST_INIT JMP RST_INIT +; ------------------------------------------------------------------------------ +; forthMSP430FR : CONDITIONNAL COMPILATION +; ------------------------------------------------------------------------------ + .IFDEF CONDCOMP + .include "forthMSP430FR_CONDCOMP.asm" + + ; compile COMPARE [THEN] [ELSE] [IF] [UNDEFINED] [DEFINED] MARKER + + .ENDIF ;------------------------------------------------------------------------------- ; ASSEMBLER OPTION ;------------------------------------------------------------------------------- .IFDEF MSP430ASSEMBLER .IFDEF EXTENDED_ASM - .include "forthMSP430FR_EXTD_ASM.asm" + .include "forthMSP430FR_EXTD_ASM.asm" .ELSE - .include "forthMSP430FR_ASM.asm" + .include "forthMSP430FR_ASM.asm" .ENDIF .ENDIF - +;------------------------------------------------------------------------------- +; UTILITY WORDS OPTION +;------------------------------------------------------------------------------- + .IFDEF UTILITY + .include "ADDON/UTILITY.asm" + .ENDIF ;------------------------------------------------------------------------------- ; FIXED POINT OPERATORS OPTION ;------------------------------------------------------------------------------- .IFDEF FIXPOINT - .include "ADDON/FIXPOINT.asm" + .include "ADDON/FIXPOINT.asm" .ENDIF ;------------------------------------------------------------------------------- ; SD CARD FAT OPTIONS ;------------------------------------------------------------------------------- .IFDEF SD_CARD_LOADER - .include "forthMSP430FR_SD_LowLvl.asm" ; SD primitives - .include "forthMSP430FR_SD_LOAD.asm" ; SD LOAD driver - ;----------------------------------------------------------------------- - ; SD TOOLS - ;----------------------------------------------------------------------- - .IFDEF SD_TOOLS - .include "ADDON/SD_TOOLS.asm" - .ENDIF + .include "forthMSP430FR_SD_LowLvl.asm" ; SD primitives + .include "forthMSP430FR_SD_LOAD.asm" ; SD LOAD driver ;--------------------------------------------------------------------------- ; SD CARD READ WRITE ;--------------------------------------------------------------------------- .IFDEF SD_CARD_READ_WRITE - .include "forthMSP430FR_SD_RW.asm" ; SD Read/Write driver + .include "forthMSP430FR_SD_RW.asm" ; SD Read/Write driver + .ENDIF + ;----------------------------------------------------------------------- + ; SD TOOLS + ;----------------------------------------------------------------------- + .IFDEF SD_TOOLS + .include "ADDON/SD_TOOLS.asm" .ENDIF - .ENDIF - -;------------------------------------------------------------------------------- -; UTILITY WORDS OPTION -;------------------------------------------------------------------------------- - .IFDEF UTILITY - .include "ADDON/UTILITY.asm" .ENDIF ;------------------------------------------------------------------------------- ; ADD HERE YOUR CODE TO BE INTEGRATED IN KERNEL (protected against WIPE) ;vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +;vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv +;vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv ;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +;^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ; ADD HERE YOUR CODE TO BE INTEGRATED IN KERNEL (protected against WIPE) ;------------------------------------------------------------------------------- diff --git a/forthMSP430FR_ASM.asm b/forthMSP430FR_ASM.asm index e0f35a3..2846132 100644 --- a/forthMSP430FR_ASM.asm +++ b/forthMSP430FR_ASM.asm @@ -43,94 +43,103 @@ ; example : POPM #6,IP pop Y,X,W,T,S,IP registers from return stack -;;Z SKIP char -- addr ; skip all occurring character 'char' in input stream -; FORTHWORD "SKIP" ; used by assembler to parse input stream -SKIP: MOV #SOURCE_LEN,Y ; - MOV @Y+,X ; -- char X=length - MOV @Y,W ; -- char X=length W=org - ADD W,X ; -- char X=End W=org - ADD &TOIN,W ; -- char X=End W=ptr -SKIPLOOP: CMP W,X ; -- char ptr=End ? - JZ SKIPEND ; -- char yes - CMP.B @W+,TOS ; -- char does character match? - JZ SKIPLOOP ; -- char yes -SKIPNEXT: SUB #1,W ; -- char -SKIPEND: MOV W,TOS ; -- addr - SUB @Y,W ; -- addr W=Ptr-Org=Toin - MOV W,&TOIN ; - mNEXT - ; ---------------------------------------------------------------------- ; DTCforthMSP430FR5xxx ASSEMBLER : search argument "xxxx", IP is free ; ---------------------------------------------------------------------- -SearchARG ; separator -- n|d or abort" not found" -; ---------------------------------------------------------------------- -; Search ARG of "#xxxx," ; <== PARAM10 -; Search ARG of "&xxxx," ; <== PARAM111 -; Search ARG of "xxxx(REG)," ; <== PARAM130 -; Search ARG of ",&xxxx" ; <== PARAM111 <== PARAM20 -; Search ARG of ",xxxx(REG)" ; <== PARAM210 - PUSHM #2,S ; PUSHM S,T - ASMtoFORTH ; -- separator search word first - .word WORDD,FIND ; -- c-addr - .word QTBRAN,SearchARGW ; -- c-addr if found - .word QNUMBER ; - .word QFBRAN,NotFound ; -- c-addr ABORT if not found -FsearchEnd .word SearchEnd ; -- value goto end if number found -SearchARGW FORTHtoASM ; -- xt xt = CFA - MOV @TOS,X -QDOVAR CMP #DOVAR,X - JNZ QDOCON - ADD #2,TOS ; remplace CFA by PFA for VARIABLE words - JMP SearchEnd -QDOCON CMP #DOCON,X - JNZ QDODOES - MOV 2(TOS),TOS ; remplace CFA by [PFA] for CONSTANT (and CREATEd) words - JMP SearchEnd -QDODOES CMP #DODOES,X - JNZ SearchEnd - ADD #4,TOS ; leave BODY address for DOES words -SearchEnd POPM #2,S ; POPM T,S - RET ; +;SearchARG ; separator -- n|d or abort" not found" +;; Search ARG of "#xxxx," ; <== PARAM10 +;; Search ARG of "&xxxx," ; <== PARAM111 +;; Search ARG of "xxxx(REG)," ; <== PARAM130 +;; Search ARG of ",&xxxx" ; <== PARAM111 <== PARAM20 +;; Search ARG of ",xxxx(REG)" ; <== PARAM210 +; PUSHM #2,S ; PUSHM S,T as OPCODE, OPCODEADR +; ASMtoFORTH ; -- separator search word first +; .word WORDD,FIND ; -- addr +; .word QTBRAN,SearchARGW ; -- addr if word found +; .word QNUMBER ; +; .word QFBRAN,NotFound ; -- addr ABORT if not found +;FSearchEnd .word SearchEnd ; -- value goto SearchEnd if number found +;SearchARGW FORTHtoASM ; -- xt xt = CFA +; MOV @TOS+,X ; -- PFA +;QDODOES SUB #DODOES,X ; DODOES = 1284h +; JNZ QDOCON ; +; ADD #2,TOS ; -- BODY leave BODY address for DOES words +; JMP SearchEnd ; +;QDOCON CMP #1,X ; -- PFA DOCON = 1285h +; JNZ QDOVAR ; +; MOV @TOS,TOS ; -- cte replace PFA by [PFA] for CONSTANT and CREATE words +; JMP SearchEnd ; +;QDOVAR CMP #2,X ; -- PFA DOVAR = 1286h +; JZ SearchEnd ; if DOVAR nothing to do +; SUB #2,TOS ; -- CFA replace PFA by CFA for all other words +;SearchEnd POPM #2,S ; POPM T,S +; RET ; + +SearchARG ; separator -- n|d or abort" not found" +; Search ARG of "#xxxx," ; <== PARAM10 +; Search ARG of "&xxxx," ; <== PARAM111 +; Search ARG of "xxxx(REG)," ; <== PARAM130 +; Search ARG of ",&xxxx" ; <== PARAM111 <== PARAM20 +; Search ARG of ",xxxx(REG)" ; <== PARAM210 + PUSHM #2,S ; PUSHM S,T as OPCODE, OPCODEADR + ASMtoFORTH ; -- separator search word first + .word WORDD,FIND ; -- addr + .word QTBRAN,SearchARGW ; -- addr if word found + .word QNUMBER ; + .word QFBRAN,NotFound ; -- addr ABORT if not found +FSearchEnd .word SearchEnd ; -- value goto SearchEnd if number found +SearchARGW FORTHtoASM ; -- xt xt = CFA + MOV @TOS+,X ; -- PFA +QDOVAR SUB #DOVAR,X ; DOVAR = 1286h + JZ SearchEnd ; + ADD #1,X ; -- PFA DOCON = 1285h + JNZ QDODOES ; + MOV @TOS,TOS ; -- cte + JMP SearchEnd ; +QDODOES ADD #2,TOS ; -- BODY leave BODY address for DOES words + ADD #1,X ; DODOES = 1284h + JZ SearchEnd ; + SUB #4,TOS ; -- CFA +SearchEnd POPM #2,S ; POPM T,S + RET ; ; ---------------------------------------------------------------------- ; DTCforthMSP430FR5xxx ASSEMBLER : search REG ; ---------------------------------------------------------------------- -; compute "xxxx(REG)," ; <== PARAM130 -; compute ",xxxx(REG)" ; <== PARAM210 -ComputeARGParenREG - MOV #'(',TOS ; -- "(" as WORD separator to find xxxx of "xxxx(REG)," - CALL #SearchARG ; -- xxxx aborted if not found +; compute arg of "xxxx(REG)," ; <== PARAM130, sep=',' +; compute arg of ",xxxx(REG)" ; <== PARAM210, sep=' ' +ComputeARGParenREG ; sep -- Rn + MOV #'(',TOS ; -- "(" as WORD separator to find xxxx of "xxxx(REG)," + CALL #SearchARG ; -- xxxx aborted if not found MOV &DDP,X ADD #2,&DDP - MOV TOS,0(X) ; -- xxxx compile xxxx - MOV #')',TOS ; -- ")" prepare separator to search REG of "xxxx(REG)" - -; search REG of "xxxx(REG)," separator = ')' ; -; search REG of ",xxxx(REG)" separator = ')' ; -; search REG of "@REG," separator = ',' ; <== PARAM120 -; search REG of "@REG+," separator = '+' ; <== PARAM121 -; search REG of "REG," separator = ',' ; <== PARAM13 -; search REG of ",REG" separator = ' ' ; <== PARAM21 - -SearchREG PUSHM #2,S ; PUSHM S,T - PUSH &TOIN ; -- separator save >IN - ADD #1,&TOIN ; skip "R" - ASMtoFORTH ; search xx of Rxx - .word WORDD,QNUMBER ; - .word QFBRAN,NOTaREG; -- xxxx if Not a Number - FORTHtoASM ; -- c-addr number is found - ADD #2,RSP ; remove >IN - CMP #16,TOS ; -- 000R register > 15 ? - JHS BOUNDERROR ; yes : abort - JLO SearchEnd ; -- 000R Z=0 ==> found - -NOTaREG FORTHtoASM ; -- c-addr Z=1 - MOV @RSP+,&TOIN ; -- c-addr restore >IN - JMP SearchEnd ; -- c_addr Z=1 ==> not a register - + MOV TOS,0(X) ; -- xxxx compile xxxx + MOV #')',TOS ; -- ")" prepare separator to search REG of "xxxx(REG)" + +; search REG of "xxxx(REG)," separator = ')' +; search REG of ",xxxx(REG)" separator = ')' +; search REG of "@REG," separator = ',' <== PARAM120 +; search REG of "@REG+," separator = '+' <== PARAM121 +; search REG of "REG," separator = ',' <== PARAM13 +; search REG of ",REG" separator = BL <== PARAM21 + +SearchREG PUSHM #2,S ; PUSHM S,T as OPCODE, OPCODEADR + PUSH &TOIN ; -- sep save >IN + ADD #1,&TOIN ; skip "R" + ASMtoFORTH ; search xx of Rxx + .word WORDD,QNUMBER ; + .word QFBRAN,NOTaREG ; -- xxxx if Not a Number + FORTHtoASM ; -- Rn number is found + ADD #2,RSP ; remove >IN + CMP #16,TOS ; -- Rn + JHS BOUNDERROR ; abort if Rn out of bounds + JLO SearchEnd ; -- Rn Z=0 ==> found + +NOTaREG FORTHtoASM ; -- addr Z=1 + MOV @RSP+,&TOIN ; -- addr restore >IN + JMP SearchEnd ; -- addr Z=1 ==> not a register ; ---------------------------------------------------------------------- ; DTCforthMSP430FR5xxx ASSEMBLER : INTERPRET FIRST OPERAND @@ -138,167 +147,126 @@ NOTaREG FORTHtoASM ; -- c-addr Z=1 ; PARAM1 separator -- ; parse input buffer until separator and compute first operand of opcode ; sep is comma for src and space for dst . - -PARAM1 mDOCOL ; -- sep - .word FBLANK,SKIP ; -- sep c-addr - FORTHtoASM ; -- sep c-addr - MOV #0,S ; -- sep c-addr reset ASMTYPE - MOV &DDP,T ; -- sep c-addr T=OPCODEADR (opcode is preset to its address !) - ADD #2,&DDP ; -- sep c-addr cell allot for opcode - MOV.B @TOS,W ; -- sep c-addr W=first char of instruction code - MOV @PSP+,TOS ; -- sep W=c-addr - CMP.B #'#',W ; -- sep W=first char +PARAM1 mDOCOL ; -- sep OPCODES types I|V sep = ',' OPCODES types II|VI sep = ' ' + .word FBLANK,SKIP ; -- sep addr + FORTHtoASM ; -- sep addr + MOV #0,S ; -- sep addr reset OPCODE + MOV &DDP,T ; -- sep addr HERE --> OPCODEADR (opcode is preset to its address !) + ADD #2,&DDP ; -- sep addr cell allot for opcode + MOV.B @TOS,W ; -- sep addr W=first char of instruction code + MOV @PSP+,TOS ; -- sep W=c-addr + CMP.B #'#',W ; -- sep W=first char JNE PARAM11 - ; "#" found : case of "#xxxx," -PARAM10 ADD #1,&TOIN ; -- sep skip # prefix - CALL #SearchARG ; -- xxxx abort if not found - -PARAM100 CMP #0,TOS ; -- xxxx = 0 ? - JNE PARAM101 -; case of "#0," - MOV #0300h,S ; -- 0 example : MOV #0,dst <=> MOV R3,dst - JMP PARAMENDOF - -PARAM101 CMP #1,TOS ; -- xxxx = 1 ? - JNE PARAM102 -; case of "#1," - MOV #0310h,S ; -- 1 example : MOV #1,dst <=> MOV 0(R3),dst - JMP PARAMENDOF - -PARAM102 CMP #2,TOS ; -- xxxx = 2 ? - JNE PARAM104 -; case of "#2," - MOV #0320h,S ; -- 2 ASMTYPE = 0320h example : MOV #2, <=> MOV @R3, - JMP PARAMENDOF - -PARAM104 CMP #4,TOS ; -- xxxx = 4 ? - JNE PARAM108 -; case of "#4," - MOV #0220h,S ; -- 4 ASMTYPE = 0220h example : MOV #4, <=> MOV @SR, - JMP PARAMENDOF - -PARAM108 CMP #8,TOS ; -- xxxx = 8 ? - JNE PARAM10M1 -; case of "#8," - MOV #0230h,S ; -- 8 ASMTYPE = 0230h example : MOV #8, <=> MOV @SR+, - JMP PARAMENDOF - -PARAM10M1 CMP #-1,TOS ; -- xxxx = -1 ? - JNE PARAM1000 -; case of "#-1," - MOV #0330h,S ; -- -1 ASMTYPE = 0330h example : XOR #-1 <=> XOR @R3+, - JMP PARAMENDOF - -; case of all others "#xxxx," ; -- xxxx -PARAM1000 MOV #0030h,S ; -- xxxx add immediate code type : @PC+, - -; case of all others "#xxxx," ; -- xxxx -; case of "&xxxx," ; <== PARAM110 -; case of ",&xxxx" ; <== PARAM20 -StoreArg MOV &DDP,X ; -- xxxx don't use T=OPCODEADR - ADD #2,&DDP ; cell allot for arg - -StoreTOS ; <== TYPE1DOES - MOV TOS,0(X) ; compile arg -; endcase of all "&xxxx" ; -; endcase of all "#xxxx" ; <== PARAM101,102,104,108,10M1 -; endcase of all "REG"|"@REG"|"@REG+" ; <== PARAM124 -PARAMENDOF MOV @PSP+,TOS ; -- - MOV @RSP+,IP - mNEXT ; -- -; ------------------------------------------ - -PARAM11 CMP.B #'&',W ; -- sep +PARAM10 ADD #1,&TOIN ; -- sep skip # prefix + CALL #SearchARG ; -- xxxx abort if not found + MOV #0300h,S ; OPCODE = 0300h : MOV #0,dst is coded MOV R3,dst + CMP #0,TOS ; -- xxxx #0 ? + JZ PARAMENDOF + MOV #0310h,S ; OPCODE = 0310h : MOV #1,dst is coded MOV 0(R3),dst + CMP #1,TOS ; -- xxxx #1 ? + JZ PARAMENDOF + MOV #0320h,S ; OPCODE = 0320h : MOV #2,dst is coded MOV @R3,dst + CMP #2,TOS ; -- xxxx #2 ? + JZ PARAMENDOF + MOV #0220h,S ; OPCODE = 0220h : MOV #4,dst is coded MOV @R2,dst + CMP #4,TOS ; -- xxxx #4 ? + JZ PARAMENDOF + MOV #0230h,S ; OPCODE = 0230h : MOV #8,dst is coded MOV @R2+,dst + CMP #8,TOS ; -- xxxx #8 ? + JZ PARAMENDOF + MOV #0330h,S ; -- -1 OPCODE = 0330h : MOV #-1,dst is coded MOV @R3+,dst + CMP #-1,TOS ; -- xxxx #-1 ? + JZ PARAMENDOF + MOV #0030h,S ; -- xxxx for all other cases : MOV @PC+,dst +; case of "&xxxx," ; <== PARAM110 +; case of ",&xxxx" ; <== PARAM20 +StoreArg MOV &DDP,X ; + ADD #2,&DDP ; cell allot for arg +StoreTOS ; <== TYPE1DOES + MOV TOS,0(X) ; compile arg +; endcase of all "&xxxx" ; +; endcase of all "#xxxx" ; <== PARAM101,102,104,108,10M1 +; endcase of all "REG"|"@REG"|"@REG+" <== PARAM124 +PARAMENDOF MOV @PSP+,TOS ; -- + MOV @RSP+,IP ; + mNEXT ; -- S=OPCODE,T=OPCODEADR +; ----------------------------------; +PARAM11 CMP.B #'&',W ; -- sep JNE PARAM12 - -; case of "&xxxx," ; -- sep search for "&xxxx," -PARAM110 MOV #0210h,S ; -- sep set code type : xxxx(SR) with AS=0b01 ==> x210h (and SR=0 !) - +; case of "&xxxx," ; -- sep search for "&xxxx," +PARAM110 MOV #0210h,S ; -- sep set code type : xxxx(SR) with AS=0b01 ==> x210h (and SR=0 !) ; case of "&xxxx," -; case of ",&xxxx" ; <== PARAM20 -PARAM111 ADD #1,&TOIN ; -- sep skip "&" prefix - CALL #SearchARG ; -- arg abort if not found - JMP StoreArg ; -- then ret -; ------------------------------------------ - -PARAM12 CMP.B #'@',W ; -- sep +; case of ",&xxxx" ; <== PARAM20 +PARAM111 ADD #1,&TOIN ; -- sep skip "&" prefix + CALL #SearchARG ; -- arg abort if not found + JMP StoreArg ; -- then ret +; ----------------------------------; +PARAM12 CMP.B #'@',W ; -- sep JNE PARAM13 - ; case of "@REG,"|"@REG+," -PARAM120 MOV #0020h,S ; -- sep init ASMTYPE with indirect code type : AS=0b10 - ADD #1,&TOIN ; -- sep skip "@" prefix - CALL #SearchREG ; Z = not found - JNZ PARAM123 ; -- value REG of "@REG," found - -; case of "@REG+," ; -- c-addr REG of "@REG" not found, search REG of "@REG+" -PARAM121 ADD #0010h,S ; change ASMTYPE from @REG to @REG+ type - MOV #'+',TOS ; -- "+" as WORD separator to find REG of "@REG+," - CALL #SearchREG ; -- value|c-addr X = flag - -; case of "@REG+," ; -; case of "xxxx(REG)," ; <== PARAM130 - ; cases of double separator: +, and ), -PARAM122 CMP &SOURCE_LEN,&TOIN ; test OPCODE II parameter ending by REG+ or (REG) without comma, - JZ PARAM123 ; i.e. >IN = SOURCE_LEN : don't skip char CR ! - ADD #1,&TOIN ; -- 000R skip "," ready for the second operand search - +PARAM120 MOV #0020h,S ; -- sep init OPCODE with indirect code type : AS=0b10 + ADD #1,&TOIN ; -- sep skip "@" prefix + CALL #SearchREG ; Z = not found + JNZ PARAM123 ; -- value REG of "@REG," found +; case of "@REG+," ; -- addr REG of "@REG" not found, search REG of "@REG+" +PARAM121 ADD #0010h,S ; change OPCODE from @REG to @REG+ type + MOV #'+',TOS ; -- "+" as WORD separator to find REG of "@REG+," + CALL #SearchREG ; -- value|addr X = flag +; case of "@REG+," ; +; case of "xxxx(REG)," ; <== PARAM130 + ; case of double separator: +, and ), +PARAM122 CMP &SOURCE_LEN,&TOIN ; test OPCODE II parameter ending by REG+ or (REG) without comma, + JZ PARAM123 ; i.e. >IN = SOURCE_LEN : don't skip char CR ! + ADD #1,&TOIN ; -- 000R skip "," ready for the second operand search ; case of "@REG+," ; case of "xxxx(REG)," -; case of "@REG," ; <== PARAM120 -; case of "REG," ; <== PARAM13 -PARAM123 SWPB TOS ; 000R -- 0R00 swap bytes because it's not a dst REG typeI (not a 2 ops inst.) - -; case of "@REG+," ; -- 0R00 (src REG typeI) -; case of "xxxx(REG)," ; -- 0R00 (src REG typeI or dst REG typeII) -; case of "@REG," ; -- 0R00 (src REG typeI) -; case of "REG," ; -- 0R00 (src REG typeI or dst REG typeII) -; case of ",REG" ; -- 000R <== PARAM21 (dst REG typeI) -; case of ",xxxx(REG)" ; -- 000R <== PARAM210 (dst REG typeI) -PARAM124 ADD TOS,S ; -- 0R00|000R - JMP PARAMENDOF ; -; ------------------------------------------ - -; case of "REG,"|"xxxx(REG)," ; first, searg REG of "REG," -PARAM13 CALL #SearchREG ; -- sep save >IN for second parsing (case of "xxxx(REG),") - JNZ PARAM123 ; -- 000R REG of "REG," found, S=ASMTYPE=0 - -; case of "xxxx(REG)," ; -- c-addr "REG," not found -PARAM130 ADD #0010h,S ; AS=0b01 for indexing address - CALL #ComputeARGparenREG ; compile xxxx and search REG of "(REG)" - JMP PARAM122 ; +; case of "@REG," ; -- 000R <== PARAM120 +; case of "REG," ; -- 000R <== PARAM13 +PARAM123 SWPB TOS ; -- 0R00 swap bytes because it's not a dst REG typeI (not a 2 ops inst.) +; case of "@REG+," ; -- 0R00 (src REG typeI) +; case of "xxxx(REG)," ; -- 0R00 (src REG typeI or dst REG typeII) +; case of "@REG," ; -- 0R00 (src REG typeI) +; case of "REG," ; -- 0R00 (src REG typeI or dst REG typeII) +; case of ",REG" ; -- 000R <== PARAM21 (dst REG typeI) +; case of ",xxxx(REG)" ; -- 000R <== PARAM210 (dst REG typeI) +PARAM124 ADD TOS,S ; -- 0R00|000R + JMP PARAMENDOF +; ----------------------------------; +; case of "REG,"|"xxxx(REG)," ; first, searg REG of "REG," +PARAM13 CALL #SearchREG ; -- sep save >IN for second parsing (case of "xxxx(REG),") + JNZ PARAM123 ; -- 000R REG of "REG," found, S=OPCODE=0 +; case of "xxxx(REG)," ; -- c-addr "REG," not found +PARAM130 ADD #0010h,S ; AS=0b01 for indexing address + CALL #ComputeARGparenREG; compile xxxx and search REG of "(REG)" + JMP PARAM122 ; ; ---------------------------------------------------------------------- ; DTCforthMSP430FR5xxx ASSEMBLER : INTERPRET 2th OPERAND ; ---------------------------------------------------------------------- -INITPARAM2 ; for OPCODES TYPE III - MOV #0,S ; init ASMTYPE=0 - MOV &DDP,T ; T=OPCODEADR - ADD #2,&DDP ; make room for opcode - -; PARAM2 -- ; parse input buffer until BL and compute this 2th operand -PARAM2 mDOCOL ; - .word FBLANK,SKIP ; skip space(s) between "arg1," and "arg2" if any; use not S,T. - FORTHtoASM ; -- c-addr search for '&' of "&xxxx - CMP.B #'&',0(TOS) ; - MOV #20h,TOS ; -- " " as WORD separator to find xxxx of ",&xxxx" - JNE PARAM21 ; '&' not found - -; case of ",&xxxx" ; -PARAM20 ADD #0082h,S ; change ASMTYPE : AD=1, dst = R2 - JMP PARAM111 ; -- " " -; ------------------------------------------ - -; case of ",REG"|",xxxx(REG) ; -- " " first, search REG of ",REG" -PARAM21 CALL #SearchREG ; - JNZ PARAM124 ; -- 000R REG of ",REG" found - -; case of ",xxxx(REG) ; -- c-addr REG not found -PARAM210 ADD #0080h,S ; set AD=1 - CALL #ComputeARGparenREG ; compile argument xxxx and search REG of "(REG)" - JMP PARAM124 ; -- 000R REG of "(REG) found - +PARAM3 ; for OPCODES TYPE III + MOV #0,S ; init OPCODE=0 + MOV &DDP,T ; T=OPCODEADR + ADD #2,&DDP ; make room for opcode +; ----------------------------------; +PARAM2 mDOCOL ; parse input buffer until BL and compute this 2th operand + .word FBLANK,SKIP ; skip space(s) between "arg1," and "arg2" if any; use not S,T. + FORTHtoASM ; -- c-addr search for '&' of "&xxxx + CMP.B #'&',0(TOS) ; + MOV #20h,TOS ; -- ' ' as WORD separator to find xxxx of ",&xxxx" + JNE PARAM21 ; '&' not found +; case of ",&xxxx" ; +PARAM20 ADD #0082h,S ; change OPCODE : AD=1, dst = R2 + JMP PARAM111 ; -- ' ' +; ----------------------------------; +; case of ",REG"|",xxxx(REG) ; -- ' ' first, search REG of ",REG" +PARAM21 CALL #SearchREG ; + JNZ PARAM124 ; -- 000R REG of ",REG" found +; case of ",xxxx(REG) ; -- addr REG not found +PARAM210 ADD #0080h,S ; set AD=1 + CALL #ComputeARGparenREG; compile argument xxxx and search REG of "(REG)" + JMP PARAM124 ; -- 000R REG of "(REG) found ; ---------------------------------------------------------------------- ; DTCforthMSP430FR5xxx ASSEMBLER: OPCODES TYPE 0 : zero operand f:-) @@ -329,16 +297,13 @@ PARAM210 ADD #0080h,S ; set AD=1 ; OPCODE(dst) for TYPE I or TYPE II = 0bxxxx dst register ; ---------------------------------------------------------------------- -; TYPE1DOES -- PFADOES search and compute PARAM1 & PARAM2 as src and dst operands then compile instruction -TYPE1DOES ; -- PFADOES - .word lit,',' ; -- PFADOES "," char separator for PARAM1 - .word PARAM1 ; -- PFADOES - .word PARAM2 ; -- PFADOES char separator (BL) included in PARAM2 - FORTHtoASM ; -- PFADOES -MAKEOPCODE MOV @TOS,TOS ; -- opcode part of instruction - BIS S,TOS ; -- opcode opcode is complete - MOV T,X ; -- opcode X=T= OPCODEADR to compile opcode - JMP StoreTOS ; then EXIT +TYPE1DOES .word lit,',',PARAM1 ; -- BODYDOES + .word PARAM2 ; -- BODYDOES char separator (BL) included in PARAM2 + FORTHtoASM ; +MAKEOPCODE MOV T,X ; -- opcode X= OPCODEADR to compile opcode + MOV @TOS,TOS ; -- opcode part of instruction + BIS S,TOS ; -- opcode opcode is complete + JMP StoreTOS ; -- then EXIT asmword "MOV" mDODOES @@ -347,91 +312,69 @@ MAKEOPCODE MOV @TOS,TOS ; -- opcode part of inst asmword "MOV.B" mDODOES .word TYPE1DOES,4040h - asmword "ADD" mDODOES .word TYPE1DOES,5000h - asmword "ADD.B" mDODOES .word TYPE1DOES,5040h - asmword "ADDC" mDODOES .word TYPE1DOES,6000h - asmword "ADDC.B" mDODOES .word TYPE1DOES,6040h - asmword "SUBC" mDODOES .word TYPE1DOES,7000h - asmword "SUBC.B" mDODOES .word TYPE1DOES,7040h - asmword "SUB" mDODOES .word TYPE1DOES,8000h - asmword "SUB.B" mDODOES .word TYPE1DOES,8040h - asmword "CMP" mDODOES .word TYPE1DOES,9000h - asmword "CMP.B" mDODOES .word TYPE1DOES,9040h - asmword "DADD" mDODOES .word TYPE1DOES,0A000h - asmword "DADD.B" mDODOES .word TYPE1DOES,0A040h - asmword "BIT" mDODOES .word TYPE1DOES,0B000h - asmword "BIT.B" mDODOES .word TYPE1DOES,0B040h - asmword "BIC" mDODOES .word TYPE1DOES,0C000h - asmword "BIC.B" mDODOES .word TYPE1DOES,0C040h - asmword "BIS" mDODOES .word TYPE1DOES,0D000h - asmword "BIS.B" mDODOES .word TYPE1DOES,0D040h - asmword "XOR" mDODOES .word TYPE1DOES,0E000h - asmword "XOR.B" mDODOES .word TYPE1DOES,0E040h - asmword "AND" mDODOES .word TYPE1DOES,0F000h - asmword "AND.B" mDODOES .word TYPE1DOES,0F040h @@ -453,61 +396,49 @@ MAKEOPCODE MOV @TOS,TOS ; -- opcode part of inst ; OPCODE(dst) for TYPE I or TYPE II = 0bxxxx dst register ; ---------------------------------------------------------------------- -; TYPE2DOES -- PFADOES search and compute PARAM1 as dst operand then compile instruction -TYPE2DOES ; -- PFADOES - .word FBLANK ; char separator for PARAM1 - .word PARAM1 - FORTHtoASM ; -- PFADOES - MOV S,W ; - AND #0070h,S ; keep B/W & AS infos in ASMTYPE - SWPB W ; (REG org --> REG dst) - AND #000Fh,W ; keep REG -BIS_ASMTYPE BIS W,S ; -- PFADOES add it in ASMTYPE - JMP MAKEOPCODE ; -- then end +TYPE2DOES .word FBLANK,PARAM1 ; -- BODYDOES + FORTHtoASM ; + MOV S,W ; + AND #0070h,S ; keep B/W & AS infos in OPCODE + SWPB W ; (REG org --> REG dst) + AND #000Fh,W ; keep REG +BIS_ASMTYPE BIS W,S ; -- BODYDOES add it in OPCODE + JMP MAKEOPCODE ; -- then end - asmword "RRC" ; Rotate Right through Carry ( word) + asmword "RRC" ; Rotate Right through Carry ( word) mDODOES .word TYPE2DOES,1000h - asmword "RRC.B" ; Rotate Right through Carry ( byte) mDODOES .word TYPE2DOES,1040h - asmword "SWPB" ; Swap bytes mDODOES .word TYPE2DOES,1080h - asmword "RRA" mDODOES .word TYPE2DOES,1100h - asmword "RRA.B" mDODOES .word TYPE2DOES,1140h - asmword "SXT" mDODOES .word TYPE2DOES,1180h - asmword "PUSH" mDODOES .word TYPE2DOES,1200h - asmword "PUSH.B" mDODOES .word TYPE2DOES,1240h - asmword "CALL" mDODOES .word TYPE2DOES,1280h - -BOUNDERRWM1 ADD #1,W ; <== RRAM|RRUM|RRCM|RLAM error -BOUNDERRORW MOV W,TOS ; <== PUSHM|POPM|ASM_branch error -BOUNDERROR ; <== REG number error - mDOCOL ; -- n n = value out of bounds +BOUNDERRWM1 ADD #1,W ; <== RRAM|RRUM|RRCM|RLAM error +BOUNDERRORW MOV W,TOS ; <== PUSHM|POPM|ASM_branch error +BOUNDERROR ; <== REG number error + mDOCOL ; -- n n = value out of bounds .word DOT,XSQUOTE - .byte 13,"out of bounds" + .byte 13,"out of bounds" .word QABORTYES ; -------------------------------------------------------------------------------- @@ -529,59 +460,52 @@ BOUNDERROR ; <== REG number error ; RxxM syntax: RxxM #n,REG with 0 < n < 5 -; TYPE3DOES -- PFADOES parse input stream to search : " #N, REG " as operands of RLAM|RRAM|RRUM|RRCM -TYPE3DOES ; -- PFADOES - .word FBLANK,SKIP ; skip spaces if any - FORTHtoASM ; -- PFADOES c-addr - ADD #1,&TOIN ; skip "#" - MOV #',',TOS ; -- PFADOES "," +TYPE3DOES .word FBLANK,SKIP ; skip spaces if any + FORTHtoASM ; -- BODYDOES c-addr + ADD #1,&TOIN ; skip "#" + MOV #',',TOS ; -- BODYDOES "," ASMtoFORTH .word WORDD,QNUMBER - .word QFBRAN,NotFound ; ABORT - .word INITPARAM2 ; -- PFADOES 0x000N S=ASMTYPE = 0x000R + .word QFBRAN,NotFound ; ABORT + .word PARAM3 ; -- BODYDOES 0x000N S=OPCODE = 0x000R FORTHtoASM - MOV TOS,W ; -- PFADOES n W = n - MOV @PSP+,TOS ; -- PFADOES - SUB #1,W ; W = n floored to 0 + MOV TOS,W ; -- BODYDOES n W = n + MOV @PSP+,TOS ; -- BODYDOES + SUB #1,W ; W = n floored to 0 JN BOUNDERRWM1 - MOV @TOS,X ; X=OPCODE - RLAM #4,X ; OPCODE bit 1000h --> C - JNC RxxMINSTRU ; -PxxxINSTRU MOV S,Y ; S=REG, Y=REG to test - RLAM #3,X ; OPCODE bit 0200h --> C - JNC PUSHMINSTRU ; W=n-1 Y=REG -POPMINSTRU SUB W,S ; to make POPM opcode, compute first REG to POP; TI is complicated.... -PUSHMINSTRU SUB W,Y ; Y=REG-(n-1) + MOV @TOS,X ; X=OPCODE + RLAM #4,X ; OPCODE bit 1000h --> C + JNC RxxMINSTRU ; if bit 1000h = 0 +PxxxINSTRU MOV S,Y ; S=REG, Y=REG to test + RLAM #3,X ; OPCODE bit 0200h --> C + JNC PUSHMINSTRU ; W=n-1 Y=REG +POPMINSTRU SUB W,S ; to make POPM opcode, compute first REG to POP; TI is complicated.... +PUSHMINSTRU SUB W,Y ; Y=REG-(n-1) CMP #16,Y - JHS BOUNDERRWM1 ; JC=JHS (U>=) - RLAM #4,W ; W = n << 4 - JMP BIS_ASMTYPE ; PFADOES -- -RxxMINSTRU CMP #4,W ; - JHS BOUNDERRWM1 ; JC=JHS (U>=) - SWPB W ; -- PFADOES W = n << 8 - RLAM #2,W ; W = N << 10 - JMP BIS_ASMTYPE ; PFADOES -- + JHS BOUNDERRWM1 ; JC=JHS (U>=) + RLAM #4,W ; W = n << 4 + JMP BIS_ASMTYPE ; BODYDOES -- +RxxMINSTRU CMP #4,W ; + JHS BOUNDERRWM1 ; JC=JHS (U>=) + SWPB W ; -- BODYDOES W = n << 8 + RLAM #2,W ; W = N << 10 + JMP BIS_ASMTYPE ; BODYDOES -- asmword "RRCM" mDODOES .word TYPE3DOES,0050h - asmword "RRAM" mDODOES .word TYPE3DOES,0150h - asmword "RLAM" mDODOES .word TYPE3DOES,0250h - asmword "RRUM" mDODOES .word TYPE3DOES,0350h - asmword "PUSHM" mDODOES .word TYPE3DOES,1500h - asmword "POPM" mDODOES .word TYPE3DOES,1700h @@ -599,87 +523,84 @@ RxxMINSTRU CMP #4,W ; ; OPCODE(code) for TYPE JL < = 0x38xx + (offset AND 3FF) ; branch if (N xor V) = 1 ; OPCODE(code) for TYPE JMP = 0x3Cxx + (offset AND 3FF) -CODE_JMP mDOCON ; branch always - .word 3C00h - - asmword "S>=" ; if >= assertion (opposite of jump if < ) + asmword "S>=" ; if >= assertion (opposite of jump if < ) mDOCON .word 3800h - asmword "S<" ; if < assertion + asmword "S<" ; if < assertion mDOCON .word 3400h - asmword "0>=" ; if 0>= assertion ; use only with IF UNTIL WHILE ! + asmword "0>=" ; if 0>= assertion ; use only with IF UNTIL WHILE ! mDOCON .word 3000h - asmword "0<" ; jump if 0< ; use only with ?JMP ?GOTO ! + asmword "0<" ; jump if 0< ; use only with ?JMP ?GOTO ! mDOCON .word 3000h - asmword "U<" ; if U< assertion + asmword "U<" ; if U< assertion mDOCON .word 2C00h - asmword "U>=" ; if U>= assertion + asmword "U>=" ; if U>= assertion mDOCON .word 2800h - asmword "0<>" ; if <>0 assertion + asmword "0<>" ; if <>0 assertion mDOCON .word 2400h - asmword "0=" ; if =0 assertion + asmword "0=" ; if =0 assertion mDOCON .word 2000h ;ASM IF OPCODE -- @OPCODE1 asmword "IF" ASM_IF MOV &DDP,W - MOV TOS,0(W) ; compile incomplete opcode + MOV TOS,0(W) ; compile incomplete opcode ADD #2,&DDP MOV W,TOS mNEXT ;ASM THEN @OPCODE -- resolve forward branch asmword "THEN" -ASM_THEN MOV &DDP,W ; -- @OPCODE W=dst - MOV TOS,Y ; Y=@OPCODE -ASM_THEN1 MOV @PSP+,TOS ; -- - MOV Y,X ; - ADD #2,X ; -- Y=@OPCODE W=dst X=src+2 - SUB X,W ; -- Y=@OPCODE W=dst-src+2=displacement*2 (bytes) - RRA W ; -- Y=@OPCODE W=displacement (words) +ASM_THEN MOV &DDP,W ; -- @OPCODE W=dst + MOV TOS,Y ; Y=@OPCODE +ASM_THEN1 MOV @PSP+,TOS ; -- + MOV Y,X ; + ADD #2,X ; -- Y=@OPCODE W=dst X=src+2 + SUB X,W ; -- Y=@OPCODE W=dst-src+2=displacement*2 (bytes) + RRA W ; -- Y=@OPCODE W=displacement (words) CMP #512,W - JC BOUNDERRORW ; (JHS) unsigned branch if u> 511 - BIS W,0(Y) ; -- [@OPCODE]=OPCODE completed + JC BOUNDERRORW ; (JHS) unsigned branch if u> 511 + BIS W,0(Y) ; -- [@OPCODE]=OPCODE completed mNEXT ;C ELSE @OPCODE1 -- @OPCODE2 branch for IF..ELSE asmword "ELSE" -ASM_ELSE MOV &DDP,W ; -- W=HERE - MOV #3C00h,0(W) ; compile unconditionnal branch - ADD #2,&DDP ; -- DP+2 +ASM_ELSE MOV &DDP,W ; -- W=HERE + MOV #3C00h,0(W) ; compile unconditionnal branch + ADD #2,&DDP ; -- DP+2 SUB #2,PSP - MOV W,0(PSP) ; -- @OPCODE2 @OPCODE1 - JMP ASM_THEN ; -- @OPCODE2 + MOV W,0(PSP) ; -- @OPCODE2 @OPCODE1 + JMP ASM_THEN ; -- @OPCODE2 -;C BEGIN -- @BEGIN same as FORTH counterpart +;C BEGIN -- @BEGIN same as FORTH counterpart ;C UNTIL @BEGIN OPCODE -- resolve conditional backward branch asmword "UNTIL" -ASM_UNTIL MOV @PSP+,W ; -- OPCODE W=dst -ASM_UNTIL1 MOV TOS,Y - MOV @PSP+,TOS ; -- - MOV &DDP,X ; -- Y=OPCODE X=HERE W=dst - SUB #2,W ; -- Y=OPCODE X=HERE W=dst-2 - SUB X,W ; -- Y=OPCODE X=src W=src-dst-2=displacement (bytes) - RRA W ; -- Y=OPCODE X=HERE W=displacement (words) +ASM_UNTIL MOV @PSP+,W ; -- OPCODE W=@BEGIN +ASM_UNTIL1 MOV TOS,Y ; Y=OPCODE W=@BEGIN +ASM_UNTIL2 MOV @PSP+,TOS ; -- + MOV &DDP,X ; -- Y=OPCODE X=HERE W=dst + SUB #2,W ; -- Y=OPCODE X=HERE W=dst-2 + SUB X,W ; -- Y=OPCODE X=src W=src-dst-2=displacement (bytes) + RRA W ; -- Y=OPCODE X=HERE W=displacement (words) CMP #-512,W - JL BOUNDERRORW ; signed branch if < -512 - AND #3FFh,W ; -- Y=OPCODE X=HERE W=troncated negative displacement (words) - BIS W,Y ; -- Y=OPCODE (completed) + JL BOUNDERRORW ; signed branch if < -512 + AND #3FFh,W ; -- Y=OPCODE X=HERE W=troncated negative displacement (words) + BIS W,Y ; -- Y=OPCODE (completed) MOV Y,0(X) ADD #2,&DDP mNEXT @@ -687,138 +608,291 @@ ASM_UNTIL1 MOV TOS,Y ;X AGAIN @BEGIN -- uncond'l backward branch ; unconditional backward branch asmword "AGAIN" -ASM_AGAIN mDOCOL ; -- @BEGIN - .word CODE_JMP ; -- @BEGIN opcode - .word ASM_UNTIL ; -- - .word EXIT ; -- +ASM_AGAIN MOV TOS,W ; W=@BEGIN + MOV #3C00h,Y ; Y = asmcode JMP + JMP ASM_UNTIL2 ; ;C WHILE @BEGIN OPCODE -- @WHILE @BEGIN asmword "WHILE" -ASM_WHILE mDOCOL ; -- @BEGIN OPCODE - .word ASM_IF ; -- @BEGIN @WHILE - .word SWAP ; -- @WHILE @BEGIN - .word EXIT +ASM_WHILE mDOCOL ; -- @BEGIN OPCODE + .word ASM_IF,SWAP,EXIT ;C REPEAT @WHILE @BEGIN -- resolve WHILE loop asmword "REPEAT" -ASM_REPEAT mDOCOL ; -- @WHILE @BEGIN - .word CODE_JMP ; -- @WHILE @BEGIN opcode - .word ASM_UNTIL ; -- @WHILE - .word ASM_THEN ; -- - .word EXIT +ASM_REPEAT mDOCOL ; -- @WHILE @BEGIN + .word ASM_AGAIN,ASM_THEN,EXIT ; ------------------------------------------------------------------------------------------ ; DTCforthMSP430FR5xxx ASSEMBLER : branch up to 3 backward labels and up to 3 forward labels ; ------------------------------------------------------------------------------------------ ; used for non canonical branchs, as BASIC language: "goto line x" -; when a branch to label is resolved, it's ready for new use - -BACKWARDDOES ; - FORTHtoASM - MOV @RSP+,IP - MOV @TOS,TOS - MOV TOS,Y ; Y = ASMBWx - MOV @PSP+,TOS ; - MOV @Y,W ; W = [ASMBWx] - CMP #0,W ; W = 0 ? - MOV #0,0(Y) ; clear [ASMBWx] for next use -BACKWUSE ; -- OPCODE - JNZ ASM_UNTIL1 -BACKWSET ; -- - MOV &DDP,0(Y) ; [ASMBWx] = DDP - mNEXT +; labels BWx and FWx must be respectively set and used at the beginning of line (>IN < 8). +; FWx at the beginning of a line can resolve only one previous GOTO|?GOTO FWx. +; BWx at the beginning of a line can be resolved by any subsequent GOTO|?GOTO BWx. + +BACKWDOES FORTHtoASM + MOV @RSP+,IP ; + MOV TOS,Y ; -- PFA Y = ASMBWx addr + MOV @PSP+,TOS ; -- + MOV @Y,W ; W = LABEL + CMP #8,&TOIN ; are we colon 8 or more ? +BACKWUSE JHS ASM_UNTIL1 ; yes, use this label +BACKWSET MOV &DDP,0(Y) ; no, set LABEL = DP + mNEXT ; backward label 1 asmword "BW1" mdodoes - .word BACKWARDDOES - .word ASMBW1 ; in RAM - + .word BACKWDOES + .word 0 ; backward label 2 asmword "BW2" mdodoes - .word BACKWARDDOES - .word ASMBW2 ; in RAM - + .word BACKWDOES + .word 0 ; backward label 3 asmword "BW3" mdodoes - .word BACKWARDDOES - .word ASMBW3 ; in RAM - -FORWARDDOES - FORTHtoASM - MOV @RSP+,IP - MOV &DDP,W ; - MOV @TOS,TOS - MOV @TOS,Y ; Y=[ASMFWx] - CMP #0,Y ; ASMFWx = 0 ? (FWx is free?) - MOV #0,0(TOS) ; clear [ASMFWx] for next use -FORWUSE ; PFA -- @OPCODE - JNZ ASM_THEN1 ; no -FORWSET ; OPCODE PFA -- - MOV @PSP+,0(W) ; -- PFA compile incomplete opcode - ADD #2,&DDP ; increment DDP - MOV W,0(TOS) ; store @OPCODE into ASMFWx - MOV @PSP+,TOS ; -- - mNEXT + .word BACKWDOES + .word 0 +FORWDOES FORTHtoASM + MOV @RSP+,IP + MOV &DDP,W ; + MOV @TOS,Y ; -- PFA Y=[ASMFWx] + CMP #8,&TOIN ; are we colon 8 or more ? +FORWUSE JLO ASM_THEN1 ; no: resolve FWx with W=DDP, Y=ASMFWx +FORWSET MOV @PSP+,0(W) ; yes compile incomplete opcode + ADD #2,&DDP ; increment DDP + MOV W,0(TOS) ; store @OPCODE into ASMFWx + MOV @PSP+,TOS ; -- + mNEXT ; forward label 1 asmword "FW1" mdodoes - .word FORWARDDOES - .word ASMFW1 ; in RAM - + .word FORWDOES + .word 0 ; forward label 2 asmword "FW2" mdodoes - .word FORWARDDOES - .word ASMFW2 ; in RAM - + .word FORWDOES + .word 0 ; forward label 3 asmword "FW3" mdodoes - .word FORWARDDOES - .word ASMFW3 ; in RAM - - -; invert FORTH conditionnal branch FORTH_JMP_OPCODE -- LABEL_JMP_OPCODE -INVJMP CMP #3000h,TOS - JZ INVJMPEND ; case of JN, do nothing - XOR #0400h,TOS ; case of: JNZ<-->JZ JNC<-->JC JL<-->JGE - BIT #1000h,TOS ; 3xxxh case ? - JZ INVJMPEND ; no - XOR #0800h,TOS ; complementary action for JL<-->JGE -INVJMPEND mNEXT - -;ASM GOTO