OSDN Git Service

la der de der
[fast-forth/master.git] / MSP430-FORTH / SD_430FR5994 / RC5toLCD.4TH
1
2 ; -----------------------------------
3 ; RC5TOLCD.4th for MSP_EXP430FR5994
4 ; -----------------------------------
5
6
7     CODE ABORT_RC5TOLCD
8     SUB #2,R15
9     MOV R14,0(R15)
10     MOV &$180A,R14
11     SUB #401,R14
12     COLON
13     $0D EMIT
14     ABORT" FastForth V4.1 please!"
15     RST_RET
16     ;
17
18     ABORT_RC5TOLCD
19
20     MARKER {RC5TOLCD}
21     8 ALLOT
22
23
24
25
26 ; ------------------------------------------------------------------
27 ; first we download the set of definitions we need (from CORE_ANS.4th for MSP_EXP430FR5994)
28 ; ------------------------------------------------------------------
29
30     [UNDEFINED] =
31     [IF]
32     CODE =
33     SUB @R15+,R14
34     0<> IF
35         AND #0,R14
36         MOV @R13+,R0
37     THEN
38     XOR #-1,R14
39     MOV @R13+,R0
40     ENDCODE
41     [THEN]
42
43     [UNDEFINED] IF
44     [IF]
45     CODE IF
46     SUB #2,R15
47     MOV R14,0(R15)
48     MOV &$1DBE,R14
49     ADD #4,&$1DBE
50     MOV #[THEN]+$52,0(R14)
51     ADD #2,R14
52     MOV @R13+,R0
53     ENDCODE IMMEDIATE
54
55     CODE THEN
56     MOV &$1DBE,0(R14)
57     MOV @R15+,R14
58     MOV @R13+,R0
59     ENDCODE IMMEDIATE
60     [THEN]
61
62     [UNDEFINED] ELSE
63     [IF]
64     CODE ELSE
65     ADD #4,&$1DBE
66     MOV &$1DBE,R10
67     MOV #[THEN]+$58,-4(R10)
68     MOV R10,0(R14)
69     SUB #2,R10
70     MOV R10,R14
71     MOV @R13+,R0
72     ENDCODE IMMEDIATE
73     [THEN]
74
75
76     [UNDEFINED] CR
77     [IF]
78     CODE CR
79     MOV #[THEN],R0
80     ENDCODE
81
82     :NONAME
83     $0D EMIT $0A EMIT
84     ; IS CR
85     [THEN]
86
87     [UNDEFINED] >BODY
88     [IF]
89     CODE >BODY
90     ADD #4,R14
91     MOV @R13+,R0
92     ENDCODE
93     [THEN]
94
95 ; --------------------------
96 ; end of definitions we need
97 ; --------------------------
98
99     CODE 20_US
100     BEGIN
101         MOV &{RC5TOLCD}+6,R9
102         SUB #2,R9
103         BEGIN
104             MOV #0,R3
105             SUB #1,R9
106         0=  UNTIL
107         MOV #0,R3
108         SUB #1,R14
109     0= UNTIL
110     MOV @R15+,R14
111     MOV @R1+,R13
112     ENDCODE
113
114     CODE TOP_LCD
115     BIS.B #4,&$243
116     BIT.B #1,&$241
117     0= IF
118         AND.B #$0F,R14
119         MOV.B R14,&$222
120         BIC.B #4,&$243
121         MOV @R15+,R14
122         MOV @R13+,R0
123     THEN
124     SUB #2,R15
125     MOV R14,0(R15)
126     BIC.B #4,&$243
127     MOV.B &$220,R14
128     AND.B #$0F,R14
129     MOV @R13+,R0
130     ENDCODE
131
132     CODE LCD_WRC
133     BIS.B #2,&$243
134 BW1 SUB #2,R15
135     MOV R14,0(R15)
136     RRUM #4,R14
137     BIC.B #1,&$243
138     BIS.B #$0F,&$224
139     COLON
140     TOP_LCD 2 20_US
141     TOP_LCD 2 20_US
142     ;
143
144     CODE LCD_WRF
145     BIC.B #2,&$243
146     GOTO BW1
147     ENDCODE
148
149     : LCD_CLEAR $01 LCD_WRF 100 20_us ;
150     : LCD_HOME $02 LCD_WRF 100 20_us ;
151
152     HDNCODE WDT_INT
153     BIT.B #$20,&$240
154     0= IF
155         CMP #19,&$3D6
156         U< IF
157             ADD #1,&$3D6
158         THEN
159     ELSE
160         BIT.B #$40,&$240
161         0= IF
162             CMP #3,&$3D6
163             U>= IF
164             SUB #1,&$3D6
165             THEN
166         THEN
167     THEN
168     RETI
169     ENDCODE
170
171     HDNCODE RC5_INT
172     MOV #1778,R9
173     MOV #14,R10
174     BEGIN
175       MOV #%1011100100,&$380
176         RRUM    #1,R9
177         MOV     R9,R8
178         RRUM    #1,R8
179         ADD     R9,R8
180         BEGIN
181             CMP R8,&$390
182         U>= UNTIL
183         BIT.B   #4,&$200
184         ADDC    R11,R11
185         MOV.B   &$200,&$208
186         BIC.B   #4,&$20C
187         SUB     #1,R10
188     0<> WHILE
189         ADD R9,R8
190         BEGIN
191             MOV &$390,R9
192             CMP R8,R9
193             U>= ?GOTO FW1
194             BIT.B #4,&$20C
195         0<> UNTIL
196     REPEAT
197     BIC #$30,&$380
198     RLAM    #1,R11
199     MOV.B   R11,R9
200     RRUM    #2,R9
201     BIT     #$4000,R11
202     0= IF   BIS #$40,R9
203     THEN
204     RRUM    #3,R11
205     XOR     @R1,R11
206     BIT     #$400,R11
207     0= ?GOTO FW2
208     XOR #$400,0(R1)
209     SUB #6,R15
210     MOV R14,4(R15)
211     MOV &$1DB6,2(R15)
212     MOV #$10,&$1DB6
213     MOV R9,0(R15)
214     MOV #0,R14
215     LO2HI
216     LCD_CLEAR
217     <# # #S #36 HOLD #>
218     ['] LCD_WRC IS EMIT
219     TYPE
220     ['] EMIT >BODY IS EMIT
221     HI2LO
222     MOV @R15+,&$1DB6
223     MOV @R15+,R14
224 FW1 BIC #$30,&$380
225 FW2 BIC #%1111_1000,0(R1)
226     RETI
227     ENDCODE
228
229     HDNCODE STOP_R2L
230     CMP #WDT_INT,&$FFEA
231     0= IF
232         BIC.B #4,&$20A
233         BIC.B #4,&$20C
234         MOV #0,&$3C0
235         MOV #0,&$340
236         MOV #0,&$342
237         MOV #{RC5TOLCD},R10
238         MOV #<#+$4C,-2(R10)
239         MOV @R10+,&$1842
240         MOV @R10+,&$FFEA
241         MOV @R10+,&$FFDE
242     THEN
243     MOV @R1+,R0
244     ENDCODE
245
246     CODE STOP
247 BW1 CALL #STOP_R2L
248     COLON
249     ECHO
250     ." type START to start RC5toLCD"
251     ;
252
253     HDNCODE INIT_R2L
254     MOV #%10_1101_0100,&$3C0
255     $1800 @ 16000 =
256     [IF]
257         MOV #1,&$3A0
258         MOV #1,&$3E0
259     [THEN]
260     $1800 @ 24000 =
261     [IF]
262         MOV #2,&$3A0
263         MOV #2,&$3E0
264     [THEN]
265         MOV #19,&$3D2
266     MOV #%0110_0000,&$3C6
267     MOV #10,&$3D6
268     BIS.B #$20,&$204
269     BIS.B #$20,&$20A
270     BIS.B #7,&$245
271     BIC.B #7,&$247
272     BIS.B #$0F,&$224
273     BIC.B #$0F,&$226
274     BIS.B #4,&$20A
275     BIC.B #4,&$20C
276     MOV #%01_0001_0100,&$340
277     MOV ##3276,&$352
278     MOV #%10000,&$342
279     CALL &{RC5TOLCD}
280     CMP #$0E,R14
281     0<> IF
282         CMP #$0A,R14
283         U>= ?GOTO BW1
284     THEN
285     CMP #4,R14
286     0= ?GOTO BW1
287     LO2HI
288     #1000 20_US
289     %011 TOP_LCD
290     #205 20_US
291     %011 TOP_LCD
292     #5 20_US
293     %011 TOP_LCD
294     #2 20_US
295     %010 TOP_LCD
296     #2 20_US
297     %00101000 LCD_WRF
298     %1000 LCD_WRF
299     LCD_CLEAR
300     %0110 LCD_WRF
301     %1100 LCD_WRF
302     LCD_CLEAR
303     HI2LO
304     MOV @R1+,R0
305     ENDCODE
306
307     CODE START
308     CMP #WDT_INT,&$FFEA
309     0= IF
310         MOV @R13+,R0
311     THEN
312     MOV #STOP_R2L,&{RC5TOLCD}-2
313        MOV &$1842,&{RC5TOLCD}
314        MOV #INIT_R2L,&$1842
315     MOV &$FFEA,&{RC5TOLCD}+2
316     MOV #WDT_INT,&$FFEA
317     MOV &$FFDE,&{RC5TOLCD}+4
318     MOV #RC5_INT,&$FFDE
319     SUB #6,R15
320     MOV R14,4(R15)
321     MOV &$1800,2(R15)
322     MOV #0,0(R15)
323     MOV #200,R14
324     CALL #<#+8
325     MOV @R15,&{RC5TOLCD}+6
326     ADD #4,R15
327     MOV @R15+,R14
328     CALL #INIT_R2L
329     LO2HI
330     ." RC5toLCD is running,"
331     ."  Type STOP to quit."
332     HI2LO
333     MOV #ALLOT+8,R0
334     ENDCODE
335
336 RST_SET 
337
338 ECHO
339