OSDN Git Service

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