- 4e-core430G2553 - Page 1
###############################################################################
# #
# IAR Assembler V5.30.1.50284/W32 for MSP430 21/Dec/2013 07:09:19 #
# Copyright 1996-2011 IAR Systems AB. #
# #
# Target option = MSP430 #
# Source file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-core430G2553.s43#
# List file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\List\4e-core430G2553.lst#
# Object file = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\Obj\4e-core430G2553.r43#
# Command line = C:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\4e-core430G2553.s43 #
# -OC:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\Obj\ #
# -s+ -M<> -w+ #
# -LC:\Dokumente und Einstellungen\All Users\Dokumente\4e4th\Debug\List\ #
# -i -p80 -t8 -xD -r -D__MSP430G2553__ #
# -IC:\Programme\IAR Systems\Embedded Workbench 6.0 Kickstart\430\INC\ #
# #
###############################################################################
1 000000 ; ----------------------------------------------
------------------------
2 000000 ; 4e4th is a Forth based on CamelForth
3 000000 ; for the Texas Instruments MSP430
4 000000 ;
5 000000 ; This program is free software; you can
redistribute it and/or modify
6 000000 ; it under the terms of the GNU General Public
License as published by
7 000000 ; the Free Software Foundation; either version 3
of the License, or
8 000000 ; (at your option) any later version.
9 000000 ;
10 000000 ; This program is distributed in the hope that
it will be useful,
11 000000 ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
12 000000 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
13 000000 ; GNU General Public License for more details.
14 000000 ;
15 000000 ; You should have received a copy of the GNU
General Public License
16 000000 ; along with this program. If not, see
.
17 000000 ;
18 000000 ; See LICENSE TERMS in Brads file readme.txt as
well.
19 000000
20 000000 ; ----------------------------------------------
------------------------
21 000000 ; 4e-core430.s43 - Machine Language Primitives -
MSP430G2553
22 000000 ; ----------------------------------------------
------------------------
23 000000
24 000000 ; Revision History
25 000000 ; 1 mar 09 bjr - changed Flash write and erase
primitives to correctly
26 000000 ; write RAM outside Info Flash and Main
Flash address limits.
27 000000
28 000000 #include "msp430.h" ;
#define controlled include file
1 000000 /***********************************************
********************
2 000000 *
*
3 000000 * This file is a generic include file controlled
by *
4 000000 * compiler/assembler IDE generated defines
*
5 000000 *
*
6 000000 ************************************************
*******************/
7 000000
8 000000 #ifndef __msp430
9 000000 #define __msp430
- 4e-core430G2553 - Page 2
10 000000
11 000000 #ifndef _SYSTEM_BUILD
12 000000 #pragma system_include
13 000000 #endif
14 000000
15 000000 #if defined (__MSP430C111__)
16 000000 #include "msp430c111.h"
18 000000 #elif defined (__MSP430C1111__)
19 000000 #include "msp430c1111.h"
21 000000 #elif defined (__MSP430C112__)
22 000000 #include "msp430c112.h"
24 000000 #elif defined (__MSP430C1121__)
25 000000 #include "msp430c1121.h"
27 000000 #elif defined (__MSP430C1331__)
28 000000 #include "msp430c1331.h"
30 000000 #elif defined (__MSP430C1351__)
31 000000 #include "msp430c1351.h"
33 000000 #elif defined (__MSP430C311S__)
34 000000 #include "msp430c311s.h"
36 000000 #elif defined (__MSP430C312__)
37 000000 #include "msp430c312.h"
39 000000 #elif defined (__MSP430C313__)
40 000000 #include "msp430c313.h"
42 000000 #elif defined (__MSP430C314__)
43 000000 #include "msp430c314.h"
45 000000 #elif defined (__MSP430C315__)
46 000000 #include "msp430c315.h"
48 000000 #elif defined (__MSP430C323__)
49 000000 #include "msp430c323.h"
51 000000 #elif defined (__MSP430C325__)
52 000000 #include "msp430c325.h"
54 000000 #elif defined (__MSP430C336__)
55 000000 #include "msp430c336.h"
57 000000 #elif defined (__MSP430C337__)
58 000000 #include "msp430c337.h"
60 000000 #elif defined (__MSP430C412__)
61 000000 #include "msp430c412.h"
63 000000 #elif defined (__MSP430C413__)
64 000000 #include "msp430c413.h"
66 000000 #elif defined (__MSP430CG4616__)
67 000000 #include "msp430cg4616.h"
69 000000 #elif defined (__MSP430CG4617__)
70 000000 #include "msp430cg4617.h"
72 000000 #elif defined (__MSP430CG4618__)
73 000000 #include "msp430cg4618.h"
75 000000 #elif defined (__MSP430CG4619__)
76 000000 #include "msp430cg4619.h"
78 000000 #elif defined (__MSP430E112__)
79 000000 #include "msp430e112.h"
81 000000 #elif defined (__MSP430E313__)
82 000000 #include "msp430e313.h"
84 000000 #elif defined (__MSP430E315__)
85 000000 #include "msp430e315.h"
87 000000 #elif defined (__MSP430E325__)
88 000000 #include "msp430e325.h"
90 000000 #elif defined (__MSP430E337__)
91 000000 #include "msp430e337.h"
93 000000 #elif defined (__MSP430F110__)
94 000000 #include "msp430f110.h"
96 000000 #elif defined (__MSP430F1101__)
97 000000 #include "msp430f1101.h"
99 000000 #elif defined (__MSP430F1101A__)
100 000000 #include "msp430f1101a.h"
102 000000 #elif defined (__MSP430F1111__)
103 000000 #include "msp430f1111.h"
105 000000 #elif defined (__MSP430F1111A__)
106 000000 #include "msp430f1111a.h"
108 000000 #elif defined (__MSP430F112__)
109 000000 #include "msp430f112.h"
111 000000 #elif defined (__MSP430F1121__)
112 000000 #include "msp430f1121.h"
114 000000 #elif defined (__MSP430F1121A__)
115 000000 #include "msp430f1121a.h"
117 000000 #elif defined (__MSP430F1122__)
118 000000 #include "msp430f1122.h"
120 000000 #elif defined (__MSP430F1132__)
121 000000 #include "msp430f1132.h"
123 000000 #elif defined (__MSP430F122__)
- 4e-core430G2553 - Page 3
124 000000 #include "msp430f122.h"
126 000000 #elif defined (__MSP430F1222__)
127 000000 #include "msp430f1222.h"
129 000000 #elif defined (__MSP430F123__)
130 000000 #include "msp430f123.h"
132 000000 #elif defined (__MSP430F1232__)
133 000000 #include "msp430f1232.h"
135 000000 #elif defined (__MSP430F133__)
136 000000 #include "msp430f133.h"
138 000000 #elif defined (__MSP430F135__)
139 000000 #include "msp430f135.h"
141 000000 #elif defined (__MSP430F147__)
142 000000 #include "msp430f147.h"
144 000000 #elif defined (__MSP430F148__)
145 000000 #include "msp430f148.h"
147 000000 #elif defined (__MSP430F149__)
148 000000 #include "msp430f149.h"
150 000000 #elif defined (__MSP430F1471__)
151 000000 #include "msp430f1471.h"
153 000000 #elif defined (__MSP430F1481__)
154 000000 #include "msp430f1481.h"
156 000000 #elif defined (__MSP430F1491__)
157 000000 #include "msp430f1491.h"
159 000000 #elif defined (__MSP430F155__)
160 000000 #include "msp430f155.h"
162 000000 #elif defined (__MSP430F156__)
163 000000 #include "msp430f156.h"
165 000000 #elif defined (__MSP430F157__)
166 000000 #include "msp430f157.h"
168 000000 #elif defined (__MSP430F167__)
169 000000 #include "msp430f167.h"
171 000000 #elif defined (__MSP430F168__)
172 000000 #include "msp430f168.h"
174 000000 #elif defined (__MSP430F169__)
175 000000 #include "msp430f169.h"
177 000000 #elif defined (__MSP430F1610__)
178 000000 #include "msp430f1610.h"
180 000000 #elif defined (__MSP430F1611__)
181 000000 #include "msp430f1611.h"
183 000000 #elif defined (__MSP430F1612__)
184 000000 #include "msp430f1612.h"
186 000000 #elif defined (__MSP430F2001__)
187 000000 #include "msp430f2001.h"
189 000000 #elif defined (__MSP430F2011__)
190 000000 #include "msp430f2011.h"
192 000000 #elif defined (__MSP430F2002__)
193 000000 #include "msp430f2002.h"
195 000000 #elif defined (__MSP430F2012__)
196 000000 #include "msp430f2012.h"
198 000000 #elif defined (__MSP430F2003__)
199 000000 #include "msp430f2003.h"
201 000000 #elif defined (__MSP430F2013__)
202 000000 #include "msp430f2013.h"
204 000000 #elif defined (__MSP430F2101__)
205 000000 #include "msp430f2101.h"
207 000000 #elif defined (__MSP430F2111__)
208 000000 #include "msp430f2111.h"
210 000000 #elif defined (__MSP430F2121__)
211 000000 #include "msp430f2121.h"
213 000000 #elif defined (__MSP430F2131__)
214 000000 #include "msp430f2131.h"
216 000000 #elif defined (__MSP430F2112__)
217 000000 #include "msp430f2112.h"
219 000000 #elif defined (__MSP430F2122__)
220 000000 #include "msp430f2122.h"
222 000000 #elif defined (__MSP430F2132__)
223 000000 #include "msp430f2132.h"
225 000000 #elif defined (__MSP430F2232__)
226 000000 #include "msp430f2232.h"
228 000000 #elif defined (__MSP430F2252__)
229 000000 #include "msp430f2252.h"
231 000000 #elif defined (__MSP430F2272__)
232 000000 #include "msp430f2272.h"
234 000000 #elif defined (__MSP430F2234__)
235 000000 #include "msp430f2234.h"
237 000000 #elif defined (__MSP430F2254__)
238 000000 #include "msp430f2254.h"
240 000000 #elif defined (__MSP430F2274__)
- 4e-core430G2553 - Page 4
241 000000 #include "msp430f2274.h"
243 000000 #elif defined (__MSP430F2330__)
244 000000 #include "msp430f2330.h"
246 000000 #elif defined (__MSP430F2350__)
247 000000 #include "msp430f2350.h"
249 000000 #elif defined (__MSP430F2370__)
250 000000 #include "msp430f2370.h"
252 000000 #elif defined (__MSP430F233__)
253 000000 #include "msp430f233.h"
255 000000 #elif defined (__MSP430F235__)
256 000000 #include "msp430f235.h"
258 000000 #elif defined (__MSP430F247__)
259 000000 #include "msp430f247.h"
261 000000 #elif defined (__MSP430F248__)
262 000000 #include "msp430f248.h"
264 000000 #elif defined (__MSP430F249__)
265 000000 #include "msp430f249.h"
267 000000 #elif defined (__MSP430F2410__)
268 000000 #include "msp430f2410.h"
270 000000 #elif defined (__MSP430F2471__)
271 000000 #include "msp430f2471.h"
273 000000 #elif defined (__MSP430F2481__)
274 000000 #include "msp430f2481.h"
276 000000 #elif defined (__MSP430F2491__)
277 000000 #include "msp430f2491.h"
279 000000 #elif defined (__MSP430F2416__)
280 000000 #include "msp430f2416.h"
282 000000 #elif defined (__MSP430F2417__)
283 000000 #include "msp430f2417.h"
285 000000 #elif defined (__MSP430F2418__)
286 000000 #include "msp430f2418.h"
288 000000 #elif defined (__MSP430F2419__)
289 000000 #include "msp430f2419.h"
291 000000 #elif defined (__MSP430F2616__)
292 000000 #include "msp430f2616.h"
294 000000 #elif defined (__MSP430F2617__)
295 000000 #include "msp430f2617.h"
297 000000 #elif defined (__MSP430F2618__)
298 000000 #include "msp430f2618.h"
300 000000 #elif defined (__MSP430F2619__)
301 000000 #include "msp430f2619.h"
303 000000 #elif defined (__MSP430F412__)
304 000000 #include "msp430f412.h"
306 000000 #elif defined (__MSP430F413__)
307 000000 #include "msp430f413.h"
309 000000 #elif defined (__MSP430F415__)
310 000000 #include "msp430f415.h"
312 000000 #elif defined (__MSP430F417__)
313 000000 #include "msp430f417.h"
315 000000 #elif defined (__MSP430F4132__)
316 000000 #include "msp430f4132.h"
318 000000 #elif defined (__MSP430F4152__)
319 000000 #include "msp430f4152.h"
321 000000 #elif defined (__MSP430F423__)
322 000000 #include "msp430f423.h"
324 000000 #elif defined (__MSP430F425__)
325 000000 #include "msp430f425.h"
327 000000 #elif defined (__MSP430F427__)
328 000000 #include "msp430f427.h"
330 000000 #elif defined (__MSP430F423A__)
331 000000 #include "msp430f423a.h"
333 000000 #elif defined (__MSP430F425A__)
334 000000 #include "msp430f425a.h"
336 000000 #elif defined (__MSP430F427A__)
337 000000 #include "msp430f427a.h"
339 000000 #elif defined (__MSP430F435__)
340 000000 #include "msp430f435.h"
342 000000 #elif defined (__MSP430F436__)
343 000000 #include "msp430f436.h"
345 000000 #elif defined (__MSP430F437__)
346 000000 #include "msp430f437.h"
348 000000 #elif defined (__MSP430F4351__)
349 000000 #include "msp430f4351.h"
351 000000 #elif defined (__MSP430F4361__)
352 000000 #include "msp430f4361.h"
354 000000 #elif defined (__MSP430F4371__)
355 000000 #include "msp430f4371.h"
357 000000 #elif defined (__MSP430F4481__)
- 4e-core430G2553 - Page 5
358 000000 #include "msp430f4481.h"
360 000000 #elif defined (__MSP430F4491__)
361 000000 #include "msp430f4491.h"
363 000000 #elif defined (__MSP430F447__)
364 000000 #include "msp430f447.h"
366 000000 #elif defined (__MSP430F448__)
367 000000 #include "msp430f448.h"
369 000000 #elif defined (__MSP430F449__)
370 000000 #include "msp430f449.h"
372 000000 #elif defined (__MSP430FE423__)
373 000000 #include "msp430fe423.h"
375 000000 #elif defined (__MSP430FE425__)
376 000000 #include "msp430fe425.h"
378 000000 #elif defined (__MSP430FE427__)
379 000000 #include "msp430fe427.h"
381 000000 #elif defined (__MSP430FE423A__)
382 000000 #include "msp430fe423a.h"
384 000000 #elif defined (__MSP430FE425A__)
385 000000 #include "msp430fe425a.h"
387 000000 #elif defined (__MSP430FE427A__)
388 000000 #include "msp430fe427a.h"
390 000000 #elif defined (__MSP430FE4232__)
391 000000 #include "msp430fe4232.h"
393 000000 #elif defined (__MSP430FE4242__)
394 000000 #include "msp430fe4242.h"
396 000000 #elif defined (__MSP430FE4252__)
397 000000 #include "msp430fe4252.h"
399 000000 #elif defined (__MSP430FE4272__)
400 000000 #include "msp430fe4272.h"
402 000000 #elif defined (__MSP430F4783__)
403 000000 #include "msp430f4783.h"
405 000000 #elif defined (__MSP430F4793__)
406 000000 #include "msp430f4793.h"
408 000000 #elif defined (__MSP430F4784__)
409 000000 #include "msp430f4784.h"
411 000000 #elif defined (__MSP430F4794__)
412 000000 #include "msp430f4794.h"
414 000000 #elif defined (__MSP430F47126__)
415 000000 #include "msp430f47126.h"
417 000000 #elif defined (__MSP430F47127__)
418 000000 #include "msp430f47127.h"
420 000000 #elif defined (__MSP430F47163__)
421 000000 #include "msp430f47163.h"
423 000000 #elif defined (__MSP430F47173__)
424 000000 #include "msp430f47173.h"
426 000000 #elif defined (__MSP430F47183__)
427 000000 #include "msp430f47183.h"
429 000000 #elif defined (__MSP430F47193__)
430 000000 #include "msp430f47193.h"
432 000000 #elif defined (__MSP430F47166__)
433 000000 #include "msp430f47166.h"
435 000000 #elif defined (__MSP430F47176__)
436 000000 #include "msp430f47176.h"
438 000000 #elif defined (__MSP430F47186__)
439 000000 #include "msp430f47186.h"
441 000000 #elif defined (__MSP430F47196__)
442 000000 #include "msp430f47196.h"
444 000000 #elif defined (__MSP430F47167__)
445 000000 #include "msp430f47167.h"
447 000000 #elif defined (__MSP430F47177__)
448 000000 #include "msp430f47177.h"
450 000000 #elif defined (__MSP430F47187__)
451 000000 #include "msp430f47187.h"
453 000000 #elif defined (__MSP430F47197__)
454 000000 #include "msp430f47197.h"
456 000000 #elif defined (__MSP430F4250__)
457 000000 #include "msp430f4250.h"
459 000000 #elif defined (__MSP430F4260__)
460 000000 #include "msp430f4260.h"
462 000000 #elif defined (__MSP430F4270__)
463 000000 #include "msp430f4270.h"
465 000000 #elif defined (__MSP430FG4250__)
466 000000 #include "msp430fg4250.h"
468 000000 #elif defined (__MSP430FG4260__)
469 000000 #include "msp430fg4260.h"
471 000000 #elif defined (__MSP430FG4270__)
472 000000 #include "msp430fg4270.h"
474 000000 #elif defined (__MSP430FW423__)
- 4e-core430G2553 - Page 6
475 000000 #include "msp430fw423.h"
477 000000 #elif defined (__MSP430FW425__)
478 000000 #include "msp430fw425.h"
480 000000 #elif defined (__MSP430FW427__)
481 000000 #include "msp430fw427.h"
483 000000 #elif defined (__MSP430FW428__)
484 000000 #include "msp430fw428.h"
486 000000 #elif defined (__MSP430FW429__)
487 000000 #include "msp430fw429.h"
489 000000 #elif defined (__MSP430FG437__)
490 000000 #include "msp430fg437.h"
492 000000 #elif defined (__MSP430FG438__)
493 000000 #include "msp430fg438.h"
495 000000 #elif defined (__MSP430FG439__)
496 000000 #include "msp430fg439.h"
498 000000 #elif defined (__MSP430F438__)
499 000000 #include "msp430f438.h"
501 000000 #elif defined (__MSP430F439__)
502 000000 #include "msp430f439.h"
504 000000 #elif defined (__MSP430F477__)
505 000000 #include "msp430f477.h"
507 000000 #elif defined (__MSP430F478__)
508 000000 #include "msp430f478.h"
510 000000 #elif defined (__MSP430F479__)
511 000000 #include "msp430f479.h"
513 000000 #elif defined (__MSP430FG477__)
514 000000 #include "msp430fg477.h"
516 000000 #elif defined (__MSP430FG478__)
517 000000 #include "msp430fg478.h"
519 000000 #elif defined (__MSP430FG479__)
520 000000 #include "msp430fg479.h"
522 000000 #elif defined (__MSP430F46161__)
523 000000 #include "msp430f46161.h"
525 000000 #elif defined (__MSP430F46171__)
526 000000 #include "msp430f46171.h"
528 000000 #elif defined (__MSP430F46181__)
529 000000 #include "msp430f46181.h"
531 000000 #elif defined (__MSP430F46191__)
532 000000 #include "msp430f46191.h"
534 000000 #elif defined (__MSP430F4616__)
535 000000 #include "msp430f4616.h"
537 000000 #elif defined (__MSP430F4617__)
538 000000 #include "msp430f4617.h"
540 000000 #elif defined (__MSP430F4618__)
541 000000 #include "msp430f4618.h"
543 000000 #elif defined (__MSP430F4619__)
544 000000 #include "msp430f4619.h"
546 000000 #elif defined (__MSP430FG4616__)
547 000000 #include "msp430fg4616.h"
549 000000 #elif defined (__MSP430FG4617__)
550 000000 #include "msp430fg4617.h"
552 000000 #elif defined (__MSP430FG4618__)
553 000000 #include "msp430fg4618.h"
555 000000 #elif defined (__MSP430FG4619__)
556 000000 #include "msp430fg4619.h"
558 000000 #elif defined (__MSP430F5418__)
559 000000 #include "msp430f5418.h"
561 000000 #elif defined (__MSP430F5419__)
562 000000 #include "msp430f5419.h"
564 000000 #elif defined (__MSP430F5435__)
565 000000 #include "msp430f5435.h"
567 000000 #elif defined (__MSP430F5436__)
568 000000 #include "msp430f5436.h"
570 000000 #elif defined (__MSP430F5437__)
571 000000 #include "msp430f5437.h"
573 000000 #elif defined (__MSP430F5438__)
574 000000 #include "msp430f5438.h"
576 000000 #elif defined (__XMS430F5438__)
577 000000 #include "xms430f5438.h"
579 000000 #elif defined (__MSP430F5418A__)
580 000000 #include "msp430f5418a.h"
582 000000 #elif defined (__MSP430F5419A__)
583 000000 #include "msp430f5419a.h"
585 000000 #elif defined (__MSP430F5435A__)
586 000000 #include "msp430f5435a.h"
588 000000 #elif defined (__MSP430F5436A__)
589 000000 #include "msp430f5436a.h"
591 000000 #elif defined (__MSP430F5437A__)
- 4e-core430G2553 - Page 7
592 000000 #include "msp430f5437a.h"
594 000000 #elif defined (__MSP430F5438A__)
595 000000 #include "msp430f5438a.h"
597 000000 #elif defined (__MSP430F5304__)
598 000000 #include "msp430f5304.h"
600 000000 #elif defined (__MSP430F5308__)
601 000000 #include "msp430f5308.h"
603 000000 #elif defined (__MSP430F5309__)
604 000000 #include "msp430f5309.h"
606 000000 #elif defined (__MSP430F5310__)
607 000000 #include "msp430f5310.h"
609 000000 #elif defined (__MSP430F5340__)
610 000000 #include "msp430f5340.h"
612 000000 #elif defined (__MSP430F5341__)
613 000000 #include "msp430f5341.h"
615 000000 #elif defined (__MSP430F5342__)
616 000000 #include "msp430f5342.h"
618 000000 #elif defined (__MSP430F5324__)
619 000000 #include "msp430f5324.h"
621 000000 #elif defined (__MSP430F5325__)
622 000000 #include "msp430f5325.h"
624 000000 #elif defined (__MSP430F5326__)
625 000000 #include "msp430f5326.h"
627 000000 #elif defined (__MSP430F5327__)
628 000000 #include "msp430f5327.h"
630 000000 #elif defined (__MSP430F5328__)
631 000000 #include "msp430f5328.h"
633 000000 #elif defined (__MSP430F5329__)
634 000000 #include "msp430f5329.h"
636 000000 #elif defined (__MSP430F5500__)
637 000000 #include "msp430f5500.h"
639 000000 #elif defined (__MSP430F5501__)
640 000000 #include "msp430f5501.h"
642 000000 #elif defined (__MSP430F5502__)
643 000000 #include "msp430f5502.h"
645 000000 #elif defined (__MSP430F5503__)
646 000000 #include "msp430f5503.h"
648 000000 #elif defined (__MSP430F5504__)
649 000000 #include "msp430f5504.h"
651 000000 #elif defined (__MSP430F5505__)
652 000000 #include "msp430f5505.h"
654 000000 #elif defined (__MSP430F5506__)
655 000000 #include "msp430f5506.h"
657 000000 #elif defined (__MSP430F5507__)
658 000000 #include "msp430f5507.h"
660 000000 #elif defined (__MSP430F5508__)
661 000000 #include "msp430f5508.h"
663 000000 #elif defined (__MSP430F5509__)
664 000000 #include "msp430f5509.h"
666 000000 #elif defined (__MSP430F5510__)
667 000000 #include "msp430f5510.h"
669 000000 #elif defined (__MSP430F5513__)
670 000000 #include "msp430f5513.h"
672 000000 #elif defined (__MSP430F5514__)
673 000000 #include "msp430f5514.h"
675 000000 #elif defined (__MSP430F5515__)
676 000000 #include "msp430f5515.h"
678 000000 #elif defined (__MSP430F5517__)
679 000000 #include "msp430f5517.h"
681 000000 #elif defined (__MSP430F5519__)
682 000000 #include "msp430f5519.h"
684 000000 #elif defined (__MSP430F5521__)
685 000000 #include "msp430f5521.h"
687 000000 #elif defined (__MSP430F5522__)
688 000000 #include "msp430f5522.h"
690 000000 #elif defined (__MSP430F5524__)
691 000000 #include "msp430f5524.h"
693 000000 #elif defined (__MSP430F5525__)
694 000000 #include "msp430f5525.h"
696 000000 #elif defined (__MSP430F5526__)
697 000000 #include "msp430f5526.h"
699 000000 #elif defined (__MSP430F5527__)
700 000000 #include "msp430f5527.h"
702 000000 #elif defined (__MSP430F5528__)
703 000000 #include "msp430f5528.h"
705 000000 #elif defined (__MSP430F5529__)
706 000000 #include "msp430f5529.h"
708 000000 #elif defined (__MSP430P112__)
- 4e-core430G2553 - Page 8
709 000000 #include "msp430p112.h"
711 000000 #elif defined (__MSP430P313__)
712 000000 #include "msp430p313.h"
714 000000 #elif defined (__MSP430P315__)
715 000000 #include "msp430p315.h"
717 000000 #elif defined (__MSP430P315S__)
718 000000 #include "msp430p315s.h"
720 000000 #elif defined (__MSP430P325__)
721 000000 #include "msp430p325.h"
723 000000 #elif defined (__MSP430P337__)
724 000000 #include "msp430p337.h"
726 000000 #elif defined (__CC430F5133__)
727 000000 #include "cc430f5133.h"
729 000000 #elif defined (__CC430F5135__)
730 000000 #include "cc430f5135.h"
732 000000 #elif defined (__CC430F5137__)
733 000000 #include "cc430f5137.h"
735 000000 #elif defined (__CC430F6125__)
736 000000 #include "cc430f6125.h"
738 000000 #elif defined (__CC430F6126__)
739 000000 #include "cc430f6126.h"
741 000000 #elif defined (__CC430F6127__)
742 000000 #include "cc430f6127.h"
744 000000 #elif defined (__CC430F6135__)
745 000000 #include "cc430f6135.h"
747 000000 #elif defined (__CC430F6137__)
748 000000 #include "cc430f6137.h"
750 000000 #elif defined (__MSP430F5630__)
751 000000 #include "msp430f5630.h"
753 000000 #elif defined (__MSP430F5631__)
754 000000 #include "msp430f5631.h"
756 000000 #elif defined (__MSP430F5632__)
757 000000 #include "msp430f5632.h"
759 000000 #elif defined (__MSP430F5633__)
760 000000 #include "msp430f5633.h"
762 000000 #elif defined (__MSP430F5634__)
763 000000 #include "msp430f5634.h"
765 000000 #elif defined (__MSP430F5635__)
766 000000 #include "msp430f5635.h"
768 000000 #elif defined (__MSP430F5636__)
769 000000 #include "msp430f5636.h"
771 000000 #elif defined (__MSP430F5637__)
772 000000 #include "msp430f5637.h"
774 000000 #elif defined (__MSP430F5638__)
775 000000 #include "msp430f5638.h"
777 000000 #elif defined (__MSP430F6630__)
778 000000 #include "msp430f6630.h"
780 000000 #elif defined (__MSP430F6631__)
781 000000 #include "msp430f6631.h"
783 000000 #elif defined (__MSP430F6632__)
784 000000 #include "msp430f6632.h"
786 000000 #elif defined (__MSP430F6633__)
787 000000 #include "msp430f6633.h"
789 000000 #elif defined (__MSP430F6634__)
790 000000 #include "msp430f6634.h"
792 000000 #elif defined (__MSP430F6635__)
793 000000 #include "msp430f6635.h"
795 000000 #elif defined (__MSP430F6636__)
796 000000 #include "msp430f6636.h"
798 000000 #elif defined (__MSP430F6637__)
799 000000 #include "msp430f6637.h"
801 000000 #elif defined (__MSP430F6638__)
802 000000 #include "msp430f6638.h"
804 000000 #elif defined (__MSP430L092__)
805 000000 #include "msp430l092.h"
807 000000 #elif defined (__MSP430C091__)
808 000000 #include "msp430c091.h"
810 000000 #elif defined (__MSP430C092__)
811 000000 #include "msp430c092.h"
813 000000 #elif defined (__MSP430F5131__)
814 000000 #include "msp430f5131.h"
816 000000 #elif defined (__MSP430F5151__)
817 000000 #include "msp430f5151.h"
819 000000 #elif defined (__MSP430F5171__)
820 000000 #include "msp430f5171.h"
822 000000 #elif defined (__MSP430F5132__)
823 000000 #include "msp430f5132.h"
825 000000 #elif defined (__MSP430F5152__)
- 4e-core430G2553 - Page 9
826 000000 #include "msp430f5152.h"
828 000000 #elif defined (__MSP430F5172__)
829 000000 #include "msp430f5172.h"
831 000000 #elif defined (__MSP430FR5720__)
832 000000 #include "msp430fr5720.h"
834 000000 #elif defined (__MSP430FR5725__)
835 000000 #include "msp430fr5725.h"
837 000000 #elif defined (__MSP430FR5728__)
838 000000 #include "msp430fr5728.h"
840 000000 #elif defined (__MSP430FR5729__)
841 000000 #include "msp430fr5729.h"
843 000000 #elif defined (__MSP430FR5730__)
844 000000 #include "msp430fr5730.h"
846 000000 #elif defined (__MSP430FR5735__)
847 000000 #include "msp430fr5735.h"
849 000000 #elif defined (__MSP430FR5738__)
850 000000 #include "msp430fr5738.h"
852 000000 #elif defined (__MSP430FR5739__)
853 000000 #include "msp430fr5739.h"
855 000000 #elif defined (__MSP430G2211__)
856 000000 #include "msp430g2211.h"
858 000000 #elif defined (__MSP430G2201__)
859 000000 #include "msp430g2201.h"
861 000000 #elif defined (__MSP430G2111__)
862 000000 #include "msp430g2111.h"
864 000000 #elif defined (__MSP430G2101__)
865 000000 #include "msp430g2101.h"
867 000000 #elif defined (__MSP430G2001__)
868 000000 #include "msp430g2001.h"
870 000000 #elif defined (__MSP430G2231__)
871 000000 #include "msp430g2231.h"
873 000000 #elif defined (__MSP430G2221__)
874 000000 #include "msp430g2221.h"
876 000000 #elif defined (__MSP430G2131__)
877 000000 #include "msp430g2131.h"
879 000000 #elif defined (__MSP430G2121__)
880 000000 #include "msp430g2121.h"
882 000000 #elif defined (__MSP430AFE221__)
883 000000 #include "msp430afe221.h"
885 000000 #elif defined (__MSP430AFE231__)
886 000000 #include "msp430afe231.h"
888 000000 #elif defined (__MSP430AFE251__)
889 000000 #include "msp430afe251.h"
891 000000 #elif defined (__MSP430AFE222__)
892 000000 #include "msp430afe222.h"
894 000000 #elif defined (__MSP430AFE232__)
895 000000 #include "msp430afe232.h"
897 000000 #elif defined (__MSP430AFE252__)
898 000000 #include "msp430afe252.h"
900 000000 #elif defined (__MSP430AFE223__)
901 000000 #include "msp430afe223.h"
903 000000 #elif defined (__MSP430AFE233__)
904 000000 #include "msp430afe233.h"
906 000000 #elif defined (__MSP430AFE253__)
907 000000 #include "msp430afe253.h"
909 000000 #elif defined (__MSP430G2102__)
910 000000 #include "msp430g2102.h"
912 000000 #elif defined (__MSP430G2202__)
913 000000 #include "msp430g2202.h"
915 000000 #elif defined (__MSP430G2302__)
916 000000 #include "msp430g2302.h"
918 000000 #elif defined (__MSP430G2402__)
919 000000 #include "msp430g2402.h"
921 000000 #elif defined (__MSP430G2132__)
922 000000 #include "msp430g2132.h"
924 000000 #elif defined (__MSP430G2232__)
925 000000 #include "msp430g2232.h"
927 000000 #elif defined (__MSP430G2332__)
928 000000 #include "msp430g2332.h"
930 000000 #elif defined (__MSP430G2432__)
931 000000 #include "msp430g2432.h"
933 000000 #elif defined (__MSP430G2112__)
934 000000 #include "msp430g2112.h"
936 000000 #elif defined (__MSP430G2212__)
937 000000 #include "msp430g2212.h"
939 000000 #elif defined (__MSP430G2312__)
940 000000 #include "msp430g2312.h"
942 000000 #elif defined (__MSP430G2412__)
- 4e-core430G2553 - Page 10
943 000000 #include "msp430g2412.h"
945 000000 #elif defined (__MSP430G2152__)
946 000000 #include "msp430g2152.h"
948 000000 #elif defined (__MSP430G2252__)
949 000000 #include "msp430g2252.h"
951 000000 #elif defined (__MSP430G2352__)
952 000000 #include "msp430g2352.h"
954 000000 #elif defined (__MSP430G2452__)
955 000000 #include "msp430g2452.h"
957 000000 #elif defined (__MSP430G2113__)
958 000000 #include "msp430g2113.h"
960 000000 #elif defined (__MSP430G2213__)
961 000000 #include "msp430g2213.h"
963 000000 #elif defined (__MSP430G2313__)
964 000000 #include "msp430g2313.h"
966 000000 #elif defined (__MSP430G2413__)
967 000000 #include "msp430g2413.h"
969 000000 #elif defined (__MSP430G2513__)
970 000000 #include "msp430g2513.h"
972 000000 #elif defined (__MSP430G2153__)
973 000000 #include "msp430g2153.h"
975 000000 #elif defined (__MSP430G2253__)
976 000000 #include "msp430g2253.h"
978 000000 #elif defined (__MSP430G2353__)
979 000000 #include "msp430g2353.h"
981 000000 #elif defined (__MSP430G2453__)
982 000000 #include "msp430g2453.h"
984 000000 #elif defined (__MSP430G2553__)
985 000000 #include "msp430g2553.h"
1 000000 /***********************************************
*********************
2 000000 *
3 000000 * Standard register and bit definitions for the
Texas Instruments
4 000000 * MSP430 microcontroller.
5 000000 *
6 000000 * This file supports assembler and C development
for
7 000000 * MSP430G2553 devices.
8 000000 *
9 000000 * Texas Instruments, Version 1.0
10 000000 *
11 000000 * Rev. 1.0, Setup
12 000000 *
13 000000 ************************************************
********************/
14 000000
15 000000 #ifndef __MSP430G2553
16 000000 #define __MSP430G2553
17 000000
18 000000 #ifdef __IAR_SYSTEMS_ICC__
19 000000 #ifndef _SYSTEM_BUILD
20 000000 #pragma system_include
21 000000 #endif
22 000000 #endif
23 000000
24 000000 #if (((__TID__ >> 8) & 0x7F) != 0x2b) /*
0x2b = 43 dec */
25 000000 #error msp430g2553.h file for use with
ICC430/A430 only
26 000000 #endif
27 000000
28 000000
29 000000 #ifdef __IAR_SYSTEMS_ICC__
30 000000 #include "in430.h"
31 000000 #pragma language=extended
33 000000 #define DEFC(name, address) __no_init volatile
unsigned char name @ address;
34 000000 #define DEFW(name, address) __no_init volatile
unsigned short name @ address;
35 000000 #define DEFXC volatile unsigned char
36 000000 #define DEFXW volatile unsigned short
38 000000 #endif /* __IAR_SYSTEMS_ICC__ */
39 000000
40 000000
41 000000 #ifdef __IAR_SYSTEMS_ASM__
42 000000 #define DEFC(name, address) sfrb name =
address;
- 4e-core430G2553 - Page 11
43 000000 #define DEFW(name, address) sfrw name =
address;
44 000000
45 000000 #endif /* __IAR_SYSTEMS_ASM__*/
46 000000
47 000000 #ifdef __cplusplus
48 000000 #define READ_ONLY
49 000000 #else
50 000000 #define READ_ONLY const
51 000000 #endif
52 000000
53 000000 /***********************************************
*************
54 000000 * STANDARD BITS
55 000000 ************************************************
************/
56 000000
57 000000 #define BIT0 (0x0001u)
58 000000 #define BIT1 (0x0002u)
59 000000 #define BIT2 (0x0004u)
60 000000 #define BIT3 (0x0008u)
61 000000 #define BIT4 (0x0010u)
62 000000 #define BIT5 (0x0020u)
63 000000 #define BIT6 (0x0040u)
64 000000 #define BIT7 (0x0080u)
65 000000 #define BIT8 (0x0100u)
66 000000 #define BIT9 (0x0200u)
67 000000 #define BITA (0x0400u)
68 000000 #define BITB (0x0800u)
69 000000 #define BITC (0x1000u)
70 000000 #define BITD (0x2000u)
71 000000 #define BITE (0x4000u)
72 000000 #define BITF (0x8000u)
73 000000
74 000000 /***********************************************
*************
75 000000 * STATUS REGISTER BITS
76 000000 ************************************************
************/
77 000000
78 000000 #define C (0x0001u)
79 000000 #define Z (0x0002u)
80 000000 #define N (0x0004u)
81 000000 #define V (0x0100u)
82 000000 #define GIE (0x0008u)
83 000000 #define CPUOFF (0x0010u)
84 000000 #define OSCOFF (0x0020u)
85 000000 #define SCG0 (0x0040u)
86 000000 #define SCG1 (0x0080u)
87 000000
88 000000 /* Low Power Modes coded with Bits 4-7 in SR
*/
89 000000
90 000000 #ifndef __IAR_SYSTEMS_ICC__ /* Begin #defines
for assembler */
91 000000 #define LPM0 (CPUOFF)
92 000000 #define LPM1 (SCG0+CPUOFF)
93 000000 #define LPM2 (SCG1+CPUOFF)
94 000000 #define LPM3 (SCG1+SCG0+CPUOFF)
95 000000 #define LPM4 (SCG1+SCG0+OSCOFF+CP
UOFF)
96 000000 /* End #defines for assembler */
97 000000
98 000000 #else /* Begin #defines for C */
99 000000 #define LPM0_bits (CPUOFF)
100 000000 #define LPM1_bits (SCG0+CPUOFF)
101 000000 #define LPM2_bits (SCG1+CPUOFF)
102 000000 #define LPM3_bits (SCG1+SCG0+CPUOFF)
103 000000 #define LPM4_bits (SCG1+SCG0+OSCOFF+CP
UOFF)
105 000000 #include "in430.h"
107 000000 #define LPM0 _BIS_SR(LPM0_bits) /*
Enter Low Power Mode 0 */
108 000000 #define LPM0_EXIT _BIC_SR_IRQ(LPM0_bits) /* Exit
Low Power Mode 0 */
109 000000 #define LPM1 _BIS_SR(LPM1_bits) /*
Enter Low Power Mode 1 */
110 000000 #define LPM1_EXIT _BIC_SR_IRQ(LPM1_bits) /* Exit
- 4e-core430G2553 - Page 12
Low Power Mode 1 */
111 000000 #define LPM2 _BIS_SR(LPM2_bits) /*
Enter Low Power Mode 2 */
112 000000 #define LPM2_EXIT _BIC_SR_IRQ(LPM2_bits) /* Exit
Low Power Mode 2 */
113 000000 #define LPM3 _BIS_SR(LPM3_bits) /*
Enter Low Power Mode 3 */
114 000000 #define LPM3_EXIT _BIC_SR_IRQ(LPM3_bits) /* Exit
Low Power Mode 3 */
115 000000 #define LPM4 _BIS_SR(LPM4_bits) /*
Enter Low Power Mode 4 */
116 000000 #define LPM4_EXIT _BIC_SR_IRQ(LPM4_bits) /* Exit
Low Power Mode 4 */
117 000000 #endif /* End #defines for C */
118 000000
119 000000 /***********************************************
*************
120 000000 * PERIPHERAL FILE MAP
121 000000 ************************************************
************/
122 000000
123 000000 /***********************************************
*************
124 000000 * SPECIAL FUNCTION REGISTER ADDRESSES + CONTROL
BITS
125 000000 ************************************************
************/
126 000000
127 000000 #define IE1_ (0x0000u) /*
Interrupt Enable 1 */
128 000000 DEFC( IE1 , IE1_)
129 000000 #define WDTIE (0x01) /*
Watchdog Interrupt Enable */
130 000000 #define OFIE (0x02) /* Osc.
Fault Interrupt Enable */
131 000000 #define NMIIE (0x10) /* NMI
Interrupt Enable */
132 000000 #define ACCVIE (0x20) /* Flash
Access Violation Interrupt Enable */
133 000000
134 000000 #define IFG1_ (0x0002u) /*
Interrupt Flag 1 */
135 000000 DEFC( IFG1 , IFG1_)
136 000000 #define WDTIFG (0x01) /*
Watchdog Interrupt Flag */
137 000000 #define OFIFG (0x02) /* Osc.
Fault Interrupt Flag */
138 000000 #define PORIFG (0x04) /* Power
On Interrupt Flag */
139 000000 #define RSTIFG (0x08) /* Reset
Interrupt Flag */
140 000000 #define NMIIFG (0x10) /* NMI
Interrupt Flag */
141 000000
142 000000 #define IE2_ (0x0001u) /*
Interrupt Enable 2 */
143 000000 DEFC( IE2 , IE2_)
144 000000 #define UC0IE IE2
145 000000 #define UCA0RXIE (0x01)
146 000000 #define UCA0TXIE (0x02)
147 000000 #define UCB0RXIE (0x04)
148 000000 #define UCB0TXIE (0x08)
149 000000
150 000000 #define IFG2_ (0x0003u) /*
Interrupt Flag 2 */
151 000000 DEFC( IFG2 , IFG2_)
152 000000 #define UC0IFG IFG2
153 000000 #define UCA0RXIFG (0x01)
154 000000 #define UCA0TXIFG (0x02)
155 000000 #define UCB0RXIFG (0x04)
156 000000 #define UCB0TXIFG (0x08)
157 000000
158 000000 /***********************************************
*************
159 000000 * ADC10
160 000000 ************************************************
************/
161 000000 #define __MSP430_HAS_ADC10__ /*
- 4e-core430G2553 - Page 13
Definition to show that Module is available
*/
162 000000
163 000000 #define ADC10DTC0_ (0x0048u) /*
ADC10 Data Transfer Control 0 */
164 000000 DEFC( ADC10DTC0 , ADC10DTC0_)
165 000000 #define ADC10DTC1_ (0x0049u) /*
ADC10 Data Transfer Control 1 */
166 000000 DEFC( ADC10DTC1 , ADC10DTC1_)
167 000000 #define ADC10AE0_ (0x004Au) /*
ADC10 Analog Enable 0 */
168 000000 DEFC( ADC10AE0 , ADC10AE0_)
169 000000
170 000000 #define ADC10CTL0_ (0x01B0u) /*
ADC10 Control 0 */
171 000000 DEFW( ADC10CTL0 , ADC10CTL0_)
172 000000 #define ADC10CTL1_ (0x01B2u) /*
ADC10 Control 1 */
173 000000 DEFW( ADC10CTL1 , ADC10CTL1_)
174 000000 #define ADC10MEM_ (0x01B4u) /*
ADC10 Memory */
175 000000 DEFW( ADC10MEM , ADC10MEM_)
176 000000 #define ADC10SA_ (0x01BCu) /*
ADC10 Data Transfer Start Address */
177 000000 DEFW( ADC10SA , ADC10SA_)
178 000000
179 000000 /* ADC10CTL0 */
180 000000 #define ADC10SC (0x001) /* ADC10
Start Conversion */
181 000000 #define ENC (0x002) /* ADC10
Enable Conversion */
182 000000 #define ADC10IFG (0x004) /* ADC10
Interrupt Flag */
183 000000 #define ADC10IE (0x008) /* ADC10
Interrupt Enalbe */
184 000000 #define ADC10ON (0x010) /* ADC10
On/Enable */
185 000000 #define REFON (0x020) /* ADC10
Reference on */
186 000000 #define REF2_5V (0x040) /* ADC10
Ref 0:1.5V / 1:2.5V */
187 000000 #define MSC (0x080) /* ADC10
Multiple SampleConversion */
188 000000 #define REFBURST (0x100) /* ADC10
Reference Burst Mode */
189 000000 #define REFOUT (0x200) /* ADC10
Enalbe output of Ref. */
190 000000 #define ADC10SR (0x400) /* ADC10
Sampling Rate 0:200ksps / 1:50ksps */
191 000000 #define ADC10SHT0 (0x800) /* ADC10
Sample Hold Select Bit: 0 */
192 000000 #define ADC10SHT1 (0x1000u) /*
ADC10 Sample Hold Select Bit: 1 */
193 000000 #define SREF0 (0x2000u) /*
ADC10 Reference Select Bit: 0 */
194 000000 #define SREF1 (0x4000u) /*
ADC10 Reference Select Bit: 1 */
195 000000 #define SREF2 (0x8000u) /*
ADC10 Reference Select Bit: 2 */
196 000000 #define ADC10SHT_0 (0*0x800u) /* 4 x
ADC10CLKs */
197 000000 #define ADC10SHT_1 (1*0x800u) /* 8 x
ADC10CLKs */
198 000000 #define ADC10SHT_2 (2*0x800u) /* 16 x
ADC10CLKs */
199 000000 #define ADC10SHT_3 (3*0x800u) /* 64 x
ADC10CLKs */
200 000000
201 000000 #define SREF_0 (0*0x2000u) /* VR+
= AVCC and VR- = AVSS */
202 000000 #define SREF_1 (1*0x2000u) /* VR+
= VREF+ and VR- = AVSS */
203 000000 #define SREF_2 (2*0x2000u) /* VR+
= VEREF+ and VR- = AVSS */
204 000000 #define SREF_3 (3*0x2000u) /* VR+
= VEREF+ and VR- = AVSS */
205 000000 #define SREF_4 (4*0x2000u) /* VR+
= AVCC and VR- = VREF-/VEREF- */
- 4e-core430G2553 - Page 14
206 000000 #define SREF_5 (5*0x2000u) /* VR+
= VREF+ and VR- = VREF-/VEREF- */
207 000000 #define SREF_6 (6*0x2000u) /* VR+
= VEREF+ and VR- = VREF-/VEREF- */
208 000000 #define SREF_7 (7*0x2000u) /* VR+
= VEREF+ and VR- = VREF-/VEREF- */
209 000000
210 000000 /* ADC10CTL1 */
211 000000 #define ADC10BUSY (0x0001u) /*
ADC10 BUSY */
212 000000 #define CONSEQ0 (0x0002u) /*
ADC10 Conversion Sequence Select 0 */
213 000000 #define CONSEQ1 (0x0004u) /*
ADC10 Conversion Sequence Select 1 */
214 000000 #define ADC10SSEL0 (0x0008u) /*
ADC10 Clock Source Select Bit: 0 */
215 000000 #define ADC10SSEL1 (0x0010u) /*
ADC10 Clock Source Select Bit: 1 */
216 000000 #define ADC10DIV0 (0x0020u) /*
ADC10 Clock Divider Select Bit: 0 */
217 000000 #define ADC10DIV1 (0x0040u) /*
ADC10 Clock Divider Select Bit: 1 */
218 000000 #define ADC10DIV2 (0x0080u) /*
ADC10 Clock Divider Select Bit: 2 */
219 000000 #define ISSH (0x0100u) /*
ADC10 Invert Sample Hold Signal */
220 000000 #define ADC10DF (0x0200u) /*
ADC10 Data Format 0:binary 1:2's complement
*/
221 000000 #define SHS0 (0x0400u) /*
ADC10 Sample/Hold Source Bit: 0 */
222 000000 #define SHS1 (0x0800u) /*
ADC10 Sample/Hold Source Bit: 1 */
223 000000 #define INCH0 (0x1000u) /*
ADC10 Input Channel Select Bit: 0 */
224 000000 #define INCH1 (0x2000u) /*
ADC10 Input Channel Select Bit: 1 */
225 000000 #define INCH2 (0x4000u) /*
ADC10 Input Channel Select Bit: 2 */
226 000000 #define INCH3 (0x8000u) /*
ADC10 Input Channel Select Bit: 3 */
227 000000
228 000000 #define CONSEQ_0 (0*2u) /*
Single channel single conversion */
229 000000 #define CONSEQ_1 (1*2u) /*
Sequence of channels */
230 000000 #define CONSEQ_2 (2*2u) /*
Repeat single channel */
231 000000 #define CONSEQ_3 (3*2u) /*
Repeat sequence of channels */
232 000000
233 000000 #define ADC10SSEL_0 (0*8u) /*
ADC10OSC */
234 000000 #define ADC10SSEL_1 (1*8u) /* ACLK
*/
235 000000 #define ADC10SSEL_2 (2*8u) /* MCLK
*/
236 000000 #define ADC10SSEL_3 (3*8u) /*
SMCLK */
237 000000
238 000000 #define ADC10DIV_0 (0*0x20u) /*
ADC10 Clock Divider Select 0 */
239 000000 #define ADC10DIV_1 (1*0x20u) /*
ADC10 Clock Divider Select 1 */
240 000000 #define ADC10DIV_2 (2*0x20u) /*
ADC10 Clock Divider Select 2 */
241 000000 #define ADC10DIV_3 (3*0x20u) /*
ADC10 Clock Divider Select 3 */
242 000000 #define ADC10DIV_4 (4*0x20u) /*
ADC10 Clock Divider Select 4 */
243 000000 #define ADC10DIV_5 (5*0x20u) /*
ADC10 Clock Divider Select 5 */
244 000000 #define ADC10DIV_6 (6*0x20u) /*
ADC10 Clock Divider Select 6 */
245 000000 #define ADC10DIV_7 (7*0x20u) /*
ADC10 Clock Divider Select 7 */
246 000000
247 000000 #define SHS_0 (0*0x400u) /*
- 4e-core430G2553 - Page 15
ADC10SC */
248 000000 #define SHS_1 (1*0x400u) /* TA3
OUT1 */
249 000000 #define SHS_2 (2*0x400u) /* TA3
OUT0 */
250 000000 #define SHS_3 (3*0x400u) /* TA3
OUT2 */
251 000000
252 000000 #define INCH_0 (0*0x1000u) /*
Selects Channel 0 */
253 000000 #define INCH_1 (1*0x1000u) /*
Selects Channel 1 */
254 000000 #define INCH_2 (2*0x1000u) /*
Selects Channel 2 */
255 000000 #define INCH_3 (3*0x1000u) /*
Selects Channel 3 */
256 000000 #define INCH_4 (4*0x1000u) /*
Selects Channel 4 */
257 000000 #define INCH_5 (5*0x1000u) /*
Selects Channel 5 */
258 000000 #define INCH_6 (6*0x1000u) /*
Selects Channel 6 */
259 000000 #define INCH_7 (7*0x1000u) /*
Selects Channel 7 */
260 000000 #define INCH_8 (8*0x1000u) /*
Selects Channel 8 */
261 000000 #define INCH_9 (9*0x1000u) /*
Selects Channel 9 */
262 000000 #define INCH_10 (10*0x1000u) /*
Selects Channel 10 */
263 000000 #define INCH_11 (11*0x1000u) /*
Selects Channel 11 */
264 000000 #define INCH_12 (12*0x1000u) /*
Selects Channel 12 */
265 000000 #define INCH_13 (13*0x1000u) /*
Selects Channel 13 */
266 000000 #define INCH_14 (14*0x1000u) /*
Selects Channel 14 */
267 000000 #define INCH_15 (15*0x1000u) /*
Selects Channel 15 */
268 000000
269 000000 /* ADC10DTC0 */
270 000000 #define ADC10FETCH (0x001) /* This
bit should normally be reset */
271 000000 #define ADC10B1 (0x002) /* ADC10
block one */
272 000000 #define ADC10CT (0x004) /* ADC10
continuous transfer */
273 000000 #define ADC10TB (0x008) /* ADC10
two-block mode */
274 000000 #define ADC10DISABLE (0x000) /*
ADC10DTC1 */
275 000000
276 000000 /***********************************************
*************
277 000000 * Basic Clock Module
278 000000 ************************************************
************/
279 000000 #define __MSP430_HAS_BC2__ /*
Definition to show that Module is available
*/
280 000000
281 000000 #define DCOCTL_ (0x0056u) /* DCO
Clock Frequency Control */
282 000000 DEFC( DCOCTL , DCOCTL_)
283 000000 #define BCSCTL1_ (0x0057u) /* Basic
Clock System Control 1 */
284 000000 DEFC( BCSCTL1 , BCSCTL1_)
285 000000 #define BCSCTL2_ (0x0058u) /* Basic
Clock System Control 2 */
286 000000 DEFC( BCSCTL2 , BCSCTL2_)
287 000000 #define BCSCTL3_ (0x0053u) /* Basic
Clock System Control 3 */
288 000000 DEFC( BCSCTL3 , BCSCTL3_)
289 000000
290 000000 #define MOD0 (0x01) /*
Modulation Bit 0 */
291 000000 #define MOD1 (0x02) /*
- 4e-core430G2553 - Page 16
Modulation Bit 1 */
292 000000 #define MOD2 (0x04) /*
Modulation Bit 2 */
293 000000 #define MOD3 (0x08) /*
Modulation Bit 3 */
294 000000 #define MOD4 (0x10) /*
Modulation Bit 4 */
295 000000 #define DCO0 (0x20) /* DCO
Select Bit 0 */
296 000000 #define DCO1 (0x40) /* DCO
Select Bit 1 */
297 000000 #define DCO2 (0x80) /* DCO
Select Bit 2 */
298 000000
299 000000 #define RSEL0 (0x01) /* Range
Select Bit 0 */
300 000000 #define RSEL1 (0x02) /* Range
Select Bit 1 */
301 000000 #define RSEL2 (0x04) /* Range
Select Bit 2 */
302 000000 #define RSEL3 (0x08) /* Range
Select Bit 3 */
303 000000 #define DIVA0 (0x10) /* ACLK
Divider 0 */
304 000000 #define DIVA1 (0x20) /* ACLK
Divider 1 */
305 000000 #define XTS (0x40) /* LFXTCLK
0:Low Freq. / 1: High Freq. */
306 000000 #define XT2OFF (0x80) /* Enable
XT2CLK */
307 000000
308 000000 #define DIVA_0 (0x00) /* ACLK
Divider 0: /1 */
309 000000 #define DIVA_1 (0x10) /* ACLK
Divider 1: /2 */
310 000000 #define DIVA_2 (0x20) /* ACLK
Divider 2: /4 */
311 000000 #define DIVA_3 (0x30) /* ACLK
Divider 3: /8 */
312 000000
313 000000 #define DIVS0 (0x02) /* SMCLK
Divider 0 */
314 000000 #define DIVS1 (0x04) /* SMCLK
Divider 1 */
315 000000 #define SELS (0x08) /* SMCLK
Source Select 0:DCOCLK / 1:XT2CLK/LFXTCLK
*/
316 000000 #define DIVM0 (0x10) /* MCLK
Divider 0 */
317 000000 #define DIVM1 (0x20) /* MCLK
Divider 1 */
318 000000 #define SELM0 (0x40) /* MCLK
Source Select 0 */
319 000000 #define SELM1 (0x80) /* MCLK
Source Select 1 */
320 000000
321 000000 #define DIVS_0 (0x00) /* SMCLK
Divider 0: /1 */
322 000000 #define DIVS_1 (0x02) /* SMCLK
Divider 1: /2 */
323 000000 #define DIVS_2 (0x04) /* SMCLK
Divider 2: /4 */
324 000000 #define DIVS_3 (0x06) /* SMCLK
Divider 3: /8 */
325 000000
326 000000 #define DIVM_0 (0x00) /* MCLK
Divider 0: /1 */
327 000000 #define DIVM_1 (0x10) /* MCLK
Divider 1: /2 */
328 000000 #define DIVM_2 (0x20) /* MCLK
Divider 2: /4 */
329 000000 #define DIVM_3 (0x30) /* MCLK
Divider 3: /8 */
330 000000
331 000000 #define SELM_0 (0x00) /* MCLK
Source Select 0: DCOCLK */
332 000000 #define SELM_1 (0x40) /* MCLK
Source Select 1: DCOCLK */
- 4e-core430G2553 - Page 17
333 000000 #define SELM_2 (0x80) /* MCLK
Source Select 2: XT2CLK/LFXTCLK */
334 000000 #define SELM_3 (0xC0) /* MCLK
Source Select 3: LFXTCLK */
335 000000
336 000000 #define LFXT1OF (0x01) /* Low/high
Frequency Oscillator Fault Flag */
337 000000 #define XT2OF (0x02) /* High
frequency oscillator 2 fault flag */
338 000000 #define XCAP0 (0x04) /* XIN/XOUT
Cap 0 */
339 000000 #define XCAP1 (0x08) /* XIN/XOUT
Cap 1 */
340 000000 #define LFXT1S0 (0x10) /* Mode 0
for LFXT1 (XTS = 0) */
341 000000 #define LFXT1S1 (0x20) /* Mode 1
for LFXT1 (XTS = 0) */
342 000000 #define XT2S0 (0x40) /* Mode 0
for XT2 */
343 000000 #define XT2S1 (0x80) /* Mode 1
for XT2 */
344 000000
345 000000 #define XCAP_0 (0x00) /* XIN/XOUT
Cap : 0 pF */
346 000000 #define XCAP_1 (0x04) /* XIN/XOUT
Cap : 6 pF */
347 000000 #define XCAP_2 (0x08) /* XIN/XOUT
Cap : 10 pF */
348 000000 #define XCAP_3 (0x0C) /* XIN/XOUT
Cap : 12.5 pF */
349 000000
350 000000 #define LFXT1S_0 (0x00) /* Mode 0
for LFXT1 : Normal operation */
351 000000 #define LFXT1S_1 (0x10) /* Mode 1
for LFXT1 : Reserved */
352 000000 #define LFXT1S_2 (0x20) /* Mode 2
for LFXT1 : VLO */
353 000000 #define LFXT1S_3 (0x30) /* Mode 3
for LFXT1 : Digital input signal */
354 000000
355 000000 #define XT2S_0 (0x00) /* Mode 0
for XT2 : 0.4 - 1 MHz */
356 000000 #define XT2S_1 (0x40) /* Mode 1
for XT2 : 1 - 4 MHz */
357 000000 #define XT2S_2 (0x80) /* Mode 2
for XT2 : 2 - 16 MHz */
358 000000 #define XT2S_3 (0xC0) /* Mode 3
for XT2 : Digital input signal */
359 000000
360 000000 /***********************************************
*************
361 000000 * Comparator A
362 000000 ************************************************
************/
363 000000 #define __MSP430_HAS_CAPLUS__ /*
Definition to show that Module is available
*/
364 000000
365 000000 #define CACTL1_ (0x0059u) /*
Comparator A Control 1 */
366 000000 DEFC( CACTL1 , CACTL1_)
367 000000 #define CACTL2_ (0x005Au) /*
Comparator A Control 2 */
368 000000 DEFC( CACTL2 , CACTL2_)
369 000000 #define CAPD_ (0x005Bu) /*
Comparator A Port Disable */
370 000000 DEFC( CAPD , CAPD_)
371 000000
372 000000 #define CAIFG (0x01) /* Comp. A
Interrupt Flag */
373 000000 #define CAIE (0x02) /* Comp. A
Interrupt Enable */
374 000000 #define CAIES (0x04) /* Comp. A
Int. Edge Select: 0:rising / 1:falling
*/
375 000000 #define CAON (0x08) /* Comp. A
enable */
376 000000 #define CAREF0 (0x10) /* Comp. A
- 4e-core430G2553 - Page 18
Internal Reference Select 0 */
377 000000 #define CAREF1 (0x20) /* Comp. A
Internal Reference Select 1 */
378 000000 #define CARSEL (0x40) /* Comp. A
Internal Reference Enable */
379 000000 #define CAEX (0x80) /* Comp. A
Exchange Inputs */
380 000000
381 000000 #define CAREF_0 (0x00) /* Comp. A
Int. Ref. Select 0 : Off */
382 000000 #define CAREF_1 (0x10) /* Comp. A
Int. Ref. Select 1 : 0.25*Vcc */
383 000000 #define CAREF_2 (0x20) /* Comp. A
Int. Ref. Select 2 : 0.5*Vcc */
384 000000 #define CAREF_3 (0x30) /* Comp. A
Int. Ref. Select 3 : Vt*/
385 000000
386 000000 #define CAOUT (0x01) /* Comp. A
Output */
387 000000 #define CAF (0x02) /* Comp. A
Enable Output Filter */
388 000000 #define P2CA0 (0x04) /* Comp. A
+Terminal Multiplexer */
389 000000 #define P2CA1 (0x08) /* Comp. A
-Terminal Multiplexer */
390 000000 #define P2CA2 (0x10) /* Comp. A
-Terminal Multiplexer */
391 000000 #define P2CA3 (0x20) /* Comp. A
-Terminal Multiplexer */
392 000000 #define P2CA4 (0x40) /* Comp. A
+Terminal Multiplexer */
393 000000 #define CASHORT (0x80) /* Comp. A
Short + and - Terminals */
394 000000
395 000000 #define CAPD0 (0x01) /* Comp. A
Disable Input Buffer of Port Register .0
*/
396 000000 #define CAPD1 (0x02) /* Comp. A
Disable Input Buffer of Port Register .1
*/
397 000000 #define CAPD2 (0x04) /* Comp. A
Disable Input Buffer of Port Register .2
*/
398 000000 #define CAPD3 (0x08) /* Comp. A
Disable Input Buffer of Port Register .3
*/
399 000000 #define CAPD4 (0x10) /* Comp. A
Disable Input Buffer of Port Register .4
*/
400 000000 #define CAPD5 (0x20) /* Comp. A
Disable Input Buffer of Port Register .5
*/
401 000000 #define CAPD6 (0x40) /* Comp. A
Disable Input Buffer of Port Register .6
*/
402 000000 #define CAPD7 (0x80) /* Comp. A
Disable Input Buffer of Port Register .7
*/
403 000000
404 000000 /***********************************************
**************
405 000000 * Flash Memory
406 000000 ************************************************
*************/
407 000000 #define __MSP430_HAS_FLASH2__ /*
Definition to show that Module is available
*/
408 000000
409 000000 #define FCTL1_ (0x0128u) /* FLASH
Control 1 */
410 000000 DEFW( FCTL1 , FCTL1_)
411 000000 #define FCTL2_ (0x012Au) /* FLASH
Control 2 */
412 000000 DEFW( FCTL2 , FCTL2_)
413 000000 #define FCTL3_ (0x012Cu) /* FLASH
Control 3 */
414 000000 DEFW( FCTL3 , FCTL3_)
415 000000
- 4e-core430G2553 - Page 19
416 000000 #define FRKEY (0x9600u) /* Flash
key returned by read */
417 000000 #define FWKEY (0xA500u) /* Flash
key for write */
418 000000 #define FXKEY (0x3300u) /* for
use with XOR instruction */
419 000000
420 000000 #define ERASE (0x0002u) /* Enable
bit for Flash segment erase */
421 000000 #define MERAS (0x0004u) /* Enable
bit for Flash mass erase */
422 000000 #define WRT (0x0040u) /* Enable
bit for Flash write */
423 000000 #define BLKWRT (0x0080u) /* Enable
bit for Flash segment write */
424 000000 #define SEGWRT (0x0080u) /* old
definition */ /* Enable bit for Flash segment
write */
425 000000
426 000000 #define FN0 (0x0001u) /* Divide
Flash clock by 1 to 64 using FN0 to FN5
according to: */
427 000000 #define FN1 (0x0002u) /*
32*FN5 + 16*FN4 + 8*FN3 + 4*FN2 + 2*FN1 + FN0 +
1 */
428 000000 #ifndef FN2
429 000000 #define FN2 (0x0004u)
430 000000 #endif
431 000000 #ifndef FN3
432 000000 #define FN3 (0x0008u)
433 000000 #endif
434 000000 #ifndef FN4
435 000000 #define FN4 (0x0010u)
436 000000 #endif
437 000000 #define FN5 (0x0020u)
438 000000 #define FSSEL0 (0x0040u) /* Flash
clock select 0 */ /* to distinguish from
USART SSELx */
439 000000 #define FSSEL1 (0x0080u) /* Flash
clock select 1 */
440 000000
441 000000 #define FSSEL_0 (0x0000u) /* Flash
clock select: 0 - ACLK */
442 000000 #define FSSEL_1 (0x0040u) /* Flash
clock select: 1 - MCLK */
443 000000 #define FSSEL_2 (0x0080u) /* Flash
clock select: 2 - SMCLK */
444 000000 #define FSSEL_3 (0x00C0u) /* Flash
clock select: 3 - SMCLK */
445 000000
446 000000 #define BUSY (0x0001u) /* Flash
busy: 1 */
447 000000 #define KEYV (0x0002u) /* Flash
Key violation flag */
448 000000 #define ACCVIFG (0x0004u) /* Flash
Access violation flag */
449 000000 #define WAIT (0x0008u) /* Wait
flag for segment write */
450 000000 #define LOCK (0x0010u) /* Lock
bit: 1 - Flash is locked (read only) */
451 000000 #define EMEX (0x0020u) /* Flash
Emergency Exit */
452 000000 #define LOCKA (0x0040u) /*
Segment A Lock bit: read = 1 - Segment is
locked (read only) */
453 000000 #define FAIL (0x0080u) /* Last
Program or Erase failed */
454 000000
455 000000 /***********************************************
*************
456 000000 * DIGITAL I/O Port1/2 Pull up / Pull down
Resistors
457 000000 ************************************************
************/
458 000000 #define __MSP430_HAS_PORT1_R__ /*
Definition to show that Module is available
*/
459 000000 #define __MSP430_HAS_PORT2_R__ /*
- 4e-core430G2553 - Page 20
Definition to show that Module is available
*/
460 000000
461 000000 #define P1IN_ (0x0020u) /* Port 1
Input */
462 000000 READ_ONLY DEFC( P1IN , P1IN_)
463 000000 #define P1OUT_ (0x0021u) /* Port 1
Output */
464 000000 DEFC( P1OUT , P1OUT_)
465 000000 #define P1DIR_ (0x0022u) /* Port 1
Direction */
466 000000 DEFC( P1DIR , P1DIR_)
467 000000 #define P1IFG_ (0x0023u) /* Port 1
Interrupt Flag */
468 000000 DEFC( P1IFG , P1IFG_)
469 000000 #define P1IES_ (0x0024u) /* Port 1
Interrupt Edge Select */
470 000000 DEFC( P1IES , P1IES_)
471 000000 #define P1IE_ (0x0025u) /* Port 1
Interrupt Enable */
472 000000 DEFC( P1IE , P1IE_)
473 000000 #define P1SEL_ (0x0026u) /* Port 1
Selection */
474 000000 DEFC( P1SEL , P1SEL_)
475 000000 #define P1SEL2_ (0x0041u) /* Port 1
Selection 2 */
476 000000 DEFC( P1SEL2 , P1SEL2_)
477 000000 #define P1REN_ (0x0027u) /* Port 1
Resistor Enable */
478 000000 DEFC( P1REN , P1REN_)
479 000000
480 000000 #define P2IN_ (0x0028u) /* Port 2
Input */
481 000000 READ_ONLY DEFC( P2IN , P2IN_)
482 000000 #define P2OUT_ (0x0029u) /* Port 2
Output */
483 000000 DEFC( P2OUT , P2OUT_)
484 000000 #define P2DIR_ (0x002Au) /* Port 2
Direction */
485 000000 DEFC( P2DIR , P2DIR_)
486 000000 #define P2IFG_ (0x002Bu) /* Port 2
Interrupt Flag */
487 000000 DEFC( P2IFG , P2IFG_)
488 000000 #define P2IES_ (0x002Cu) /* Port 2
Interrupt Edge Select */
489 000000 DEFC( P2IES , P2IES_)
490 000000 #define P2IE_ (0x002Du) /* Port 2
Interrupt Enable */
491 000000 DEFC( P2IE , P2IE_)
492 000000 #define P2SEL_ (0x002Eu) /* Port 2
Selection */
493 000000 DEFC( P2SEL , P2SEL_)
494 000000 #define P2SEL2_ (0x0042u) /* Port 2
Selection 2 */
495 000000 DEFC( P2SEL2 , P2SEL2_)
496 000000 #define P2REN_ (0x002Fu) /* Port 2
Resistor Enable */
497 000000 DEFC( P2REN , P2REN_)
498 000000
499 000000 /***********************************************
*************
500 000000 * DIGITAL I/O Port3 Pull up / Pull down
Resistors
501 000000 ************************************************
************/
502 000000 #define __MSP430_HAS_PORT3_R__ /*
Definition to show that Module is available
*/
503 000000
504 000000 #define P3IN_ (0x0018u) /* Port 3
Input */
505 000000 READ_ONLY DEFC( P3IN , P3IN_)
506 000000 #define P3OUT_ (0x0019u) /* Port 3
Output */
507 000000 DEFC( P3OUT , P3OUT_)
508 000000 #define P3DIR_ (0x001Au) /* Port 3
Direction */
509 000000 DEFC( P3DIR , P3DIR_)
- 4e-core430G2553 - Page 21
510 000000 #define P3SEL_ (0x001Bu) /* Port 3
Selection */
511 000000 DEFC( P3SEL , P3SEL_)
512 000000 #define P3SEL2_ (0x0043u) /* Port 3
Selection 2 */
513 000000 DEFC( P3SEL2 , P3SEL2_)
514 000000 #define P3REN_ (0x0010u) /* Port 3
Resistor Enable */
515 000000 DEFC( P3REN , P3REN_)
516 000000
517 000000 /***********************************************
*************
518 000000 * Timer0_A3
519 000000 ************************************************
************/
520 000000 #define __MSP430_HAS_TA3__ /*
Definition to show that Module is available
*/
521 000000
522 000000 #define TA0IV_ (0x012Eu) /*
Timer0_A3 Interrupt Vector Word */
523 000000 READ_ONLY DEFW( TA0IV , TA0IV_)
524 000000 #define TA0CTL_ (0x0160u) /*
Timer0_A3 Control */
525 000000 DEFW( TA0CTL , TA0CTL_)
526 000000 #define TA0CCTL0_ (0x0162u) /*
Timer0_A3 Capture/Compare Control 0 */
527 000000 DEFW( TA0CCTL0 , TA0CCTL0_)
528 000000 #define TA0CCTL1_ (0x0164u) /*
Timer0_A3 Capture/Compare Control 1 */
529 000000 DEFW( TA0CCTL1 , TA0CCTL1_)
530 000000 #define TA0CCTL2_ (0x0166u) /*
Timer0_A3 Capture/Compare Control 2 */
531 000000 DEFW( TA0CCTL2 , TA0CCTL2_)
532 000000 #define TA0R_ (0x0170u) /*
Timer0_A3 */
533 000000 DEFW( TA0R , TA0R_)
534 000000 #define TA0CCR0_ (0x0172u) /*
Timer0_A3 Capture/Compare 0 */
535 000000 DEFW( TA0CCR0 , TA0CCR0_)
536 000000 #define TA0CCR1_ (0x0174u) /*
Timer0_A3 Capture/Compare 1 */
537 000000 DEFW( TA0CCR1 , TA0CCR1_)
538 000000 #define TA0CCR2_ (0x0176u) /*
Timer0_A3 Capture/Compare 2 */
539 000000 DEFW( TA0CCR2 , TA0CCR2_)
540 000000
541 000000 /* Alternate register names */
542 000000 #define TAIV TA0IV /* Timer A
Interrupt Vector Word */
543 000000 #define TACTL TA0CTL /* Timer A
Control */
544 000000 #define TACCTL0 TA0CCTL0 /* Timer A
Capture/Compare Control 0 */
545 000000 #define TACCTL1 TA0CCTL1 /* Timer A
Capture/Compare Control 1 */
546 000000 #define TACCTL2 TA0CCTL2 /* Timer A
Capture/Compare Control 2 */
547 000000 #define TAR TA0R /* Timer A
*/
548 000000 #define TACCR0 TA0CCR0 /* Timer A
Capture/Compare 0 */
549 000000 #define TACCR1 TA0CCR1 /* Timer A
Capture/Compare 1 */
550 000000 #define TACCR2 TA0CCR2 /* Timer A
Capture/Compare 2 */
551 000000 #define TAIV_ TA0IV_ /* Timer A
Interrupt Vector Word */
552 000000 #define TACTL_ TA0CTL_ /* Timer A
Control */
553 000000 #define TACCTL0_ TA0CCTL0_ /* Timer A
Capture/Compare Control 0 */
554 000000 #define TACCTL1_ TA0CCTL1_ /* Timer A
Capture/Compare Control 1 */
555 000000 #define TACCTL2_ TA0CCTL2_ /* Timer A
Capture/Compare Control 2 */
556 000000 #define TAR_ TA0R_ /* Timer A
*/
- 4e-core430G2553 - Page 22
557 000000 #define TACCR0_ TA0CCR0_ /* Timer A
Capture/Compare 0 */
558 000000 #define TACCR1_ TA0CCR1_ /* Timer A
Capture/Compare 1 */
559 000000 #define TACCR2_ TA0CCR2_ /* Timer A
Capture/Compare 2 */
560 000000
561 000000 /* Alternate register names 2 */
562 000000 #define CCTL0 TACCTL0 /* Timer A
Capture/Compare Control 0 */
563 000000 #define CCTL1 TACCTL1 /* Timer A
Capture/Compare Control 1 */
564 000000 #define CCTL2 TACCTL2 /* Timer A
Capture/Compare Control 2 */
565 000000 #define CCR0 TACCR0 /* Timer A
Capture/Compare 0 */
566 000000 #define CCR1 TACCR1 /* Timer A
Capture/Compare 1 */
567 000000 #define CCR2 TACCR2 /* Timer A
Capture/Compare 2 */
568 000000 #define CCTL0_ TACCTL0_ /* Timer A
Capture/Compare Control 0 */
569 000000 #define CCTL1_ TACCTL1_ /* Timer A
Capture/Compare Control 1 */
570 000000 #define CCTL2_ TACCTL2_ /* Timer A
Capture/Compare Control 2 */
571 000000 #define CCR0_ TACCR0_ /* Timer A
Capture/Compare 0 */
572 000000 #define CCR1_ TACCR1_ /* Timer A
Capture/Compare 1 */
573 000000 #define CCR2_ TACCR2_ /* Timer A
Capture/Compare 2 */
574 000000
575 000000 #define TASSEL1 (0x0200u) /* Timer
A clock source select 0 */
576 000000 #define TASSEL0 (0x0100u) /* Timer
A clock source select 1 */
577 000000 #define ID1 (0x0080u) /* Timer
A clock input divider 1 */
578 000000 #define ID0 (0x0040u) /* Timer
A clock input divider 0 */
579 000000 #define MC1 (0x0020u) /* Timer
A mode control 1 */
580 000000 #define MC0 (0x0010u) /* Timer
A mode control 0 */
581 000000 #define TACLR (0x0004u) /* Timer
A counter clear */
582 000000 #define TAIE (0x0002u) /* Timer
A counter interrupt enable */
583 000000 #define TAIFG (0x0001u) /* Timer
A counter interrupt flag */
584 000000
585 000000 #define MC_0 (0*0x10u) /* Timer
A mode control: 0 - Stop */
586 000000 #define MC_1 (1*0x10u) /* Timer
A mode control: 1 - Up to CCR0 */
587 000000 #define MC_2 (2*0x10u) /* Timer
A mode control: 2 - Continous up */
588 000000 #define MC_3 (3*0x10u) /* Timer
A mode control: 3 - Up/Down */
589 000000 #define ID_0 (0*0x40u) /* Timer
A input divider: 0 - /1 */
590 000000 #define ID_1 (1*0x40u) /* Timer
A input divider: 1 - /2 */
591 000000 #define ID_2 (2*0x40u) /* Timer
A input divider: 2 - /4 */
592 000000 #define ID_3 (3*0x40u) /* Timer
A input divider: 3 - /8 */
593 000000 #define TASSEL_0 (0*0x100u) /* Timer
A clock source select: 0 - TACLK */
594 000000 #define TASSEL_1 (1*0x100u) /* Timer
A clock source select: 1 - ACLK */
595 000000 #define TASSEL_2 (2*0x100u) /* Timer
A clock source select: 2 - SMCLK */
596 000000 #define TASSEL_3 (3*0x100u) /* Timer
A clock source select: 3 - INCLK */
597 000000
598 000000 #define CM1 (0x8000u) /*
- 4e-core430G2553 - Page 23
Capture mode 1 */
599 000000 #define CM0 (0x4000u) /*
Capture mode 0 */
600 000000 #define CCIS1 (0x2000u) /*
Capture input select 1 */
601 000000 #define CCIS0 (0x1000u) /*
Capture input select 0 */
602 000000 #define SCS (0x0800u) /*
Capture sychronize */
603 000000 #define SCCI (0x0400u) /*
Latched capture signal (read) */
604 000000 #define CAP (0x0100u) /*
Capture mode: 1 /Compare mode : 0 */
605 000000 #define OUTMOD2 (0x0080u) /* Output
mode 2 */
606 000000 #define OUTMOD1 (0x0040u) /* Output
mode 1 */
607 000000 #define OUTMOD0 (0x0020u) /* Output
mode 0 */
608 000000 #define CCIE (0x0010u) /*
Capture/compare interrupt enable */
609 000000 #define CCI (0x0008u) /*
Capture input signal (read) */
610 000000 #define OUT (0x0004u) /* PWM
Output signal if output mode 0 */
611 000000 #define COV (0x0002u) /*
Capture/compare overflow flag */
612 000000 #define CCIFG (0x0001u) /*
Capture/compare interrupt flag */
613 000000
614 000000 #define OUTMOD_0 (0*0x20u) /* PWM
output mode: 0 - output only */
615 000000 #define OUTMOD_1 (1*0x20u) /* PWM
output mode: 1 - set */
616 000000 #define OUTMOD_2 (2*0x20u) /* PWM
output mode: 2 - PWM toggle/reset */
617 000000 #define OUTMOD_3 (3*0x20u) /* PWM
output mode: 3 - PWM set/reset */
618 000000 #define OUTMOD_4 (4*0x20u) /* PWM
output mode: 4 - toggle */
619 000000 #define OUTMOD_5 (5*0x20u) /* PWM
output mode: 5 - Reset */
620 000000 #define OUTMOD_6 (6*0x20u) /* PWM
output mode: 6 - PWM toggle/set */
621 000000 #define OUTMOD_7 (7*0x20u) /* PWM
output mode: 7 - PWM reset/set */
622 000000 #define CCIS_0 (0*0x1000u) /*
Capture input select: 0 - CCIxA */
623 000000 #define CCIS_1 (1*0x1000u) /*
Capture input select: 1 - CCIxB */
624 000000 #define CCIS_2 (2*0x1000u) /*
Capture input select: 2 - GND */
625 000000 #define CCIS_3 (3*0x1000u) /*
Capture input select: 3 - Vcc */
626 000000 #define CM_0 (0*0x4000u) /*
Capture mode: 0 - disabled */
627 000000 #define CM_1 (1*0x4000u) /*
Capture mode: 1 - pos. edge */
628 000000 #define CM_2 (2*0x4000u) /*
Capture mode: 1 - neg. edge */
629 000000 #define CM_3 (3*0x4000u) /*
Capture mode: 1 - both edges */
630 000000
631 000000 /* T0_A3IV Definitions */
632 000000 #define TA0IV_NONE (0x0000u) /* No
Interrupt pending */
633 000000 #define TA0IV_TACCR1 (0x0002u) /*
TA0CCR1_CCIFG */
634 000000 #define TA0IV_TACCR2 (0x0004u) /*
TA0CCR2_CCIFG */
635 000000 #define TA0IV_6 (0x0006u) /*
Reserved */
636 000000 #define TA0IV_8 (0x0008u) /*
Reserved */
637 000000 #define TA0IV_TAIFG (0x000Au) /*
TA0IFG */
638 000000
639 000000 /***********************************************
- 4e-core430G2553 - Page 24
*************
640 000000 * Timer1_A3
641 000000 ************************************************
************/
642 000000 #define __MSP430_HAS_T1A3__ /*
Definition to show that Module is available
*/
643 000000
644 000000 #define TA1IV_ (0x011Eu) /*
Timer1_A3 Interrupt Vector Word */
645 000000 READ_ONLY DEFW( TA1IV , TA1IV_)
646 000000 #define TA1CTL_ (0x0180u) /*
Timer1_A3 Control */
647 000000 DEFW( TA1CTL , TA1CTL_)
648 000000 #define TA1CCTL0_ (0x0182u) /*
Timer1_A3 Capture/Compare Control 0 */
649 000000 DEFW( TA1CCTL0 , TA1CCTL0_)
650 000000 #define TA1CCTL1_ (0x0184u) /*
Timer1_A3 Capture/Compare Control 1 */
651 000000 DEFW( TA1CCTL1 , TA1CCTL1_)
652 000000 #define TA1CCTL2_ (0x0186u) /*
Timer1_A3 Capture/Compare Control 2 */
653 000000 DEFW( TA1CCTL2 , TA1CCTL2_)
654 000000 #define TA1R_ (0x0190u) /*
Timer1_A3 */
655 000000 DEFW( TA1R , TA1R_)
656 000000 #define TA1CCR0_ (0x0192u) /*
Timer1_A3 Capture/Compare 0 */
657 000000 DEFW( TA1CCR0 , TA1CCR0_)
658 000000 #define TA1CCR1_ (0x0194u) /*
Timer1_A3 Capture/Compare 1 */
659 000000 DEFW( TA1CCR1 , TA1CCR1_)
660 000000 #define TA1CCR2_ (0x0196u) /*
Timer1_A3 Capture/Compare 2 */
661 000000 DEFW( TA1CCR2 , TA1CCR2_)
662 000000
663 000000 /* Bits are already defined within the Timer0_Ax
*/
664 000000
665 000000 /* T1_A3IV Definitions */
666 000000 #define TA1IV_NONE (0x0000u) /* No
Interrupt pending */
667 000000 #define TA1IV_TACCR1 (0x0002u) /*
TA1CCR1_CCIFG */
668 000000 #define TA1IV_TACCR2 (0x0004u) /*
TA1CCR2_CCIFG */
669 000000 #define TA1IV_TAIFG (0x000Au) /*
TA1IFG */
670 000000
671 000000 /***********************************************
*************
672 000000 * USCI
673 000000 ************************************************
************/
674 000000 #define __MSP430_HAS_USCI__ /*
Definition to show that Module is available
*/
675 000000
676 000000 #define UCA0CTL0_ (0x0060u) /* USCI
A0 Control Register 0 */
677 000000 DEFC( UCA0CTL0 , UCA0CTL0_)
678 000000 #define UCA0CTL1_ (0x0061u) /* USCI
A0 Control Register 1 */
679 000000 DEFC( UCA0CTL1 , UCA0CTL1_)
680 000000 #define UCA0BR0_ (0x0062u) /* USCI
A0 Baud Rate 0 */
681 000000 DEFC( UCA0BR0 , UCA0BR0_)
682 000000 #define UCA0BR1_ (0x0063u) /* USCI
A0 Baud Rate 1 */
683 000000 DEFC( UCA0BR1 , UCA0BR1_)
684 000000 #define UCA0MCTL_ (0x0064u) /* USCI
A0 Modulation Control */
685 000000 DEFC( UCA0MCTL , UCA0MCTL_)
686 000000 #define UCA0STAT_ (0x0065u) /* USCI
A0 Status Register */
687 000000 DEFC( UCA0STAT , UCA0STAT_)
688 000000 #define UCA0RXBUF_ (0x0066u) /* USCI
A0 Receive Buffer */
- 4e-core430G2553 - Page 25
689 000000 READ_ONLY DEFC( UCA0RXBUF , UCA0RXBUF_)
690 000000 #define UCA0TXBUF_ (0x0067u) /* USCI
A0 Transmit Buffer */
691 000000 DEFC( UCA0TXBUF , UCA0TXBUF_)
692 000000 #define UCA0ABCTL_ (0x005Du) /* USCI
A0 LIN Control */
693 000000 DEFC( UCA0ABCTL , UCA0ABCTL_)
694 000000 #define UCA0IRTCTL_ (0x005Eu) /* USCI
A0 IrDA Transmit Control */
695 000000 DEFC( UCA0IRTCTL , UCA0IRTCTL_)
696 000000 #define UCA0IRRCTL_ (0x005Fu) /* USCI
A0 IrDA Receive Control */
697 000000 DEFC( UCA0IRRCTL , UCA0IRRCTL_)
698 000000
699 000000
700 000000
701 000000 #define UCB0CTL0_ (0x0068u) /* USCI
B0 Control Register 0 */
702 000000 DEFC( UCB0CTL0 , UCB0CTL0_)
703 000000 #define UCB0CTL1_ (0x0069u) /* USCI
B0 Control Register 1 */
704 000000 DEFC( UCB0CTL1 , UCB0CTL1_)
705 000000 #define UCB0BR0_ (0x006Au) /* USCI
B0 Baud Rate 0 */
706 000000 DEFC( UCB0BR0 , UCB0BR0_)
707 000000 #define UCB0BR1_ (0x006Bu) /* USCI
B0 Baud Rate 1 */
708 000000 DEFC( UCB0BR1 , UCB0BR1_)
709 000000 #define UCB0I2CIE_ (0x006Cu) /* USCI
B0 I2C Interrupt Enable Register */
710 000000 DEFC( UCB0I2CIE , UCB0I2CIE_)
711 000000 #define UCB0STAT_ (0x006Du) /* USCI
B0 Status Register */
712 000000 DEFC( UCB0STAT , UCB0STAT_)
713 000000 #define UCB0RXBUF_ (0x006Eu) /* USCI
B0 Receive Buffer */
714 000000 READ_ONLY DEFC( UCB0RXBUF , UCB0RXBUF_)
715 000000 #define UCB0TXBUF_ (0x006Fu) /* USCI
B0 Transmit Buffer */
716 000000 DEFC( UCB0TXBUF , UCB0TXBUF_)
717 000000 #define UCB0I2COA_ (0x0118u) /* USCI
B0 I2C Own Address */
718 000000 DEFW( UCB0I2COA , UCB0I2COA_)
719 000000 #define UCB0I2CSA_ (0x011Au) /* USCI
B0 I2C Slave Address */
720 000000 DEFW( UCB0I2CSA , UCB0I2CSA_)
721 000000
722 000000 // UART-Mode Bits
723 000000 #define UCPEN (0x80) /* Async.
Mode: Parity enable */
724 000000 #define UCPAR (0x40) /* Async.
Mode: Parity 0:odd / 1:even */
725 000000 #define UCMSB (0x20) /* Async.
Mode: MSB first 0:LSB / 1:MSB */
726 000000 #define UC7BIT (0x10) /* Async.
Mode: Data Bits 0:8-bits / 1:7-bits */
727 000000 #define UCSPB (0x08) /* Async.
Mode: Stop Bits 0:one / 1: two */
728 000000 #define UCMODE1 (0x04) /* Async.
Mode: USCI Mode 1 */
729 000000 #define UCMODE0 (0x02) /* Async.
Mode: USCI Mode 0 */
730 000000 #define UCSYNC (0x01) /*
Sync-Mode 0:UART-Mode / 1:SPI-Mode */
731 000000
732 000000 // SPI-Mode Bits
733 000000 #define UCCKPH (0x80) /* Sync.
Mode: Clock Phase */
734 000000 #define UCCKPL (0x40) /* Sync.
Mode: Clock Polarity */
735 000000 #define UCMST (0x08) /* Sync.
Mode: Master Select */
736 000000
737 000000 // I2C-Mode Bits
738 000000 #define UCA10 (0x80) /* 10-bit
Address Mode */
739 000000 #define UCSLA10 (0x40) /* 10-bit
Slave Address Mode */
- 4e-core430G2553 - Page 26
740 000000 #define UCMM (0x20) /*
Multi-Master Environment */
741 000000 //#define res (0x10) /*
reserved */
742 000000 #define UCMODE_0 (0x00) /* Sync.
Mode: USCI Mode: 0 */
743 000000 #define UCMODE_1 (0x02) /* Sync.
Mode: USCI Mode: 1 */
744 000000 #define UCMODE_2 (0x04) /* Sync.
Mode: USCI Mode: 2 */
745 000000 #define UCMODE_3 (0x06) /* Sync.
Mode: USCI Mode: 3 */
746 000000
747 000000 // UART-Mode Bits
748 000000 #define UCSSEL1 (0x80) /* USCI 0
Clock Source Select 1 */
749 000000 #define UCSSEL0 (0x40) /* USCI 0
Clock Source Select 0 */
750 000000 #define UCRXEIE (0x20) /* RX
Error interrupt enable */
751 000000 #define UCBRKIE (0x10) /* Break
interrupt enable */
752 000000 #define UCDORM (0x08) /* Dormant
(Sleep) Mode */
753 000000 #define UCTXADDR (0x04) /* Send
next Data as Address */
754 000000 #define UCTXBRK (0x02) /* Send
next Data as Break */
755 000000 #define UCSWRST (0x01) /* USCI
Software Reset */
756 000000
757 000000 // SPI-Mode Bits
758 000000 //#define res (0x20) /*
reserved */
759 000000 //#define res (0x10) /*
reserved */
760 000000 //#define res (0x08) /*
reserved */
761 000000 //#define res (0x04) /*
reserved */
762 000000 //#define res (0x02) /*
reserved */
763 000000
764 000000 // I2C-Mode Bits
765 000000 //#define res (0x20) /*
reserved */
766 000000 #define UCTR (0x10) /*
Transmit/Receive Select/Flag */
767 000000 #define UCTXNACK (0x08) /*
Transmit NACK */
768 000000 #define UCTXSTP (0x04) /*
Transmit STOP */
769 000000 #define UCTXSTT (0x02) /*
Transmit START */
770 000000 #define UCSSEL_0 (0x00) /* USCI 0
Clock Source: 0 */
771 000000 #define UCSSEL_1 (0x40) /* USCI 0
Clock Source: 1 */
772 000000 #define UCSSEL_2 (0x80) /* USCI 0
Clock Source: 2 */
773 000000 #define UCSSEL_3 (0xC0) /* USCI 0
Clock Source: 3 */
774 000000
775 000000 #define UCBRF3 (0x80) /* USCI
First Stage Modulation Select 3 */
776 000000 #define UCBRF2 (0x40) /* USCI
First Stage Modulation Select 2 */
777 000000 #define UCBRF1 (0x20) /* USCI
First Stage Modulation Select 1 */
778 000000 #define UCBRF0 (0x10) /* USCI
First Stage Modulation Select 0 */
779 000000 #define UCBRS2 (0x08) /* USCI
Second Stage Modulation Select 2 */
780 000000 #define UCBRS1 (0x04) /* USCI
Second Stage Modulation Select 1 */
781 000000 #define UCBRS0 (0x02) /* USCI
Second Stage Modulation Select 0 */
782 000000 #define UCOS16 (0x01) /* USCI
- 4e-core430G2553 - Page 27
16-times Oversampling enable */
783 000000
784 000000 #define UCBRF_0 (0x00) /* USCI
First Stage Modulation: 0 */
785 000000 #define UCBRF_1 (0x10) /* USCI
First Stage Modulation: 1 */
786 000000 #define UCBRF_2 (0x20) /* USCI
First Stage Modulation: 2 */
787 000000 #define UCBRF_3 (0x30) /* USCI
First Stage Modulation: 3 */
788 000000 #define UCBRF_4 (0x40) /* USCI
First Stage Modulation: 4 */
789 000000 #define UCBRF_5 (0x50) /* USCI
First Stage Modulation: 5 */
790 000000 #define UCBRF_6 (0x60) /* USCI
First Stage Modulation: 6 */
791 000000 #define UCBRF_7 (0x70) /* USCI
First Stage Modulation: 7 */
792 000000 #define UCBRF_8 (0x80) /* USCI
First Stage Modulation: 8 */
793 000000 #define UCBRF_9 (0x90) /* USCI
First Stage Modulation: 9 */
794 000000 #define UCBRF_10 (0xA0) /* USCI
First Stage Modulation: A */
795 000000 #define UCBRF_11 (0xB0) /* USCI
First Stage Modulation: B */
796 000000 #define UCBRF_12 (0xC0) /* USCI
First Stage Modulation: C */
797 000000 #define UCBRF_13 (0xD0) /* USCI
First Stage Modulation: D */
798 000000 #define UCBRF_14 (0xE0) /* USCI
First Stage Modulation: E */
799 000000 #define UCBRF_15 (0xF0) /* USCI
First Stage Modulation: F */
800 000000
801 000000 #define UCBRS_0 (0x00) /* USCI
Second Stage Modulation: 0 */
802 000000 #define UCBRS_1 (0x02) /* USCI
Second Stage Modulation: 1 */
803 000000 #define UCBRS_2 (0x04) /* USCI
Second Stage Modulation: 2 */
804 000000 #define UCBRS_3 (0x06) /* USCI
Second Stage Modulation: 3 */
805 000000 #define UCBRS_4 (0x08) /* USCI
Second Stage Modulation: 4 */
806 000000 #define UCBRS_5 (0x0A) /* USCI
Second Stage Modulation: 5 */
807 000000 #define UCBRS_6 (0x0C) /* USCI
Second Stage Modulation: 6 */
808 000000 #define UCBRS_7 (0x0E) /* USCI
Second Stage Modulation: 7 */
809 000000
810 000000 #define UCLISTEN (0x80) /* USCI
Listen mode */
811 000000 #define UCFE (0x40) /* USCI
Frame Error Flag */
812 000000 #define UCOE (0x20) /* USCI
Overrun Error Flag */
813 000000 #define UCPE (0x10) /* USCI
Parity Error Flag */
814 000000 #define UCBRK (0x08) /* USCI
Break received */
815 000000 #define UCRXERR (0x04) /* USCI RX
Error Flag */
816 000000 #define UCADDR (0x02) /* USCI
Address received Flag */
817 000000 #define UCBUSY (0x01) /* USCI
Busy Flag */
818 000000 #define UCIDLE (0x02) /* USCI
Idle line detected Flag */
819 000000
820 000000 //#define res (0x80) /*
reserved */
821 000000 //#define res (0x40) /*
reserved */
822 000000 //#define res (0x20) /*
reserved */
823 000000 //#define res (0x10) /*
- 4e-core430G2553 - Page 28
reserved */
824 000000 #define UCNACKIE (0x08) /* NACK
Condition interrupt enable */
825 000000 #define UCSTPIE (0x04) /* STOP
Condition interrupt enable */
826 000000 #define UCSTTIE (0x02) /* START
Condition interrupt enable */
827 000000 #define UCALIE (0x01) /*
Arbitration Lost interrupt enable */
828 000000
829 000000 #define UCSCLLOW (0x40) /* SCL low
*/
830 000000 #define UCGC (0x20) /* General
Call address received Flag */
831 000000 #define UCBBUSY (0x10) /* Bus
Busy Flag */
832 000000 #define UCNACKIFG (0x08) /* NAK
Condition interrupt Flag */
833 000000 #define UCSTPIFG (0x04) /* STOP
Condition interrupt Flag */
834 000000 #define UCSTTIFG (0x02) /* START
Condition interrupt Flag */
835 000000 #define UCALIFG (0x01) /*
Arbitration Lost interrupt Flag */
836 000000
837 000000 #define UCIRTXPL5 (0x80) /* IRDA
Transmit Pulse Length 5 */
838 000000 #define UCIRTXPL4 (0x40) /* IRDA
Transmit Pulse Length 4 */
839 000000 #define UCIRTXPL3 (0x20) /* IRDA
Transmit Pulse Length 3 */
840 000000 #define UCIRTXPL2 (0x10) /* IRDA
Transmit Pulse Length 2 */
841 000000 #define UCIRTXPL1 (0x08) /* IRDA
Transmit Pulse Length 1 */
842 000000 #define UCIRTXPL0 (0x04) /* IRDA
Transmit Pulse Length 0 */
843 000000 #define UCIRTXCLK (0x02) /* IRDA
Transmit Pulse Clock Select */
844 000000 #define UCIREN (0x01) /* IRDA
Encoder/Decoder enable */
845 000000
846 000000 #define UCIRRXFL5 (0x80) /* IRDA
Receive Filter Length 5 */
847 000000 #define UCIRRXFL4 (0x40) /* IRDA
Receive Filter Length 4 */
848 000000 #define UCIRRXFL3 (0x20) /* IRDA
Receive Filter Length 3 */
849 000000 #define UCIRRXFL2 (0x10) /* IRDA
Receive Filter Length 2 */
850 000000 #define UCIRRXFL1 (0x08) /* IRDA
Receive Filter Length 1 */
851 000000 #define UCIRRXFL0 (0x04) /* IRDA
Receive Filter Length 0 */
852 000000 #define UCIRRXPL (0x02) /* IRDA
Receive Input Polarity */
853 000000 #define UCIRRXFE (0x01) /* IRDA
Receive Filter enable */
854 000000
855 000000 //#define res (0x80) /*
reserved */
856 000000 //#define res (0x40) /*
reserved */
857 000000 #define UCDELIM1 (0x20) /* Break
Sync Delimiter 1 */
858 000000 #define UCDELIM0 (0x10) /* Break
Sync Delimiter 0 */
859 000000 #define UCSTOE (0x08) /*
Sync-Field Timeout error */
860 000000 #define UCBTOE (0x04) /* Break
Timeout error */
861 000000 //#define res (0x02) /*
reserved */
862 000000 #define UCABDEN (0x01) /* Auto
Baud Rate detect enable */
863 000000
864 000000 #define UCGCEN (0x8000u) /* I2C
General Call enable */
- 4e-core430G2553 - Page 29
865 000000 #define UCOA9 (0x0200u) /* I2C
Own Address 9 */
866 000000 #define UCOA8 (0x0100u) /* I2C
Own Address 8 */
867 000000 #define UCOA7 (0x0080u) /* I2C
Own Address 7 */
868 000000 #define UCOA6 (0x0040u) /* I2C
Own Address 6 */
869 000000 #define UCOA5 (0x0020u) /* I2C
Own Address 5 */
870 000000 #define UCOA4 (0x0010u) /* I2C
Own Address 4 */
871 000000 #define UCOA3 (0x0008u) /* I2C
Own Address 3 */
872 000000 #define UCOA2 (0x0004u) /* I2C
Own Address 2 */
873 000000 #define UCOA1 (0x0002u) /* I2C
Own Address 1 */
874 000000 #define UCOA0 (0x0001u) /* I2C
Own Address 0 */
875 000000
876 000000 #define UCSA9 (0x0200u) /* I2C
Slave Address 9 */
877 000000 #define UCSA8 (0x0100u) /* I2C
Slave Address 8 */
878 000000 #define UCSA7 (0x0080u) /* I2C
Slave Address 7 */
879 000000 #define UCSA6 (0x0040u) /* I2C
Slave Address 6 */
880 000000 #define UCSA5 (0x0020u) /* I2C
Slave Address 5 */
881 000000 #define UCSA4 (0x0010u) /* I2C
Slave Address 4 */
882 000000 #define UCSA3 (0x0008u) /* I2C
Slave Address 3 */
883 000000 #define UCSA2 (0x0004u) /* I2C
Slave Address 2 */
884 000000 #define UCSA1 (0x0002u) /* I2C
Slave Address 1 */
885 000000 #define UCSA0 (0x0001u) /* I2C
Slave Address 0 */
886 000000
887 000000 /***********************************************
*************
888 000000 * WATCHDOG TIMER
889 000000 ************************************************
************/
890 000000 #define __MSP430_HAS_WDT__ /*
Definition to show that Module is available
*/
891 000000
892 000000 #define WDTCTL_ (0x0120u) /*
Watchdog Timer Control */
893 000000 DEFW( WDTCTL , WDTCTL_)
894 000000 /* The bit names have been prefixed with "WDT"
*/
895 000000 #define WDTIS0 (0x0001u)
896 000000 #define WDTIS1 (0x0002u)
897 000000 #define WDTSSEL (0x0004u)
898 000000 #define WDTCNTCL (0x0008u)
899 000000 #define WDTTMSEL (0x0010u)
900 000000 #define WDTNMI (0x0020u)
901 000000 #define WDTNMIES (0x0040u)
902 000000 #define WDTHOLD (0x0080u)
903 000000
904 000000 #define WDTPW (0x5A00u)
905 000000
906 000000 /* WDT-interval times [1ms] coded with Bits 0-2
*/
907 000000 /* WDT is clocked by fSMCLK (assumed 1MHz)
*/
908 000000 #define WDT_MDLY_32 (WDTPW+WDTTMSEL+WDTC
NTCL) /* 32ms interval
(default) */
909 000000 #define WDT_MDLY_8 (WDTPW+WDTTMSEL+WDTC
NTCL+WDTIS0) /* 8ms "
*/
910 000000 #define WDT_MDLY_0_5 (WDTPW+WDTTMSEL+WDTC
- 4e-core430G2553 - Page 30
NTCL+WDTIS1) /* 0.5ms "
*/
911 000000 #define WDT_MDLY_0_064 (WDTPW+WDTTMSEL+WDTC
NTCL+WDTIS1+WDTIS0) /* 0.064ms "
*/
912 000000 /* WDT is clocked by fACLK (assumed 32KHz)
*/
913 000000 #define WDT_ADLY_1000 (WDTPW+WDTTMSEL+WDTC
NTCL+WDTSSEL) /* 1000ms "
*/
914 000000 #define WDT_ADLY_250 (WDTPW+WDTTMSEL+WDTC
NTCL+WDTSSEL+WDTIS0) /* 250ms "
*/
915 000000 #define WDT_ADLY_16 (WDTPW+WDTTMSEL+WDTC
NTCL+WDTSSEL+WDTIS1) /* 16ms "
*/
916 000000 #define WDT_ADLY_1_9 (WDTPW+WDTTMSEL+WDTC
NTCL+WDTSSEL+WDTIS1+WDTIS0) /* 1.9ms "
*/
917 000000 /* Watchdog mode -> reset after expired time
*/
918 000000 /* WDT is clocked by fSMCLK (assumed 1MHz)
*/
919 000000 #define WDT_MRST_32 (WDTPW+WDTCNTCL)
/* 32ms interval
(default) */
920 000000 #define WDT_MRST_8 (WDTPW+WDTCNTCL+WDTI
S0) /* 8ms "
*/
921 000000 #define WDT_MRST_0_5 (WDTPW+WDTCNTCL+WDTI
S1) /* 0.5ms "
*/
922 000000 #define WDT_MRST_0_064 (WDTPW+WDTCNTCL+WDTI
S1+WDTIS0) /* 0.064ms "
*/
923 000000 /* WDT is clocked by fACLK (assumed 32KHz)
*/
924 000000 #define WDT_ARST_1000 (WDTPW+WDTCNTCL+WDTS
SEL) /* 1000ms "
*/
925 000000 #define WDT_ARST_250 (WDTPW+WDTCNTCL+WDTS
SEL+WDTIS0) /* 250ms "
*/
926 000000 #define WDT_ARST_16 (WDTPW+WDTCNTCL+WDTS
SEL+WDTIS1) /* 16ms "
*/
927 000000 #define WDT_ARST_1_9 (WDTPW+WDTCNTCL+WDTS
SEL+WDTIS1+WDTIS0) /* 1.9ms "
*/
928 000000
929 000000 /* INTERRUPT CONTROL */
930 000000 /* These two bits are defined in the Special
Function Registers */
931 000000 /* #define WDTIE 0x01 */
932 000000 /* #define WDTIFG 0x01 */
933 000000
934 000000 /***********************************************
*************
935 000000 * Calibration Data in Info Mem
936 000000 ************************************************
************/
937 000000
938 000000 #ifndef __DisableCalData
939 000000
940 000000 #define CALDCO_16MHZ_ (0x10F8u) /*
DCOCTL Calibration Data for 16MHz */
941 000000 READ_ONLY DEFC( CALDCO_16MHZ , CALDCO_16MHZ_
)
942 000000 #define CALBC1_16MHZ_ (0x10F9u) /*
BCSCTL1 Calibration Data for 16MHz */
943 000000 READ_ONLY DEFC( CALBC1_16MHZ , CALBC1_16MHZ_
)
944 000000 #define CALDCO_12MHZ_ (0x10FAu) /*
DCOCTL Calibration Data for 12MHz */
945 000000 READ_ONLY DEFC( CALDCO_12MHZ , CALDCO_12MHZ_
)
946 000000 #define CALBC1_12MHZ_ (0x10FBu) /*
BCSCTL1 Calibration Data for 12MHz */
- 4e-core430G2553 - Page 31
947 000000 READ_ONLY DEFC( CALBC1_12MHZ , CALBC1_12MHZ_
)
948 000000 #define CALDCO_8MHZ_ (0x10FCu) /*
DCOCTL Calibration Data for 8MHz */
949 000000 READ_ONLY DEFC( CALDCO_8MHZ , CALDCO_8MHZ_)
950 000000 #define CALBC1_8MHZ_ (0x10FDu) /*
BCSCTL1 Calibration Data for 8MHz */
951 000000 READ_ONLY DEFC( CALBC1_8MHZ , CALBC1_8MHZ_)
952 000000 #define CALDCO_1MHZ_ (0x10FEu) /*
DCOCTL Calibration Data for 1MHz */
953 000000 READ_ONLY DEFC( CALDCO_1MHZ , CALDCO_1MHZ_)
954 000000 #define CALBC1_1MHZ_ (0x10FFu) /*
BCSCTL1 Calibration Data for 1MHz */
955 000000 READ_ONLY DEFC( CALBC1_1MHZ , CALBC1_1MHZ_)
956 000000
957 000000 #endif /* #ifndef __DisableCalData */
958 000000
959 000000 /***********************************************
*************
960 000000 * Interrupt Vectors (offset from 0xFFE0)
961 000000 ************************************************
************/
962 000000
963 000000 #define PORT1_VECTOR (2 * 2u) /* 0xFFE4
Port 1 */
964 000000 #define PORT2_VECTOR (3 * 2u) /* 0xFFE6
Port 2 */
965 000000 #define ADC10_VECTOR (5 * 2u) /* 0xFFEA
ADC10 */
966 000000 #define USCIAB0TX_VECTOR (6 * 2u) /* 0xFFEC
USCI A0/B0 Transmit */
967 000000 #define USCIAB0RX_VECTOR (7 * 2u) /* 0xFFEE
USCI A0/B0 Receive */
968 000000 #define TIMER0_A1_VECTOR (8 * 2u) /* 0xFFF0
Timer0)A CC1, TA0 */
969 000000 #define TIMER0_A0_VECTOR (9 * 2u) /* 0xFFF2
Timer0_A CC0 */
970 000000 #define WDT_VECTOR (10 * 2u) /* 0xFFF4
Watchdog Timer */
971 000000 #define COMPARATORA_VECTOR (11 * 2u) /* 0xFFF6
Comparator A */
972 000000 #define TIMER1_A1_VECTOR (12 * 2u) /* 0xFFF8
Timer1_A CC1-4, TA1 */
973 000000 #define TIMER1_A0_VECTOR (13 * 2u) /* 0xFFFA
Timer1_A CC0 */
974 000000 #define NMI_VECTOR (14 * 2u) /* 0xFFFC
Non-maskable */
975 000000 #define RESET_VECTOR (15 * 2u) /* 0xFFFE
Reset [Highest Priority] */
976 000000
977 000000 /***********************************************
*************
978 000000 * End of Modules
979 000000 ************************************************
************/
980 000000 #pragma language=default
981 000000
982 000000 #endif /* #ifndef __MSP430G2553 */
983 000000
986 000000
987 000000 #elif defined (__MSP430G2203__)
988 000000 #include "msp430g2203.h"
990 000000 #elif defined (__MSP430G2303__)
991 000000 #include "msp430g2303.h"
993 000000 #elif defined (__MSP430G2403__)
994 000000 #include "msp430g2403.h"
996 000000 #elif defined (__MSP430G2233__)
997 000000 #include "msp430g2233.h"
999 000000 #elif defined (__MSP430G2333__)
1000 000000 #include "msp430g2333.h"
1002 000000 #elif defined (__MSP430G2433__)
1003 000000 #include "msp430g2433.h"
1005 000000 #elif defined (__MSP430G2533__)
1006 000000 #include "msp430g2533.h"
1008 000000 #elif defined (__MSP430BT5190__)
1009 000000 #include "msp430bt5190.h"
1014 000000 #elif defined (__MSP430GENERIC__)
1015 000000 #error "msp430 generic device does not have a
- 4e-core430G2553 - Page 32
default include file"
1017 000000 #elif defined (__MSP430XGENERIC__)
1018 000000 #error "msp430X generic device does not have a
default include file"
1024 000000 #else
1025 000000 #error "Failed to match a default include
file"
1026 000000 #endif
1027 000000
1028 000000 #endif /* #ifndef __msp430 */
1029 000000
29 000000 #include "4e-CF430G2553forth.h" ; header
macros and register defs
1 000000 ; ----------------------------------------------
------------------------
2 000000 ; 4e4th is a Forth based on CamelForth
3 000000 ; for the Texas Instruments MSP430
4 000000 ;
5 000000 ; This program is free software; you can
redistribute it and/or modify
6 000000 ; it under the terms of the GNU General Public
License as published by
7 000000 ; the Free Software Foundation; either version 3
of the License, or
8 000000 ; (at your option) any later version.
9 000000 ;
10 000000 ; This program is distributed in the hope that
it will be useful,
11 000000 ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
12 000000 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
13 000000 ; GNU General Public License for more details.
14 000000 ;
15 000000 ; You should have received a copy of the GNU
General Public License
16 000000 ; along with this program. If not, see
.
17 000000 ;
18 000000 ; See LICENSE TERMS in Brads file readme.txt as
well.
19 000000
20 000000 ; ----------------------------------------------
------------------------
21 000000 ; 4e-CF430G2553forth.h: - Register, Model, Macro
declarations - MSP430G2553
22 000000 ; ----------------------------------------------
------------------------
23 000000
24 000000 // ; FORTH MEMORY USAGE
25 000000 // ; for Flash memory operations - this includes
information and main
26 000000 // ; ROM, but not the main ROM used by the
kernel (above E000h)
27 000000 #define INFOSTART (0x1000) // ok mk
28 000000 #define INFOEND (0x10FF) // ok mk
29 000000 #define RAMSTART (0x0200) // ok mk
30 000000 #define RAMEND (0x0400) // ok mk
31 000000 #define USERFLASHSTART (0xC000) // ok mk
32 000000 #define USERFLASHEND (0xD7FF) // muss
übereinstimmen mit -P CODE linker
33 000000 #define ISRSTART (0xFE00)
34 000000 #define ISREND (0xFFDF)
35 000000 #define MAINSEG (512) // wozu ?? mk
36 000000 #define INFOSEG (128) // ?? mk
37 000000
38 000000 // ; FORTH REGISTER USAGE
39 000000
40 000000 // ; Forth virtual machine
41 000000 // PC = R00
42 000000 #define RSP SP // R01
43 000000 // R02 = SR statusregister
44 000000 // R03 = CG constantgenerator
45 000000 #define PSP R4
46 000000 #define IP R5
47 000000 #define W R6
- 4e-core430G2553 - Page 33
48 000000 #define TOS R7
49 000000
50 000000 // ; Loop parameters in registers
51 000000 #define INDEX R8
52 000000 #define LIMIT R9
53 000000
54 000000 // ; Scratch registers
55 000000 #define X R10
56 000000 #define Y R11
57 000000 #define Q R12
58 000000 #define T R13
59 000000 // nc R14
60 000000 // nc R15
61 000000
62 000000
63 000000 // ; T.I. Integer Subroutines Definitions
64 000000 #define IROP1 TOS
65 000000 #define IROP2L R10
66 000000 #define IROP2M R11
67 000000 #define IRACL R12
68 000000 #define IRACM R13
69 000000 #define IRBT W
70 000000
71 000000 // ; INDIRECT-THREADED NEXT
72 000000
77 000000
78 000000 // ; BRANCH DESTINATION (RELATIVE BRANCH)
79 000000 // ; For relative branch addresses, i.e., a
branch is ADD @IP,IP
80 000000
84 000000
85 000000 // ; HEADER CONSTRUCTION MACROS
86 000000
101 000000
110 000000
125 000000
30 000000
31 000000 EXTERN UP,UAREA,PADAREA,LSTACK,PSTACK,R
STACK
32 000000 EXTERN TIBAREA,RAMDICT,ROMDICT
33 000000 EXTERN TIB_SIZE,UAREA_SIZE,VARAREA,VAR_
SIZE,nullirq
34 000000
35 000000 RSEG CODE ; place
program in 'CODE' segment
36 000000
37 000000 link SET 0 ; initial dictionary
link
38 000000
39 000000 ; production fuse bits
40 000000 FFFF PROFUSE: DW 0xFFFF ; burn fuse to prohibit
WIPE
41 000002
42 000002
43 000002 13 version: DB (verend-ver0)
44 000003 204D53503433*ver0: DB ' MSP430G2553 4E4th '
45 000016 EVEN 0x20 ; use blank as padding
byte
46 000016 verend:
47 000016
48 000016 16 stamp: DB (stampend-stamp0)
49 000017 446563203231*stamp0: DB __date__,' ',__time__
50 00002D stampend:
51 00002D
52 00002D /*
53 00002D id: DB (idend-id0)
54 00002D id0: DB 'MSP430G2553 '
55 00002D EVEN 0x20 ; use blank as padding
byte
56 00002D idend:
57 00002D */
58 00002D
59 00002D ; ----------------------------------------------
------------------------
60 00002D ; INTERPRETER LOGIC
61 00002D ; ITC NEXT is defined as
62 00002D ; MOV @IP+,W ; 2 fetch word address
into W
- 4e-core430G2553 - Page 34
63 00002D ; MOV @W+,PC ; 2 fetch code address
into PC, W=PFA
64 00002D
65 00002D ;C EXECUTE i*x xt -- j*x execute Forth word
at 'xt'
66 00002D HEADER EXECUTE,7,'EXECUTE',DOCODE
66.1 000000 PUBLIC EXECUTE
66.2 00002D 0000 DW link
66.3 00002F FF DB 0FFh ; not immediate
66.4 000030 link SET $
66.5 000030 07 DB 7
66.6 000031 455845435554* DB 'EXECUTE'
66.7 000038 EVEN
66.8 000038 IF 'DOCODE'='DOCODE'
66.9 000038 .... EXECUTE: DW $+2
66.10 00003A ELSE
66.11 00003A EXECUTE: DW DOCODE
66.12 00003A ENDIF
66.13 00003A ENDM
67 00003A 0647 MOV TOS,W ; 1 put word address
into W
68 00003C 3744 MOV @PSP+,TOS ; 2 fetch new TOS
69 00003E 3046 MOV @W+,PC ; 2 fetch code address
into PC, W=PFA
70 000040
71 000040 ;Z lit -- x fetch inline literal to
stack
72 000040 ; This is the primtive compiled by LITERAL.
73 000040 HEADER lit,3,'lit',DOCODE
73.1 000000 PUBLIC lit
73.2 000040 .... DW link
73.3 000042 FF DB 0FFh ; not immediate
73.4 000043 link SET $
73.5 000043 03 DB 3
73.6 000044 6C6974 DB 'lit'
73.7 000047 00 EVEN
73.8 000048 IF 'DOCODE'='DOCODE'
73.9 000048 .... lit: DW $+2
73.10 00004A ELSE
73.11 00004A lit: DW DOCODE
73.12 00004A ENDIF
73.13 00004A ENDM
74 00004A 2483 SUB #2,PSP ; 1 push old TOS..
75 00004C 84470000 MOV TOS,0(PSP) ; 4 ..onto stack
76 000050 3745 MOV @IP+,TOS ; 2 fetch new TOS
value
77 000052 NEXT ; 4
77.1 000052 3645 MOV @IP+,W // ; fetch word address
into W
77.2 000054 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
77.3 000056 ENDM
78 000056
79 000056 ;C EXIT -- exit a colon
definition
80 000056 HEADER EXIT,4,'EXIT',DOCODE
80.1 000000 PUBLIC EXIT
80.2 000056 .... DW link
80.3 000058 FF DB 0FFh ; not immediate
80.4 000059 link SET $
80.5 000059 04 DB 4
80.6 00005A 45584954 DB 'EXIT'
80.7 00005E EVEN
80.8 00005E IF 'DOCODE'='DOCODE'
80.9 00005E .... EXIT: DW $+2
80.10 000060 ELSE
80.11 000060 EXIT: DW DOCODE
80.12 000060 ENDIF
80.13 000060 ENDM
81 000060 3541 MOV @RSP+,IP ; 2 pop old IP from
return stack
82 000062 NEXT ; 4
82.1 000062 3645 MOV @IP+,W // ; fetch word address
into W
82.2 000064 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
82.3 000066 ENDM
83 000066
- 4e-core430G2553 - Page 35
84 000066 ; ----------------------------------------------
------------------------
85 000066 ; DEFINING WORDS - ROMable ITC model
86 000066
87 000066 ; DOCOLON enters a new high-level thread (colon
definition.)
88 000066 ; (internal code fragment, not a Forth
word)
89 000000 PUBLIC DOCOLON
90 000066 DOCOLON:
91 000066 0512 PUSH IP ; 3 save old IP on
return stack
92 000068 0546 MOV W,IP ; 1 set new IP to
PFA
93 00006A NEXT ; 4
93.1 00006A 3645 MOV @IP+,W // ; fetch word address
into W
93.2 00006C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
93.3 00006E ENDM
94 00006E
95 00006E ;C VARIABLE -- define a Forth
VARIABLE
96 00006E ; CREATE CELL ALLOT ;
97 00006E ; Action of ROMable variable is the same as
CREATE; it builds a
98 00006E ; constant holding the RAM address. See CREATE
in hilvl430.s43.
99 00006E HEADER VARIABLE,8,'VARIABLE',DOCOLON
99.1 000000 PUBLIC VARIABLE
99.2 00006E .... DW link
99.3 000070 FF DB 0FFh ; not immediate
99.4 000071 link SET $
99.5 000071 08 DB 8
99.6 000072 564152494142* DB 'VARIABLE'
99.7 00007A EVEN
99.8 00007A IF 'DOCOLON'='DOCODE'
99.9 00007A VARIABLE: DW $+2
99.10 00007A ELSE
99.11 00007A .... VARIABLE: DW DOCOLON
99.12 00007C ENDIF
99.13 00007C ENDM
100 00007C ............* DW CREATE,CELL,ALLOT,EXIT
101 000084
102 000084 ;C CONSTANT -- define a Forth
constant
103 000084 ; (machine code fragment)
105 000084 ; Note that the constant is stored in Code
space.
106 000084 HEADER CONSTANT,8,'CONSTANT',DOCOLON
106.1 000000 PUBLIC CONSTANT
106.2 000084 .... DW link
106.3 000086 FF DB 0FFh ; not immediate
106.4 000087 link SET $
106.5 000087 08 DB 8
106.6 000088 434F4E535441* DB 'CONSTANT'
106.7 000090 EVEN
106.8 000090 IF 'DOCOLON'='DOCODE'
106.9 000090 CONSTANT: DW $+2
106.10 000090 ELSE
106.11 000090 .... CONSTANT: DW DOCOLON
106.12 000092 ENDIF
106.13 000092 ENDM
107 000092 ............ DW BUILDS,ICOMMA,XDOES
108 000098 ; DOCON, code action of CONSTANT,
109 000098 ; entered with W=Parameter Field Adrs
110 000098 ; This is also the action of VARIABLE (Harvard
model)
111 000098 ; This is also the action of CREATE (Harvard
model)
112 000000 PUBLIC DOCON
113 000000 PUBLIC docreate
114 000000 PUBLIC DOVAR
115 000098 docreate: ; -- a-addr ; ROMable CREATE fetches
address from PFA
116 000098 DOVAR: ; -- a-addr ; ROMable VARIABLE
fetches address from PFA
- 4e-core430G2553 - Page 36
117 000098 DOCON: ; -- x ; CONSTANT fetches cell
from PFA to TOS
118 000098 2483 SUB #2,PSP ; make room on
stack
119 00009A 84470000 MOV TOS,0(PSP)
120 00009E 2746 MOV @W,TOS ; fetch from parameter
field to TOS
121 0000A0 NEXT
121.1 0000A0 3645 MOV @IP+,W // ; fetch word address
into W
121.2 0000A2 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
121.3 0000A4 ENDM
122 0000A4
123 0000A4 ; DOCREATE's action is for a table in RAM.
124 0000A4 ; DOROM is the code action for a table in
ROM;
125 0000A4 ; it returns the address of the parameter
field.
126 000000 PUBLIC DOROM
127 0000A4 DOROM: ; -- a-addr ; Table in ROM: get PFA
into TOS
128 0000A4 2483 SUB #2,PSP
129 0000A6 84470000 MOV TOS,0(PSP)
130 0000AA 0746 MOV W,TOS
131 0000AC NEXT
131.1 0000AC 3645 MOV @IP+,W // ; fetch word address
into W
131.2 0000AE 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
131.3 0000B0 ENDM
132 0000B0
133 0000B0 ;Z USER n -- define user variable
'n'
134 0000B0 ; (machine code fragment)
Flashable model
135 0000B0 HEADER USER,4,'USER',DOCOLON
135.1 000000 PUBLIC USER
135.2 0000B0 .... DW link
135.3 0000B2 FF DB 0FFh ; not immediate
135.4 0000B3 link SET $
135.5 0000B3 04 DB 4
135.6 0000B4 55534552 DB 'USER'
135.7 0000B8 EVEN
135.8 0000B8 IF 'DOCOLON'='DOCODE'
135.9 0000B8 USER: DW $+2
135.10 0000B8 ELSE
135.11 0000B8 .... USER: DW DOCOLON
135.12 0000BA ENDIF
135.13 0000BA ENDM
136 0000BA ............ DW BUILDS,ICOMMA,XDOES
137 000000 PUBLIC DOUSER
138 0000C0 DOUSER: ; -- a-addr ; add constant to User
Pointer, result in TOS
139 0000C0 2483 SUB #2,PSP
140 0000C2 84470000 MOV TOS,0(PSP)
141 0000C6 2746 MOV @W,TOS
142 0000C8 1752.... ADD &UP,TOS
143 0000CC NEXT
143.1 0000CC 3645 MOV @IP+,W // ; fetch word address
into W
143.2 0000CE 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
143.3 0000D0 ENDM
144 0000D0
145 0000D0 ; DOALIAS used to build a word which performs
the action of
146 0000D0 ; another word. Its action is to fetch the
"alias" CFA from
147 0000D0 ; the parameter field, and execute that, e.g.
DOES> I@ EXECUTE ;
148 0000D0 ; This is currently used only within the Forth
kernel.
149 000000 PUBLIC DOALIAS
150 0000D0 DOALIAS: ; -- ; fetch CFA of word to
execute
151 0000D0 2646 MOV @W,W ; 2 fetch from parameter
field to W
- 4e-core430G2553 - Page 37
152 0000D2 3046 MOV @W+,PC ; 2 fetch code address
into PC, W=PFA
153 0000D4
154 0000D4 ; DODOES is the code action of a DOES> clause.
For ITC Forth:
155 0000D4 ; defined word: CFA: doescode
156 0000D4 ; PFA: parameter field
157 0000D4 ;
158 0000D4 ; doescode: MOV #DODOES,PC ; 16-bit direct
jump, in two cells
159 0000D4 ; high-level thread
160 0000D4 ;
161 0000D4 ; Note that we use JMP DODOES instead of CALL
#DODOES because we can
162 0000D4 ; efficiently obtain the thread address. DODOES
is entered with W=PFA.
163 0000D4 ; It enters the high-level thread with the
address of the parameter
164 0000D4 ; field on top of stack.
165 0000D4
166 000000 PUBLIC dodoes
167 0000D4 dodoes: ; -- a-addr ; 3 for MOV #DODOES,PC
168 0000D4 2483 SUB #2,PSP ; 1 make room on
stack
169 0000D6 84470000 MOV TOS,0(PSP) ; 4
170 0000DA 0746 MOV W,TOS ; 1 put defined word's
PFA in TOS
171 0000DC 0512 PUSH IP ; 3 save old IP on
return stack
172 0000DE 1546FEFF MOV -2(W),IP ; 3 fetch adrs of
doescode from defined
word
173 0000E2 2552 ADD #4,IP ; 1 skip MOV instruction
to get thread
adrs
174 0000E4 NEXT ; 4
174.1 0000E4 3645 MOV @IP+,W // ; fetch word address
into W
174.2 0000E6 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
174.3 0000E8 ENDM
175 0000E8
176 0000E8 ; OPTION 1 ; OPTION 2
177 0000E8 ; MOV #DODOES,PC 3 ; CALL #DODOES
5
178 0000E8 ; ... ; ...
179 0000E8 ; PUSH IP 3 ; POP W
2
180 0000E8 ; MOVE -2(W),IP 3 ; PUSH IP
3
181 0000E8 ; ADD #4,IP 1 ; MOV W,IP
1
182 0000E8
183 0000E8
184 0000E8 ; ----------------------------------------------
------------------------
185 0000E8 ; STACK OPERATIONS
186 0000E8
187 0000E8 ;C DUP x -- x x duplicate top of
stack
188 0000E8 HEADER DUP,3,'DUP',DOCODE
188.1 000000 PUBLIC DUP
188.2 0000E8 .... DW link
188.3 0000EA FF DB 0FFh ; not immediate
188.4 0000EB link SET $
188.5 0000EB 03 DB 3
188.6 0000EC 445550 DB 'DUP'
188.7 0000EF 00 EVEN
188.8 0000F0 IF 'DOCODE'='DOCODE'
188.9 0000F0 .... DUP: DW $+2
188.10 0000F2 ELSE
188.11 0000F2 DUP: DW DOCODE
188.12 0000F2 ENDIF
188.13 0000F2 ENDM
189 0000F2 2483 PUSHTOS: SUB #2,PSP ; 1 push old
TOS..
190 0000F4 84470000 MOV TOS,0(PSP) ; 4 ..onto
stack
- 4e-core430G2553 - Page 38
191 0000F8 NEXT ; 4
191.1 0000F8 3645 MOV @IP+,W // ; fetch word address
into
W
191.2 0000FA 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
191.3 0000FC ENDM
192 0000FC
193 0000FC ;C ?DUP x -- 0 | x x DUP if nonzero
194 0000FC HEADER QDUP,4,'?DUP',DOCODE
194.1 000000 PUBLIC QDUP
194.2 0000FC .... DW link
194.3 0000FE FF DB 0FFh ; not immediate
194.4 0000FF link SET $
194.5 0000FF 04 DB 4
194.6 000100 3F445550 DB '?DUP'
194.7 000104 EVEN
194.8 000104 IF 'DOCODE'='DOCODE'
194.9 000104 .... QDUP: DW $+2
194.10 000106 ELSE
194.11 000106 QDUP: DW DOCODE
194.12 000106 ENDIF
194.13 000106 ENDM
195 000106 0793 CMP #0,TOS ; 1 test for
TOS nonzero
196 000108 F423 JNZ PUSHTOS ; 2
197 00010A NODUP: NEXT ; 4
197.1 00010A 3645 MOV @IP+,W // ; fetch word address
into
W
197.2 00010C 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
197.3 00010E ENDM
198 00010E
199 00010E ;C DROP x -- drop top of stack
200 00010E HEADER DROP,4,'DROP',DOCODE
200.1 000000 PUBLIC DROP
200.2 00010E .... DW link
200.3 000110 FF DB 0FFh ; not immediate
200.4 000111 link SET $
200.5 000111 04 DB 4
200.6 000112 44524F50 DB 'DROP'
200.7 000116 EVEN
200.8 000116 IF 'DOCODE'='DOCODE'
200.9 000116 .... DROP: DW $+2
200.10 000118 ELSE
200.11 000118 DROP: DW DOCODE
200.12 000118 ENDIF
200.13 000118 ENDM
201 000118 3744 MOV @PSP+,TOS ; 2
202 00011A NEXT ; 4
202.1 00011A 3645 MOV @IP+,W // ; fetch word address
into
W
202.2 00011C 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
202.3 00011E ENDM
203 00011E
204 00011E ;C SWAP x1 x2 -- x2 x1 swap top two
items
205 00011E HEADER SWAP,4,'SWAP',DOCODE
205.1 000000 PUBLIC SWAP
205.2 00011E .... DW link
205.3 000120 FF DB 0FFh ; not immediate
205.4 000121 link SET $
205.5 000121 04 DB 4
205.6 000122 53574150 DB 'SWAP'
205.7 000126 EVEN
205.8 000126 IF 'DOCODE'='DOCODE'
205.9 000126 .... SWAP: DW $+2
205.10 000128 ELSE
205.11 000128 SWAP: DW DOCODE
205.12 000128 ENDIF
205.13 000128 ENDM
206 000128 2644 MOV @PSP,W ; 2
- 4e-core430G2553 - Page 39
207 00012A 84470000 MOV TOS,0(PSP) ; 4
208 00012E 0746 MOV W,TOS ; 1
209 000130 NEXT ; 4
209.1 000130 3645 MOV @IP+,W // ; fetch word address
into
W
209.2 000132 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
209.3 000134 ENDM
210 000134
211 000134 ;C OVER x1 x2 -- x1 x2 x1 per stack
diagram
212 000134 HEADER OVER,4,'OVER',DOCODE
212.1 000000 PUBLIC OVER
212.2 000134 .... DW link
212.3 000136 FF DB 0FFh ; not immediate
212.4 000137 link SET $
212.5 000137 04 DB 4
212.6 000138 4F564552 DB 'OVER'
212.7 00013C EVEN
212.8 00013C IF 'DOCODE'='DOCODE'
212.9 00013C .... OVER: DW $+2
212.10 00013E ELSE
212.11 00013E OVER: DW DOCODE
212.12 00013E ENDIF
212.13 00013E ENDM
213 00013E 2644 MOV @PSP,W ; 2
214 000140 2483 SUB #2,PSP ; 2
215 000142 84470000 MOV TOS,0(PSP) ; 4
216 000146 0746 MOV W,TOS ; 1
217 000148 NEXT ; 4
217.1 000148 3645 MOV @IP+,W // ; fetch word address
into
W
217.2 00014A 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
217.3 00014C ENDM
218 00014C
219 00014C ;C ROT x1 x2 x3 -- x2 x3 x1 per stack
diagram
220 00014C HEADER ROT,3,'ROT',DOCODE
220.1 000000 PUBLIC ROT
220.2 00014C .... DW link
220.3 00014E FF DB 0FFh ; not immediate
220.4 00014F link SET $
220.5 00014F 03 DB 3
220.6 000150 524F54 DB 'ROT'
220.7 000153 00 EVEN
220.8 000154 IF 'DOCODE'='DOCODE'
220.9 000154 .... ROT: DW $+2
220.10 000156 ELSE
220.11 000156 ROT: DW DOCODE
220.12 000156 ENDIF
220.13 000156 ENDM
221 000156 2644 MOV @PSP,W ; 2 fetch
x2
222 000158 84470000 MOV TOS,0(PSP) ; 4 store
x3
223 00015C 17440200 MOV 2(PSP),TOS ; 3 fetch
x1
224 000160 84460200 MOV W,2(PSP) ; 4 store
x2
225 000164 NEXT ; 4
225.1 000164 3645 MOV @IP+,W // ; fetch word address
into
W
225.2 000166 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
225.3 000168 ENDM
226 000168
227 000168 ;X NIP x1 x2 -- x2 per stack
diagram
228 000168 HEADER NIP,3,'NIP',DOCODE
228.1 000000 PUBLIC NIP
228.2 000168 .... DW link
- 4e-core430G2553 - Page 40
228.3 00016A FF DB 0FFh ; not immediate
228.4 00016B link SET $
228.5 00016B 03 DB 3
228.6 00016C 4E4950 DB 'NIP'
228.7 00016F 00 EVEN
228.8 000170 IF 'DOCODE'='DOCODE'
228.9 000170 .... NIP: DW $+2
228.10 000172 ELSE
228.11 000172 NIP: DW DOCODE
228.12 000172 ENDIF
228.13 000172 ENDM
229 000172 2453 ADD #2,PSP ; 1
230 000174 NEXT ; 4
230.1 000174 3645 MOV @IP+,W // ; fetch word address
into
W
230.2 000176 3046 MOV @W+,PC // ; fetch code address
into PC,
W=PFA
230.3 000178 ENDM
231 000178 ; Das funktioniert, weil TOS im Register
ist.
232 000178 ; TOS beleibt dort unverändert, derweil der PSP
um eins erhöht wird.
233 000178 ; Das entspricht einem DROP ohne den TOS neu zu
laden.
234 000178 ; cool. mk
235 000178
236 000178 ;C >R x -- R: -- x push to return
stack
237 000178 HEADER TOR,2,'>R',DOCODE
237.1 000000 PUBLIC TOR
237.2 000178 .... DW link
237.3 00017A FF DB 0FFh ; not immediate
237.4 00017B link SET $
237.5 00017B 02 DB 2
237.6 00017C 3E52 DB '>R'
237.7 00017E EVEN
237.8 00017E IF 'DOCODE'='DOCODE'
237.9 00017E .... TOR: DW $+2
237.10 000180 ELSE
237.11 000180 TOR: DW DOCODE
237.12 000180 ENDIF
237.13 000180 ENDM
238 000180 0712 PUSH TOS
239 000182 3744 MOV @PSP+,TOS
240 000184 NEXT
240.1 000184 3645 MOV @IP+,W // ; fetch word address
into W
240.2 000186 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
240.3 000188 ENDM
241 000188
242 000188 ;C R> -- x R: x -- pop from return
stack
243 000188 HEADER RFROM,2,'R>',DOCODE
243.1 000000 PUBLIC RFROM
243.2 000188 .... DW link
243.3 00018A FF DB 0FFh ; not immediate
243.4 00018B link SET $
243.5 00018B 02 DB 2
243.6 00018C 523E DB 'R>'
243.7 00018E EVEN
243.8 00018E IF 'DOCODE'='DOCODE'
243.9 00018E .... RFROM: DW $+2
243.10 000190 ELSE
243.11 000190 RFROM: DW DOCODE
243.12 000190 ENDIF
243.13 000190 ENDM
244 000190 2483 SUB #2,PSP ; 2
245 000192 84470000 MOV TOS,0(PSP) ; 4
246 000196 3741 MOV @RSP+,TOS
247 000198 NEXT
247.1 000198 3645 MOV @IP+,W // ; fetch word address
into W
247.2 00019A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
247.3 00019C ENDM
- 4e-core430G2553 - Page 41
248 00019C
249 00019C ;C R@ -- x R: x -- x fetch from rtn
stk
250 00019C HEADER RFETCH,2,'R@',DOCODE
250.1 000000 PUBLIC RFETCH
250.2 00019C .... DW link
250.3 00019E FF DB 0FFh ; not immediate
250.4 00019F link SET $
250.5 00019F 02 DB 2
250.6 0001A0 5240 DB 'R@'
250.7 0001A2 EVEN
250.8 0001A2 IF 'DOCODE'='DOCODE'
250.9 0001A2 .... RFETCH: DW $+2
250.10 0001A4 ELSE
250.11 0001A4 RFETCH: DW DOCODE
250.12 0001A4 ENDIF
250.13 0001A4 ENDM
251 0001A4 2483 SUB #2,PSP
252 0001A6 84470000 MOV TOS,0(PSP)
253 0001AA 2741 MOV @RSP,TOS
254 0001AC NEXT
254.1 0001AC 3645 MOV @IP+,W // ; fetch word address
into W
254.2 0001AE 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
254.3 0001B0 ENDM
255 0001B0
256 0001B0 ;Z SP@ -- a-addr get data stack
pointer
257 0001B0 HEADER SPFETCH,3,'SP@',DOCODE
257.1 000000 PUBLIC SPFETCH
257.2 0001B0 .... DW link
257.3 0001B2 FF DB 0FFh ; not immediate
257.4 0001B3 link SET $
257.5 0001B3 03 DB 3
257.6 0001B4 535040 DB 'SP@'
257.7 0001B7 00 EVEN
257.8 0001B8 IF 'DOCODE'='DOCODE'
257.9 0001B8 .... SPFETCH: DW $+2
257.10 0001BA ELSE
257.11 0001BA SPFETCH: DW DOCODE
257.12 0001BA ENDIF
257.13 0001BA ENDM
258 0001BA 2483 SUB #2,PSP
259 0001BC 84470000 MOV TOS,0(PSP)
260 0001C0 0744 MOV PSP,TOS
261 0001C2 NEXT
261.1 0001C2 3645 MOV @IP+,W // ; fetch word address
into W
261.2 0001C4 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
261.3 0001C6 ENDM
262 0001C6
263 0001C6 ;Z SP! a-addr -- set data stack
pointer
264 0001C6 HEADER SPSTORE,3,'SP!',DOCODE
264.1 000000 PUBLIC SPSTORE
264.2 0001C6 .... DW link
264.3 0001C8 FF DB 0FFh ; not immediate
264.4 0001C9 link SET $
264.5 0001C9 03 DB 3
264.6 0001CA 535021 DB 'SP!'
264.7 0001CD 00 EVEN
264.8 0001CE IF 'DOCODE'='DOCODE'
264.9 0001CE .... SPSTORE: DW $+2
264.10 0001D0 ELSE
264.11 0001D0 SPSTORE: DW DOCODE
264.12 0001D0 ENDIF
264.13 0001D0 ENDM
265 0001D0 0447 MOV TOS,PSP
266 0001D2 3744 MOV @PSP+,TOS ; 2
267 0001D4 NEXT
267.1 0001D4 3645 MOV @IP+,W // ; fetch word address
into W
267.2 0001D6 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
267.3 0001D8 ENDM
268 0001D8
- 4e-core430G2553 - Page 42
269 0001D8 ;Z RP@ -- a-addr get return stack
pointer
270 0001D8 HEADER RPFETCH,3,'RP@',DOCODE
270.1 000000 PUBLIC RPFETCH
270.2 0001D8 .... DW link
270.3 0001DA FF DB 0FFh ; not immediate
270.4 0001DB link SET $
270.5 0001DB 03 DB 3
270.6 0001DC 525040 DB 'RP@'
270.7 0001DF 00 EVEN
270.8 0001E0 IF 'DOCODE'='DOCODE'
270.9 0001E0 .... RPFETCH: DW $+2
270.10 0001E2 ELSE
270.11 0001E2 RPFETCH: DW DOCODE
270.12 0001E2 ENDIF
270.13 0001E2 ENDM
271 0001E2 2483 SUB #2,PSP
272 0001E4 84470000 MOV TOS,0(PSP)
273 0001E8 0741 MOV RSP,TOS
274 0001EA NEXT
274.1 0001EA 3645 MOV @IP+,W // ; fetch word address
into W
274.2 0001EC 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
274.3 0001EE ENDM
275 0001EE
276 0001EE ;Z RP! a-addr -- set return stack
pointer
277 0001EE HEADER RPSTORE,3,'RP!',DOCODE
277.1 000000 PUBLIC RPSTORE
277.2 0001EE .... DW link
277.3 0001F0 FF DB 0FFh ; not immediate
277.4 0001F1 link SET $
277.5 0001F1 03 DB 3
277.6 0001F2 525021 DB 'RP!'
277.7 0001F5 00 EVEN
277.8 0001F6 IF 'DOCODE'='DOCODE'
277.9 0001F6 .... RPSTORE: DW $+2
277.10 0001F8 ELSE
277.11 0001F8 RPSTORE: DW DOCODE
277.12 0001F8 ENDIF
277.13 0001F8 ENDM
278 0001F8 0147 MOV TOS,RSP
279 0001FA 3744 MOV @PSP+,TOS ; 2
280 0001FC NEXT
280.1 0001FC 3645 MOV @IP+,W // ; fetch word address
into W
280.2 0001FE 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
280.3 000200 ENDM
281 000200
282 000200 ;X TUCK x1 x2 -- x2 x1 x2 per stack
diagram
283 000200 HEADER TUCK,4,'TUCK',DOCOLON
283.1 000000 PUBLIC TUCK
283.2 000200 .... DW link
283.3 000202 FF DB 0FFh ; not immediate
283.4 000203 link SET $
283.5 000203 04 DB 4
283.6 000204 5455434B DB 'TUCK'
283.7 000208 EVEN
283.8 000208 IF 'DOCOLON'='DOCODE'
283.9 000208 TUCK: DW $+2
283.10 000208 ELSE
283.11 000208 .... TUCK: DW DOCOLON
283.12 00020A ENDIF
283.13 00020A ENDM
284 00020A ............ DC16 SWAP,OVER,EXIT
285 000210
286 000210 ; ----------------------------------------------
------------------------
287 000210 ; MEMORY OPERATIONS
288 000210
289 000210 ;C @ a-addr -- x fetch cell from
memory
290 000210 HEADER FETCH,1,'@',DOCODE
290.1 000000 PUBLIC FETCH
290.2 000210 .... DW link
- 4e-core430G2553 - Page 43
290.3 000212 FF DB 0FFh ; not immediate
290.4 000213 link SET $
290.5 000213 01 DB 1
290.6 000214 40 DB '@'
290.7 000215 00 EVEN
290.8 000216 IF 'DOCODE'='DOCODE'
290.9 000216 .... FETCH: DW $+2
290.10 000218 ELSE
290.11 000218 FETCH: DW DOCODE
290.12 000218 ENDIF
290.13 000218 ENDM
291 000218 2747 MOV @TOS,TOS
292 00021A NEXT
292.1 00021A 3645 MOV @IP+,W // ; fetch word address
into W
292.2 00021C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
292.3 00021E ENDM
293 00021E
294 00021E ;C ! x a-addr -- store cell in
memory
295 00021E HEADER STORE,1,'!',DOCODE
295.1 000000 PUBLIC STORE
295.2 00021E .... DW link
295.3 000220 FF DB 0FFh ; not immediate
295.4 000221 link SET $
295.5 000221 01 DB 1
295.6 000222 21 DB '!'
295.7 000223 00 EVEN
295.8 000224 IF 'DOCODE'='DOCODE'
295.9 000224 .... STORE: DW $+2
295.10 000226 ELSE
295.11 000226 STORE: DW DOCODE
295.12 000226 ENDIF
295.13 000226 ENDM
296 000226 B7440000 MOV @PSP+,0(TOS)
297 00022A 3744 MOV @PSP+,TOS
298 00022C NEXT
298.1 00022C 3645 MOV @IP+,W // ; fetch word address
into W
298.2 00022E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
298.3 000230 ENDM
299 000230
300 000230 ;C C@ c-addr -- char fetch char from
memory
301 000230 HEADER CFETCH,2,'C@',DOCODE
301.1 000000 PUBLIC CFETCH
301.2 000230 .... DW link
301.3 000232 FF DB 0FFh ; not immediate
301.4 000233 link SET $
301.5 000233 02 DB 2
301.6 000234 4340 DB 'C@'
301.7 000236 EVEN
301.8 000236 IF 'DOCODE'='DOCODE'
301.9 000236 .... CFETCH: DW $+2
301.10 000238 ELSE
301.11 000238 CFETCH: DW DOCODE
301.12 000238 ENDIF
301.13 000238 ENDM
302 000238 6747 MOV.B @TOS,TOS
303 00023A NEXT
303.1 00023A 3645 MOV @IP+,W // ; fetch word address
into W
303.2 00023C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
303.3 00023E ENDM
304 00023E
305 00023E ;C C! char c-addr -- store char in
memory
306 00023E HEADER CSTORE,2,'C!',DOCODE
306.1 000000 PUBLIC CSTORE
306.2 00023E .... DW link
306.3 000240 FF DB 0FFh ; not immediate
306.4 000241 link SET $
306.5 000241 02 DB 2
306.6 000242 4321 DB 'C!'
306.7 000244 EVEN
- 4e-core430G2553 - Page 44
306.8 000244 IF 'DOCODE'='DOCODE'
306.9 000244 .... CSTORE: DW $+2
306.10 000246 ELSE
306.11 000246 CSTORE: DW DOCODE
306.12 000246 ENDIF
306.13 000246 ENDM
307 000246 3644 MOV @PSP+,W
308 000248 C7460000 MOV.B W,0(TOS)
309 00024C 3744 MOV @PSP+,TOS
310 00024E NEXT
310.1 00024E 3645 MOV @IP+,W // ; fetch word address
into W
310.2 000250 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
310.3 000252 ENDM
311 000252
312 000252 ; FLASH MEMORY OPERATIONS
313 000252 ; Note that an I! or IC! to a RAM address
>FLASHSTART will work -- it
314 000252 ; will enable the flash, write the RAM, and then
disable the flash.
315 000252 ; An FLERASE to a RAM address will merely clear
that one RAM cell.
316 000252
317 000252 ;Z FLERASE a-addr n -- erase n bytes of
flash, full segment sizes.
318 000252 HEADER FLERASE,7,'FLERASE',DOCODE
318.1 000000 PUBLIC FLERASE
318.2 000252 .... DW link
318.3 000254 FF DB 0FFh ; not immediate
318.4 000255 link SET $
318.5 000255 07 DB 7
318.6 000256 464C45524153* DB 'FLERASE'
318.7 00025D 00 EVEN
318.8 00025E IF 'DOCODE'='DOCODE'
318.9 00025E .... FLERASE: DW $+2
318.10 000260 ELSE
318.11 000260 FLERASE: DW DOCODE
318.12 000260 ENDIF
318.13 000260 ENDM
319 000260 3644 MOV @PSP+,W ; get address in
W
320 000262 0756 ADD W,TOS ; TOS=end adrs
(first unerased
adrs)
321 000264 FLE_1:
322 000264 0697 CMP TOS,W ; adr-end
323 000266 2E2C JC FLE_X ; if no borrow,
adr>=end, do
not erase
324 000268 ; is it within Main flash?
325 000268 369000C0 CMP #USERFLASHSTART,W ; flash
start
326 00026C 0328 JNC FLE_VEC ; if borrow,
adrend, check
if vec
329 000274
330 000274 FLE_VEC
331 000274 ; danger!! only for MSPG2553 apps
332 000274 ; is it within interrupt vector
flash?
333 000274 369000FE CMP #ISRSTART,W ; flash
start
334 000278 0328 JNC FLE_INFO ; if borrow,
adrend, check
if Info
337 000280 ; /danger
- 4e-core430G2553 - Page 45
338 000280
339 000280 FLE_INFO: ; is it within Info flash?
340 000280 36900010 CMP #INFOSTART,W
341 000284 1F28 JNC FLE_X ; if borrow,
adrend, do not
erase
344 00028C FLE_OK: ; Address is either in Main flash, or in
Info flash.
345 00028C ; Segment Erase from flash.
346 00028C ; Assumes ACCVIE = NMIIE = OFIE = 0,
watchdog disabled.
347 00028C ; Per section 5.3.2 of MSP430 Family
User's Guide
348 00028C 0212 PUSH sr
349 00028E 32C2 DINT ; Disable
interrupts
350 000290 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
351 000296 B24002A52801 MOV #FWKEY+ERASE,&FCTL1 ; Enable segment
erase
352 00029C B6430000 MOV #-1,0(W) ; Dummy write in
segment to
erase
353 0002A0 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
erase
command.
354 0002A6 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Done, set
LOCK
355 0002AC ; EINT ; Enable
interrupts
356 0002AC 3241 POP sr
357 0002AE ; Advance flash pointer by 512 bytes or
128 bytes
358 0002AE ; is it within Main flash?
359 0002AE 369000C0 CMP #USERFLASHSTART,W
360 0002B2 0528 JNC FL_INFO ; if borrow,
adrend, must
be Info
363 0002BA 36508001 ADD #(MAINSEG-INFOSEG),W
364 0002BE 36508000 FL_INFO: ADD #INFOSEG,W
365 0002C2 D03F JMP FLE_1 ; continue till
past end or
outside
limits
366 0002C4 3744 FLE_X: MOV @PSP+,TOS
367 0002C6 NEXT
367.1 0002C6 3645 MOV @IP+,W // ; fetch word address
into W
367.2 0002C8 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
367.3 0002CA ENDM
368 0002CA
369 0002CA ; Program Space (Flash) operators
370 0002CA
371 0002CA ;Z I! x a-addr -- store cell in
Instruction memory
372 0002CA HEADER ISTORE,2,'I!',DOCODE
372.1 000000 PUBLIC ISTORE
372.2 0002CA .... DW link
372.3 0002CC FF DB 0FFh ; not immediate
372.4 0002CD link SET $
372.5 0002CD 02 DB 2
372.6 0002CE 4921 DB 'I!'
372.7 0002D0 EVEN
372.8 0002D0 IF 'DOCODE'='DOCODE'
372.9 0002D0 .... ISTORE: DW $+2
372.10 0002D2 ELSE
372.11 0002D2 ISTORE: DW DOCODE
372.12 0002D2 ENDIF
372.13 0002D2 ENDM
- 4e-core430G2553 - Page 46
373 0002D2 3644 MOV @PSP+,W ; get data to
write
374 0002D4 17B3 BIT #1,TOS
375 0002D6 1F20 JNZ IST_X ; if not even
address, do not
write
376 0002D8 2697 CMP @TOS,W
377 0002DA 1D24 JZ IST_X ; if memory is
desired value,
do not
write
378 0002DC ; is it within Main flash?
379 0002DC 379000C0 CMP #USERFLASHSTART,TOS
380 0002E0 0328 JNC IST_INFO ; if borrow,
adrend, check
if Info
383 0002E8 IST_INFO: ; is it within Info flash?
384 0002E8 37900010 CMP #INFOSTART,TOS
385 0002EC 0B28 JNC IST_RAM ; if borrow,
adrend, assume
it's RAM
388 0002F4 IST_OK: ; Address is either in Main flash, or in
Info flash.
389 0002F4 ; Byte/word write from flash.
390 0002F4 ; Assumes location to write is already
erased
391 0002F4 ; Assumes ACCVIE = NMIIE = OFIE = 0,
watchdog disabled.
392 0002F4 ; Per section 5.3.3 of MSP430 Family
User's Guide
393 0002F4 0212 PUSH sr
394 0002F6 32C2 DINT ; Disable
interrupts
395 0002F8 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
396 0002FE B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable
write
397 000304 IST_RAM: ; If RAM, jump here to write.
FCTL1,FCTL3,EINT are superfluous
398 000304 87460000 MOV W,0(TOS) ; Write word to
flash
location
399 000308 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
WRT.
400 00030E B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK
401 000314 ; EINT ; Enable
interrupts
402 000314 3241 POP sr
403 000316 3744 IST_X: MOV @PSP+,TOS ; pop new
TOS
404 000318 NEXT
404.1 000318 3645 MOV @IP+,W // ; fetch word address
into W
404.2 00031A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
404.3 00031C ENDM
405 00031C
406 00031C ;Z IC! x a-addr -- store char in
Instruction memory
407 00031C HEADER ICSTORE,3,'IC!',DOCODE
407.1 000000 PUBLIC ICSTORE
407.2 00031C .... DW link
407.3 00031E FF DB 0FFh ; not immediate
407.4 00031F link SET $
407.5 00031F 03 DB 3
407.6 000320 494321 DB 'IC!'
407.7 000323 00 EVEN
407.8 000324 IF 'DOCODE'='DOCODE'
- 4e-core430G2553 - Page 47
407.9 000324 .... ICSTORE: DW $+2
407.10 000326 ELSE
407.11 000326 ICSTORE: DW DOCODE
407.12 000326 ENDIF
407.13 000326 ENDM
408 000326 3644 MOV @PSP+,W ; get data to
write
409 000328 6697 CMP.B @TOS,W
410 00032A F527 JZ IST_X ; if memory is
desired value,
do not
write
411 00032C ; is it within Main flash?
412 00032C 379000C0 CMP #USERFLASHSTART,TOS
413 000330 0328 JNC ICST_INFO ; if borrow,
adrend, check
if Info
416 000338 ICST_INFO: ; is it within Info flash?
417 000338 37900010 CMP #INFOSTART,TOS
418 00033C 0B28 JNC ICST_RAM ; if borrow,
adrend, assume
it's RAM
421 000344 ICST_OK: ; Address is either in Main flash, or
in Info flash.
422 000344 ; Byte/word write from flash.
423 000344 ; Assumes location to write is already
erased
424 000344 ; Assumes ACCVIE = NMIIE = OFIE = 0,
watchdog disabled.
425 000344 ; Per section 5.3.3 of MSP430 Family
User's Guide
426 000344 0212 PUSH sr
427 000346 32C2 DINT ; Disable
interrupts
428 000348 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
429 00034E B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable
write
430 000354 ICST_RAM: ; If RAM, jump here to write.
FCTL1,FCTL3,EINT are superfluous
431 000354 C7460000 MOV.B W,0(TOS) ; Write byte to
flash
location
432 000358 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
WRT.
433 00035E B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK
434 000364 ; EINT ; Enable
interrupts
435 000364 3241 POP sr
436 000366 D73F JMP IST_X
437 000368
438 000368 /*
439 000368 ;Z I@ a-addr -- x fetch cell from
Instruction memory
440 000368 HEADER IFETCH,2,'I@',FETCH+2
441 000368
442 000368 ;Z IC@ a-addr -- x fetch char from
Instruction memory
443 000368 HEADER ICFETCH,3,'IC@',CFETCH+2
444 000368 */
445 000368 #define IFETCH FETCH
446 000368 #define ICFETCH CFETCH
447 000368
448 000368
449 000368
450 000368 ;Z D->I c-addr1 c-addr2 u -- move
Data->Code
451 000368 ; Block move from Data space to Code space.
- 4e-core430G2553 - Page 48
Flashable.
452 000368 ; For the MSP430, this uses a "smart" algorithm
that uses word writes,
453 000368 ; rather than byte writes, whenever possible.
Note that byte reads
454 000368 ; are used for the source, so it need not be
aligned.
455 000368 HEADER DTOI,4,'D->I',DOCODE
455.1 000000 PUBLIC DTOI
455.2 000368 .... DW link
455.3 00036A FF DB 0FFh ; not immediate
455.4 00036B link SET $
455.5 00036B 04 DB 4
455.6 00036C 442D3E49 DB 'D->I'
455.7 000370 EVEN
455.8 000370 IF 'DOCODE'='DOCODE'
455.9 000370 .... DTOI: DW $+2
455.10 000372 ELSE
455.11 000372 DTOI: DW DOCODE
455.12 000372 ENDIF
455.13 000372 ENDM
456 000372 3644 MOV @PSP+,W ; dest adrs
457 000374 3A44 MOV @PSP+,X ; src adrs
458 000376 0793 CMP #0,TOS
459 000378 2124 JZ DTOI_X
460 00037A DTOI_LOOP: ; Begin flash write sequence
461 00037A 0212 PUSH sr
462 00037C 32C2 DINT ; Disable
interrupts
463 00037E B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
464 000384 B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable
write
465 00038A ; If length is 1, or dest. address is
odd, do a byte write.
466 00038A ; Else, do a word write.
467 00038A 1793 CMP #1,TOS
468 00038C 0B24 JZ DTOI_BYTE
469 00038E 16B3 BIT #1,W
470 000390 0920 JNZ DTOI_BYTE
471 000392 7B4A DTOI_WORD: MOV.B @X+,Y ; get low byte
of word
472 000394 7C4A MOV.B @X+,Q ; get high byte
of word
473 000396 8C10 SWPB Q
474 000398 0BDC BIS Q,Y ; merge
bytes
475 00039A 864B0000 MOV.W Y,0(W) ; write byte to
dest
476 00039E 2653 ADD #2,W
477 0003A0 1783 SUB #1,TOS ; another 1 will
be subtracted
below
478 0003A2 033C JMP DTOI_END
479 0003A4 F64A0000 DTOI_BYTE: MOV.B @X+,0(W) ; copy byte from
src to
dest
480 0003A8 1653 ADD #1,W
481 0003AA DTOI_END: ; End flash write sequence
482 0003AA B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
WRT.
483 0003B0 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK
484 0003B6 ; EINT ; Enable
interrupts
485 0003B6 3241 POP sr
486 0003B8 1783 SUB #1,TOS
487 0003BA DF23 JNZ DTOI_LOOP
488 0003BC 3744 DTOI_X: MOV @PSP+,TOS ; pop new
TOS
489 0003BE NEXT
489.1 0003BE 3645 MOV @IP+,W // ; fetch word address
into W
489.2 0003C0 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
489.3 0003C2 ENDM
490 0003C2
491 0003C2 ; ----------------------------------------------
------------------------
- 4e-core430G2553 - Page 49
492 0003C2 ; ARITHMETIC OPERATIONS
493 0003C2
494 0003C2 ;C + n1/u1 n2/u2 -- n3/u3 add
n1+n2
495 0003C2 HEADER PLUS,1,'+',DOCODE
495.1 000000 PUBLIC PLUS
495.2 0003C2 .... DW link
495.3 0003C4 FF DB 0FFh ; not immediate
495.4 0003C5 link SET $
495.5 0003C5 01 DB 1
495.6 0003C6 2B DB '+'
495.7 0003C7 00 EVEN
495.8 0003C8 IF 'DOCODE'='DOCODE'
495.9 0003C8 .... PLUS: DW $+2
495.10 0003CA ELSE
495.11 0003CA PLUS: DW DOCODE
495.12 0003CA ENDIF
495.13 0003CA ENDM
496 0003CA 3754 ADD @PSP+,TOS
497 0003CC NEXT
497.1 0003CC 3645 MOV @IP+,W // ; fetch word address
into W
497.2 0003CE 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
497.3 0003D0 ENDM
498 0003D0
499 0003D0 ;C +! n/u a-addr -- add cell to
memory
500 0003D0 HEADER PLUSSTORE,2,'+!',DOCODE
500.1 000000 PUBLIC PLUSSTORE
500.2 0003D0 .... DW link
500.3 0003D2 FF DB 0FFh ; not immediate
500.4 0003D3 link SET $
500.5 0003D3 02 DB 2
500.6 0003D4 2B21 DB '+!'
500.7 0003D6 EVEN
500.8 0003D6 IF 'DOCODE'='DOCODE'
500.9 0003D6 .... PLUSSTORE: DW $+2
500.10 0003D8 ELSE
500.11 0003D8 PLUSSTORE: DW DOCODE
500.12 0003D8 ENDIF
500.13 0003D8 ENDM
501 0003D8 B7540000 ADD @PSP+,0(TOS)
502 0003DC 3744 MOV @PSP+,TOS
503 0003DE NEXT
503.1 0003DE 3645 MOV @IP+,W // ; fetch word address
into W
503.2 0003E0 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
503.3 0003E2 ENDM
504 0003E2
505 0003E2 ;X M+ d n -- d add single to
double
506 0003E2 HEADER MPLUS,2,'M+',DOCODE
506.1 000000 PUBLIC MPLUS
506.2 0003E2 .... DW link
506.3 0003E4 FF DB 0FFh ; not immediate
506.4 0003E5 link SET $
506.5 0003E5 02 DB 2
506.6 0003E6 4D2B DB 'M+'
506.7 0003E8 EVEN
506.8 0003E8 IF 'DOCODE'='DOCODE'
506.9 0003E8 .... MPLUS: DW $+2
506.10 0003EA ELSE
506.11 0003EA MPLUS: DW DOCODE
506.12 0003EA ENDIF
506.13 0003EA ENDM
507 0003EA 84570200 ADD TOS,2(PSP)
508 0003EE 84630000 ADDC #0,0(PSP)
509 0003F2 3744 MOV @PSP+,TOS
510 0003F4 NEXT
510.1 0003F4 3645 MOV @IP+,W // ; fetch word address
into W
510.2 0003F6 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
510.3 0003F8 ENDM
511 0003F8
512 0003F8 ;C - n1/u1 n2/u2 -- n3/u3 subtract
- 4e-core430G2553 - Page 50
n1-n2
513 0003F8 HEADER MINUS,1,'-',DOCODE
513.1 000000 PUBLIC MINUS
513.2 0003F8 .... DW link
513.3 0003FA FF DB 0FFh ; not immediate
513.4 0003FB link SET $
513.5 0003FB 01 DB 1
513.6 0003FC 2D DB '-'
513.7 0003FD 00 EVEN
513.8 0003FE IF 'DOCODE'='DOCODE'
513.9 0003FE .... MINUS: DW $+2
513.10 000400 ELSE
513.11 000400 MINUS: DW DOCODE
513.12 000400 ENDIF
513.13 000400 ENDM
514 000400 3644 MOV @PSP+,W
515 000402 0687 SUB TOS,W
516 000404 0746 MOV W,TOS
517 000406 NEXT
517.1 000406 3645 MOV @IP+,W // ; fetch word address
into W
517.2 000408 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
517.3 00040A ENDM
518 00040A
519 00040A ;C AND x1 x2 -- x3 logical
AND
520 00040A HEADER ANDD,3,'AND',DOCODE
520.1 000000 PUBLIC ANDD
520.2 00040A .... DW link
520.3 00040C FF DB 0FFh ; not immediate
520.4 00040D link SET $
520.5 00040D 03 DB 3
520.6 00040E 414E44 DB 'AND'
520.7 000411 00 EVEN
520.8 000412 IF 'DOCODE'='DOCODE'
520.9 000412 .... ANDD: DW $+2
520.10 000414 ELSE
520.11 000414 ANDD: DW DOCODE
520.12 000414 ENDIF
520.13 000414 ENDM
521 000414 37F4 AND @PSP+,TOS
522 000416 NEXT
522.1 000416 3645 MOV @IP+,W // ; fetch word address
into W
522.2 000418 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
522.3 00041A ENDM
523 00041A
524 00041A ;C OR x1 x2 -- x3 logical
OR
525 00041A HEADER ORR,2,'OR',DOCODE
525.1 000000 PUBLIC ORR
525.2 00041A .... DW link
525.3 00041C FF DB 0FFh ; not immediate
525.4 00041D link SET $
525.5 00041D 02 DB 2
525.6 00041E 4F52 DB 'OR'
525.7 000420 EVEN
525.8 000420 IF 'DOCODE'='DOCODE'
525.9 000420 .... ORR: DW $+2
525.10 000422 ELSE
525.11 000422 ORR: DW DOCODE
525.12 000422 ENDIF
525.13 000422 ENDM
526 000422 37D4 BIS @PSP+,TOS
527 000424 NEXT
527.1 000424 3645 MOV @IP+,W // ; fetch word address
into W
527.2 000426 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
527.3 000428 ENDM
528 000428
529 000428 ;C XOR x1 x2 -- x3 logical
XOR
530 000428 HEADER XORR,3,'XOR',DOCODE
530.1 000000 PUBLIC XORR
530.2 000428 .... DW link
- 4e-core430G2553 - Page 51
530.3 00042A FF DB 0FFh ; not immediate
530.4 00042B link SET $
530.5 00042B 03 DB 3
530.6 00042C 584F52 DB 'XOR'
530.7 00042F 00 EVEN
530.8 000430 IF 'DOCODE'='DOCODE'
530.9 000430 .... XORR: DW $+2
530.10 000432 ELSE
530.11 000432 XORR: DW DOCODE
530.12 000432 ENDIF
530.13 000432 ENDM
531 000432 37E4 XOR @PSP+,TOS
532 000434 NEXT
532.1 000434 3645 MOV @IP+,W // ; fetch word address
into W
532.2 000436 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
532.3 000438 ENDM
533 000438
534 000438 ;C INVERT x1 -- x2 bitwise
inversion
535 000438 HEADER INVERT,6,'INVERT',DOCODE
535.1 000000 PUBLIC INVERT
535.2 000438 .... DW link
535.3 00043A FF DB 0FFh ; not immediate
535.4 00043B link SET $
535.5 00043B 06 DB 6
535.6 00043C 494E56455254 DB 'INVERT'
535.7 000442 EVEN
535.8 000442 IF 'DOCODE'='DOCODE'
535.9 000442 .... INVERT: DW $+2
535.10 000444 ELSE
535.11 000444 INVERT: DW DOCODE
535.12 000444 ENDIF
535.13 000444 ENDM
536 000444 37E3 XOR #-1,TOS
537 000446 NEXT
537.1 000446 3645 MOV @IP+,W // ; fetch word address
into W
537.2 000448 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
537.3 00044A ENDM
538 00044A
539 00044A ;C NEGATE x1 -- x2 two's complement
540 00044A HEADER NEGATE,6,'NEGATE',DOCODE
540.1 000000 PUBLIC NEGATE
540.2 00044A .... DW link
540.3 00044C FF DB 0FFh ; not immediate
540.4 00044D link SET $
540.5 00044D 06 DB 6
540.6 00044E 4E4547415445 DB 'NEGATE'
540.7 000454 EVEN
540.8 000454 IF 'DOCODE'='DOCODE'
540.9 000454 .... NEGATE: DW $+2
540.10 000456 ELSE
540.11 000456 NEGATE: DW DOCODE
540.12 000456 ENDIF
540.13 000456 ENDM
541 000456 37E3 XOR #-1,TOS
542 000458 1753 ADD #1,TOS
543 00045A NEXT
543.1 00045A 3645 MOV @IP+,W // ; fetch word address
into W
543.2 00045C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
543.3 00045E ENDM
544 00045E
545 00045E ;C 1+ n1/u1 -- n2/u2 add 1 to
TOS
546 00045E HEADER ONEPLUS,2,'1+',DOCODE
546.1 000000 PUBLIC ONEPLUS
546.2 00045E .... DW link
546.3 000460 FF DB 0FFh ; not immediate
546.4 000461 link SET $
546.5 000461 02 DB 2
546.6 000462 312B DB '1+'
546.7 000464 EVEN
546.8 000464 IF 'DOCODE'='DOCODE'
- 4e-core430G2553 - Page 52
546.9 000464 .... ONEPLUS: DW $+2
546.10 000466 ELSE
546.11 000466 ONEPLUS: DW DOCODE
546.12 000466 ENDIF
546.13 000466 ENDM
547 000466 1753 ADD #1,TOS
548 000468 NEXT
548.1 000468 3645 MOV @IP+,W // ; fetch word address
into W
548.2 00046A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
548.3 00046C ENDM
549 00046C
550 00046C ;C 1- n1/u1 -- n2/u2 subtract 1 from
TOS
551 00046C HEADER ONEMINUS,2,'1-',DOCODE
551.1 000000 PUBLIC ONEMINUS
551.2 00046C .... DW link
551.3 00046E FF DB 0FFh ; not immediate
551.4 00046F link SET $
551.5 00046F 02 DB 2
551.6 000470 312D DB '1-'
551.7 000472 EVEN
551.8 000472 IF 'DOCODE'='DOCODE'
551.9 000472 .... ONEMINUS: DW $+2
551.10 000474 ELSE
551.11 000474 ONEMINUS: DW DOCODE
551.12 000474 ENDIF
551.13 000474 ENDM
552 000474 1783 SUB #1,TOS
553 000476 NEXT
553.1 000476 3645 MOV @IP+,W // ; fetch word address
into W
553.2 000478 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
553.3 00047A ENDM
554 00047A
555 00047A ;Z >< x1 -- x2 swap bytes (not
ANSI)
556 00047A HEADER SWAPBYTES,2,'><',DOCODE
556.1 000000 PUBLIC SWAPBYTES
556.2 00047A .... DW link
556.3 00047C FF DB 0FFh ; not immediate
556.4 00047D link SET $
556.5 00047D 02 DB 2
556.6 00047E 3E3C DB '><'
556.7 000480 EVEN
556.8 000480 IF 'DOCODE'='DOCODE'
556.9 000480 .... SWAPBYTES: DW $+2
556.10 000482 ELSE
556.11 000482 SWAPBYTES: DW DOCODE
556.12 000482 ENDIF
556.13 000482 ENDM
557 000482 8710 SWPB TOS
558 000484 NEXT
558.1 000484 3645 MOV @IP+,W // ; fetch word address
into W
558.2 000486 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
558.3 000488 ENDM
559 000488
560 000488 ;C 2* x1 -- x2 arithmetic left
shift
561 000488 HEADER TWOSTAR,2,'2*',DOCODE
561.1 000000 PUBLIC TWOSTAR
561.2 000488 .... DW link
561.3 00048A FF DB 0FFh ; not immediate
561.4 00048B link SET $
561.5 00048B 02 DB 2
561.6 00048C 322A DB '2*'
561.7 00048E EVEN
561.8 00048E IF 'DOCODE'='DOCODE'
561.9 00048E .... TWOSTAR: DW $+2
561.10 000490 ELSE
561.11 000490 TWOSTAR: DW DOCODE
561.12 000490 ENDIF
561.13 000490 ENDM
562 000490 0757 ADD TOS,TOS
- 4e-core430G2553 - Page 53
563 000492 NEXT
563.1 000492 3645 MOV @IP+,W // ; fetch word address
into W
563.2 000494 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
563.3 000496 ENDM
564 000496
565 000496 ;C 2/ x1 -- x2 arithmetic right
shift
566 000496 HEADER TWOSLASH,2,'2/',DOCODE
566.1 000000 PUBLIC TWOSLASH
566.2 000496 .... DW link
566.3 000498 FF DB 0FFh ; not immediate
566.4 000499 link SET $
566.5 000499 02 DB 2
566.6 00049A 322F DB '2/'
566.7 00049C EVEN
566.8 00049C IF 'DOCODE'='DOCODE'
566.9 00049C .... TWOSLASH: DW $+2
566.10 00049E ELSE
566.11 00049E TWOSLASH: DW DOCODE
566.12 00049E ENDIF
566.13 00049E ENDM
567 00049E 0711 RRA TOS
568 0004A0 NEXT
568.1 0004A0 3645 MOV @IP+,W // ; fetch word address
into W
568.2 0004A2 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
568.3 0004A4 ENDM
569 0004A4
570 0004A4 ;C LSHIFT x1 u -- x2 logical L shift u
places
571 0004A4 HEADER LSHIFT,6,'LSHIFT',DOCODE
571.1 000000 PUBLIC LSHIFT
571.2 0004A4 .... DW link
571.3 0004A6 FF DB 0FFh ; not immediate
571.4 0004A7 link SET $
571.5 0004A7 06 DB 6
571.6 0004A8 4C5348494654 DB 'LSHIFT'
571.7 0004AE EVEN
571.8 0004AE IF 'DOCODE'='DOCODE'
571.9 0004AE .... LSHIFT: DW $+2
571.10 0004B0 ELSE
571.11 0004B0 LSHIFT: DW DOCODE
571.12 0004B0 ENDIF
571.13 0004B0 ENDM
572 0004B0 3644 MOV @PSP+,W
573 0004B2 37F01F00 AND #1Fh,TOS ; no need to
shift more than
16
574 0004B6 0324 JZ LSH_X
575 0004B8 0656 LSH_1: ADD W,W
576 0004BA 1783 SUB #1,TOS
577 0004BC FD23 JNZ LSH_1
578 0004BE 0746 LSH_X: MOV W,TOS
579 0004C0 NEXT
579.1 0004C0 3645 MOV @IP+,W // ; fetch word address
into W
579.2 0004C2 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
579.3 0004C4 ENDM
580 0004C4
581 0004C4 ;C RSHIFT x1 u -- x2 logical R shift u
places
582 0004C4 HEADER RSHIFT,6,'RSHIFT',DOCODE
582.1 000000 PUBLIC RSHIFT
582.2 0004C4 .... DW link
582.3 0004C6 FF DB 0FFh ; not immediate
582.4 0004C7 link SET $
582.5 0004C7 06 DB 6
582.6 0004C8 525348494654 DB 'RSHIFT'
582.7 0004CE EVEN
582.8 0004CE IF 'DOCODE'='DOCODE'
582.9 0004CE .... RSHIFT: DW $+2
582.10 0004D0 ELSE
582.11 0004D0 RSHIFT: DW DOCODE
582.12 0004D0 ENDIF
- 4e-core430G2553 - Page 54
582.13 0004D0 ENDM
583 0004D0 3644 MOV @PSP+,W
584 0004D2 37F01F00 AND #1Fh,TOS ; no need to
shift more than
16
585 0004D6 0424 JZ RSH_X
586 0004D8 12C3 RSH_1: CLRC
587 0004DA 0610 RRC W
588 0004DC 1783 SUB #1,TOS
589 0004DE FC23 JNZ RSH_1
590 0004E0 0746 RSH_X: MOV W,TOS
591 0004E2 NEXT
591.1 0004E2 3645 MOV @IP+,W // ; fetch word address
into W
591.2 0004E4 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
591.3 0004E6 ENDM
592 0004E6
593 0004E6 ; ----------------------------------------------
------------------------
594 0004E6 ; COMPARISON OPERATIONS
595 0004E6
596 0004E6 ;C 0= n/u -- flag return true if
TOS=0
597 0004E6 HEADER ZEROEQUAL,2,'0=',DOCODE
597.1 000000 PUBLIC ZEROEQUAL
597.2 0004E6 .... DW link
597.3 0004E8 FF DB 0FFh ; not immediate
597.4 0004E9 link SET $
597.5 0004E9 02 DB 2
597.6 0004EA 303D DB '0='
597.7 0004EC EVEN
597.8 0004EC IF 'DOCODE'='DOCODE'
597.9 0004EC .... ZEROEQUAL: DW $+2
597.10 0004EE ELSE
597.11 0004EE ZEROEQUAL: DW DOCODE
597.12 0004EE ENDIF
597.13 0004EE ENDM
598 0004EE 1783 SUB #1,TOS ; borrow (clear cy)
if TOS was
0
599 0004F0 0777 SUBC TOS,TOS ; TOS=-1 if borrow
was set
600 0004F2 NEXT
600.1 0004F2 3645 MOV @IP+,W // ; fetch word address
into W
600.2 0004F4 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
600.3 0004F6 ENDM
601 0004F6
602 0004F6 ;C 0< n -- flag true if TOS negative
603 0004F6 HEADER ZEROLESS,2,'0<',DOCODE
603.1 000000 PUBLIC ZEROLESS
603.2 0004F6 .... DW link
603.3 0004F8 FF DB 0FFh ; not immediate
603.4 0004F9 link SET $
603.5 0004F9 02 DB 2
603.6 0004FA 303C DB '0<'
603.7 0004FC EVEN
603.8 0004FC IF 'DOCODE'='DOCODE'
603.9 0004FC .... ZEROLESS: DW $+2
603.10 0004FE ELSE
603.11 0004FE ZEROLESS: DW DOCODE
603.12 0004FE ENDIF
603.13 0004FE ENDM
604 0004FE 0757 ADD TOS,TOS ; set cy if TOS
negative
605 000500 0777 SUBC TOS,TOS ; TOS=-1 if carry
was clear
606 000502 37E3 XOR #-1,TOS ; TOS=-1 if carry
was set
607 000504 NEXT
607.1 000504 3645 MOV @IP+,W // ; fetch word address
into W
607.2 000506 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
607.3 000508 ENDM
608 000508
- 4e-core430G2553 - Page 55
609 000508 ;C = x1 x2 -- flag test x1=x2
610 000508 HEADER EQUAL,1,'=',DOCODE
610.1 000000 PUBLIC EQUAL
610.2 000508 .... DW link
610.3 00050A FF DB 0FFh ; not immediate
610.4 00050B link SET $
610.5 00050B 01 DB 1
610.6 00050C 3D DB '='
610.7 00050D 00 EVEN
610.8 00050E IF 'DOCODE'='DOCODE'
610.9 00050E .... EQUAL: DW $+2
610.10 000510 ELSE
610.11 000510 EQUAL: DW DOCODE
610.12 000510 ENDIF
610.13 000510 ENDM
611 000510 3644 MOV @PSP+,W
612 000512 0687 SUB TOS,W ; x1-x2 in W, flags
set
613 000514 1124 JZ TOSTRUE
614 000516 0743 TOSFALSE: MOV #0,TOS
615 000518 NEXT
615.1 000518 3645 MOV @IP+,W // ; fetch word address
into W
615.2 00051A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
615.3 00051C ENDM
616 00051C
617 00051C ;X <> x1 x2 -- flag test not eq (not
ANSI)
618 00051C HEADER NOTEQUAL,2,'<>',DOCOLON
618.1 000000 PUBLIC NOTEQUAL
618.2 00051C .... DW link
618.3 00051E FF DB 0FFh ; not immediate
618.4 00051F link SET $
618.5 00051F 02 DB 2
618.6 000520 3C3E DB '<>'
618.7 000522 EVEN
618.8 000522 IF 'DOCOLON'='DOCODE'
618.9 000522 NOTEQUAL: DW $+2
618.10 000522 ELSE
618.11 000522 .... NOTEQUAL: DW DOCOLON
618.12 000524 ENDIF
618.13 000524 ENDM
619 000524 ............ DW EQUAL,ZEROEQUAL,EXIT
620 00052A
621 00052A ;C < n1 n2 -- flag test n1 n1 n2 -- flag test n1>n2,
signed
630 00053E HEADER GREATER,1,'>',DOCOLON
630.1 000000 PUBLIC GREATER
630.2 00053E .... DW link
- 4e-core430G2553 - Page 56
630.3 000540 FF DB 0FFh ; not immediate
630.4 000541 link SET $
630.5 000541 01 DB 1
630.6 000542 3E DB '>'
630.7 000543 00 EVEN
630.8 000544 IF 'DOCOLON'='DOCODE'
630.9 000544 GREATER: DW $+2
630.10 000544 ELSE
630.11 000544 .... GREATER: DW DOCOLON
630.12 000546 ENDIF
630.13 000546 ENDM
631 000546 ............ DW SWAP,LESS,EXIT
632 00054C
633 00054C ;C U< u1 u2 -- flag test u1 u1 u2 -- flag u1>u2 unsgd (not
ANSI)
641 00055C HEADER UGREATER,2,'U>',DOCOLON
641.1 000000 PUBLIC UGREATER
641.2 00055C .... DW link
641.3 00055E FF DB 0FFh ; not immediate
641.4 00055F link SET $
641.5 00055F 02 DB 2
641.6 000560 553E DB 'U>'
641.7 000562 EVEN
641.8 000562 IF 'DOCOLON'='DOCODE'
641.9 000562 UGREATER: DW $+2
641.10 000562 ELSE
641.11 000562 .... UGREATER: DW DOCOLON
641.12 000564 ENDIF
641.13 000564 ENDM
642 000564 ............ DW SWAP,ULESS,EXIT
643 00056A
644 00056A ;C RLA n1 -- n2 f rotate left through
carry, true if carry set
645 00056A HEADER RLAA,3,'RLA',DOCODE
645.1 000000 PUBLIC RLAA
645.2 00056A .... DW link
645.3 00056C FF DB 0FFh ; not immediate
645.4 00056D link SET $
645.5 00056D 03 DB 3
645.6 00056E 524C41 DB 'RLA'
645.7 000571 00 EVEN
645.8 000572 IF 'DOCODE'='DOCODE'
645.9 000572 .... RLAA: DW $+2
645.10 000574 ELSE
645.11 000574 RLAA: DW DOCODE
645.12 000574 ENDIF
645.13 000574 ENDM
646 000574 0757 RLA TOS ; shift left
647 000576 0212 PUSH SR
648 000578 2483 SUB #2,PSP ; 1 push old TOS..
649 00057A 84470000 MOV TOS,0(PSP) ; 4 ..onto
stack
650 00057E 3241 POP SR
651 000580 DB2F JC TOSTRUE
652 000582 C93F JMP TOSFALSE
653 000584
- 4e-core430G2553 - Page 57
654 000584
655 000584
656 000584 ; ----------------------------------------------
------------------------
657 000584 ; LOOP AND BRANCH OPERATIONS
658 000584 ; These use relative branch addresses: a branch
is ADD @IP,IP
659 000584
660 000584 ;Z branch -- branch
always
661 000584 HEADER bran,6,'branch',DOCODE
661.1 000000 PUBLIC bran
661.2 000584 .... DW link
661.3 000586 FF DB 0FFh ; not immediate
661.4 000587 link SET $
661.5 000587 06 DB 6
661.6 000588 6272616E6368 DB 'branch'
661.7 00058E EVEN
661.8 00058E IF 'DOCODE'='DOCODE'
661.9 00058E .... bran: DW $+2
661.10 000590 ELSE
661.11 000590 bran: DW DOCODE
661.12 000590 ENDIF
661.13 000590 ENDM
662 000590 2555 dobran: ADD @IP,IP ; 2
663 000592 NEXT ; 4
663.1 000592 3645 MOV @IP+,W // ; fetch word address
into W
663.2 000594 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
663.3 000596 ENDM
664 000596
665 000596 ;Z ?branch x -- branch if TOS
zero
666 000596 HEADER qbran,7,'?branch',DOCODE
666.1 000000 PUBLIC qbran
666.2 000596 .... DW link
666.3 000598 FF DB 0FFh ; not immediate
666.4 000599 link SET $
666.5 000599 07 DB 7
666.6 00059A 3F6272616E63* DB '?branch'
666.7 0005A1 00 EVEN
666.8 0005A2 IF 'DOCODE'='DOCODE'
666.9 0005A2 .... qbran: DW $+2
666.10 0005A4 ELSE
666.11 0005A4 qbran: DW DOCODE
666.12 0005A4 ENDIF
666.13 0005A4 ENDM
667 0005A4 0753 ADD #0,TOS ; 1 test TOS value
668 0005A6 3744 MOV @PSP+,TOS ; 2 pop new TOS value
(doesn't change
flags)
669 0005A8 F327 JZ dobran ; 2 if TOS was zero, take
the branch
670 0005AA 2553 ADD #2,IP ; 1 else skip the
branch destination
671 0005AC NEXT ; 4
671.1 0005AC 3645 MOV @IP+,W // ; fetch word address
into W
671.2 0005AE 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
671.3 0005B0 ENDM
672 0005B0
673 0005B0 ;Z (do) n1|u1 n2|u2 -- R: -- sys1 sys2
run-time code for DO
674 0005B0 ; '83 and ANSI standard loops terminate when the
boundary of
675 0005B0 ; limit-1 and limit is crossed, in either
direction. This can
676 0005B0 ; be conveniently implemented by making the
limit 8000h, so that
677 0005B0 ; arithmetic overflow logic can detect crossing.
I learned this
678 0005B0 ; trick from Laxen & Perry F83.
679 0005B0 ; fudge factor = 8000h-limit, to be added to the
start value.
680 0005B0 HEADER xdo,4,'(do)',DOCODE
680.1 000000 PUBLIC xdo
- 4e-core430G2553 - Page 58
680.2 0005B0 .... DW link
680.3 0005B2 FF DB 0FFh ; not immediate
680.4 0005B3 link SET $
680.5 0005B3 04 DB 4
680.6 0005B4 28646F29 DB '(do)'
680.7 0005B8 EVEN
680.8 0005B8 IF 'DOCODE'='DOCODE'
680.9 0005B8 .... xdo: DW $+2
680.10 0005BA ELSE
680.11 0005BA xdo: DW DOCODE
680.12 0005BA ENDIF
680.13 0005BA ENDM
681 0005BA 2182 SUB #4,RSP ; push old loop
values on
return
stack
682 0005BC 81490200 MOV LIMIT,2(RSP)
683 0005C0 81480000 MOV INDEX,0(RSP)
684 0005C4 39400080 MOV #8000h,LIMIT ; compute
8000h-limit
"fudge
factor"
685 0005C8 3984 SUB @PSP+,LIMIT
686 0005CA 0847 MOV TOS,INDEX ; loop ctr =
index+fudge
687 0005CC 0859 ADD LIMIT,INDEX
688 0005CE 3744 MOV @PSP+,TOS ; pop new
TOS
689 0005D0 NEXT
689.1 0005D0 3645 MOV @IP+,W // ; fetch word address
into W
689.2 0005D2 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
689.3 0005D4 ENDM
690 0005D4
691 0005D4 ;Z (loop) R: sys1 sys2 -- | sys1 sys2
run-time code for LOOP
692 0005D4 ; Add 1 to the loop index. If loop terminates,
clean up the
693 0005D4 ; return stack and skip the branch. Else take
the inline branch.
694 0005D4 ; Note that LOOP terminates when index=8000h.
695 0005D4 HEADER xloop,6,'(loop)',DOCODE
695.1 000000 PUBLIC xloop
695.2 0005D4 .... DW link
695.3 0005D6 FF DB 0FFh ; not immediate
695.4 0005D7 link SET $
695.5 0005D7 06 DB 6
695.6 0005D8 286C6F6F7029 DB '(loop)'
695.7 0005DE EVEN
695.8 0005DE IF 'DOCODE'='DOCODE'
695.9 0005DE .... xloop: DW $+2
695.10 0005E0 ELSE
695.11 0005E0 xloop: DW DOCODE
695.12 0005E0 ENDIF
695.13 0005E0 ENDM
696 0005E0 1853 ADD #1,INDEX
697 0005E2 32B00001 BIT #100h,SR ; is overflow bit
set?
698 0005E6 D427 JZ dobran ; no overflow =
loop
699 0005E8 2553 ADD #2,IP ; overflow = loop
done, skip branch
ofs
700 0005EA 3841 MOV @RSP+,INDEX ; restore old loop
values
701 0005EC 3941 MOV @RSP+,LIMIT
702 0005EE NEXT
702.1 0005EE 3645 MOV @IP+,W // ; fetch word address
into W
702.2 0005F0 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
702.3 0005F2 ENDM
703 0005F2
704 0005F2 ;Z (+loop) n -- R: sys1 sys2 -- | sys1 sys2
run-time code for +LOOP
705 0005F2 ; Add n to the loop index. If loop terminates,
clean up the
- 4e-core430G2553 - Page 59
706 0005F2 ; return stack and skip the branch. Else take
the inline branch.
707 0005F2 HEADER xplusloop,7,'(+loop)',DOCODE
707.1 000000 PUBLIC xplusloop
707.2 0005F2 .... DW link
707.3 0005F4 FF DB 0FFh ; not immediate
707.4 0005F5 link SET $
707.5 0005F5 07 DB 7
707.6 0005F6 282B6C6F6F70* DB '(+loop)'
707.7 0005FD 00 EVEN
707.8 0005FE IF 'DOCODE'='DOCODE'
707.9 0005FE .... xplusloop: DW $+2
707.10 000600 ELSE
707.11 000600 xplusloop: DW DOCODE
707.12 000600 ENDIF
707.13 000600 ENDM
708 000600 0857 ADD TOS,INDEX
709 000602 3744 MOV @PSP+,TOS ; get new TOS,
doesn't change
flags
710 000604 32B00001 BIT #100h,SR ; is overflow bit
set?
711 000608 C327 JZ dobran ; no overflow =
loop
712 00060A 2553 ADD #2,IP ; overflow = loop
done, skip branch
ofs
713 00060C 3841 MOV @RSP+,INDEX ; restore old loop
values
714 00060E 3941 MOV @RSP+,LIMIT
715 000610 NEXT
715.1 000610 3645 MOV @IP+,W // ; fetch word address
into W
715.2 000612 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
715.3 000614 ENDM
716 000614
717 000614 ;C I -- n R: sys1 sys2 -- sys1 sys2
get the innermost loop index
718 000614 HEADER II,1,'I',DOCODE
718.1 000000 PUBLIC II
718.2 000614 .... DW link
718.3 000616 FF DB 0FFh ; not immediate
718.4 000617 link SET $
718.5 000617 01 DB 1
718.6 000618 49 DB 'I'
718.7 000619 00 EVEN
718.8 00061A IF 'DOCODE'='DOCODE'
718.9 00061A .... II: DW $+2
718.10 00061C ELSE
718.11 00061C II: DW DOCODE
718.12 00061C ENDIF
718.13 00061C ENDM
719 00061C 2483 SUB #2,PSP ; make room in
TOS
720 00061E 84470000 MOV TOS,0(PSP)
721 000622 0748 MOV INDEX,TOS ; index =
loopctr -
fudge
722 000624 0789 SUB LIMIT,TOS
723 000626 NEXT
723.1 000626 3645 MOV @IP+,W // ; fetch word address
into W
723.2 000628 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
723.3 00062A ENDM
724 00062A
725 00062A ;C J -- n R: 4*sys -- 4*sys
get the second loop index
726 00062A HEADER JJ,1,'J',DOCODE
726.1 000000 PUBLIC JJ
726.2 00062A .... DW link
726.3 00062C FF DB 0FFh ; not immediate
726.4 00062D link SET $
726.5 00062D 01 DB 1
726.6 00062E 4A DB 'J'
726.7 00062F 00 EVEN
726.8 000630 IF 'DOCODE'='DOCODE'
- 4e-core430G2553 - Page 60
726.9 000630 .... JJ: DW $+2
726.10 000632 ELSE
726.11 000632 JJ: DW DOCODE
726.12 000632 ENDIF
726.13 000632 ENDM
727 000632 2483 SUB #2,PSP ; make room in
TOS
728 000634 84470000 MOV TOS,0(PSP)
729 000638 2741 MOV @RSP,TOS ; index =
loopctr -
fudge
730 00063A 17810200 SUB 2(RSP),TOS
731 00063E NEXT
731.1 00063E 3645 MOV @IP+,W // ; fetch word address
into W
731.2 000640 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
731.3 000642 ENDM
732 000642
733 000642 ;C UNLOOP -- R: sys1 sys2 --
drop loop parms
734 000642 HEADER UNLOOP,6,'UNLOOP',DOCODE
734.1 000000 PUBLIC UNLOOP
734.2 000642 .... DW link
734.3 000644 FF DB 0FFh ; not immediate
734.4 000645 link SET $
734.5 000645 06 DB 6
734.6 000646 554E4C4F4F50 DB 'UNLOOP'
734.7 00064C EVEN
734.8 00064C IF 'DOCODE'='DOCODE'
734.9 00064C .... UNLOOP: DW $+2
734.10 00064E ELSE
734.11 00064E UNLOOP: DW DOCODE
734.12 00064E ENDIF
734.13 00064E ENDM
735 00064E 3841 MOV @RSP+,INDEX ; restore old
loop values
736 000650 3941 MOV @RSP+,LIMIT
737 000652 NEXT
737.1 000652 3645 MOV @IP+,W // ; fetch word address
into W
737.2 000654 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
737.3 000656 ENDM
738 000656
739 000656 ; ----------------------------------------------
------------------------
740 000656 ; MULTIPLY AND DIVIDE
741 000656
742 000656 ;C UM* u1 u2 -- ud unsigned 16x16->32
mult.
743 000656 HEADER UMSTAR,3,'UM*',DOCODE
743.1 000000 PUBLIC UMSTAR
743.2 000656 .... DW link
743.3 000658 FF DB 0FFh ; not immediate
743.4 000659 link SET $
743.5 000659 03 DB 3
743.6 00065A 554D2A DB 'UM*'
743.7 00065D 00 EVEN
743.8 00065E IF 'DOCODE'='DOCODE'
743.9 00065E .... UMSTAR: DW $+2
743.10 000660 ELSE
743.11 000660 UMSTAR: DW DOCODE
743.12 000660 ENDIF
743.13 000660 ENDM
744 000660 ; IROP1 = TOS register
745 000660 2A44 MOV @PSP,IROP2L ; get u1, leave
room on
stack
746 000662 ;
747 000662 ; T.I. SIGNED MULTIPLY SUBROUTINE: IROP1 x
IROP2L -> IRACM|IRACL
748 000662 0C43 MPYU: CLR IRACL ; 0 -> LSBs RESULT
749 000664 0D43 CLR IRACM ; 0 -> MSBs RESULT
750 000666 ; UNSIGNED MULTIPLY AND ACCUMULATE SUBROUTINE:
751 000666 ; (IROP1 x IROP2L) + IRACM|IRACL -> IRACM|IRACL
752 000666 0B43 MACU: CLR IROP2M ; MSBs MULTIPLIER
753 000668 1643 MOV #1,IRBT ; BIT TEST REGISTER
- 4e-core430G2553 - Page 61
754 00066A 07B6 L$002: BIT IRBT,IROP1 ; TEST ACTUAL BIT
755 00066C 0224 JZ L$01 ; IF 0: DO NOTHING
756 00066E 0C5A ADD IROP2L,IRACL ; IF 1: ADD MULTIPLIER
TO RESULT
757 000670 0D6B ADDC IROP2M,IRACM
758 000672 0A5A L$01: RLA IROP2L ; MULTIPLIER x 2
759 000674 0B6B RLC IROP2M
760 000676 ;
761 000676 0656 RLA IRBT ; NEXT BIT TO TEST
762 000678 F82B JNC L$002 ; IF BIT IN CARRY:
FINISHED
763 00067A ; END T.I. ROUTINE section 5.1.1 of MSP430
Family Application Reports
764 00067A 844C0000 MOV IRACL,0(PSP) ; low result on
stack
765 00067E 074D MOV IRACM,TOS ; high result in
TOS
766 000680 NEXT
766.1 000680 3645 MOV @IP+,W // ; fetch word address
into W
766.2 000682 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
766.3 000684 ENDM
767 000684
768 000684 ;C UM/MOD ud u1 -- u2 u3 unsigned 32/16->16
769 000684 HEADER UMSLASHMOD,6,'UM/MOD',DOCODE
769.1 000000 PUBLIC UMSLASHMOD
769.2 000684 .... DW link
769.3 000686 FF DB 0FFh ; not immediate
769.4 000687 link SET $
769.5 000687 06 DB 6
769.6 000688 554D2F4D4F44 DB 'UM/MOD'
769.7 00068E EVEN
769.8 00068E IF 'DOCODE'='DOCODE'
769.9 00068E .... UMSLASHMOD: DW $+2
769.10 000690 ELSE
769.11 000690 UMSLASHMOD: DW DOCODE
769.12 000690 ENDIF
769.13 000690 ENDM
770 000690 ; IROP1 = TOS register
771 000690 3B44 MOV @PSP+,IROP2M ; get ud
hi
772 000692 2A44 MOV @PSP,IROP2L ; get ud lo,
leave room on
stack
773 000694 ;
774 000694 ; T.I. UNSIGNED DIVISION SUBROUTINE 32-BIT BY
16-BIT
775 000694 ; IROP2M|IROP2L : IROP1 -> IRACL REMAINDER IN
IROP2M
776 000694 ; RETURN: CARRY = 0: OK CARRY = 1: QUOTIENT > 16
BITS
777 000694 0C43 DIVIDE: CLR IRACL ; CLEAR RESULT
778 000696 36401100 MOV #17,IRBT ; INITIALIZE LOOP
COUNTER
779 00069A 0B97 DIV1: CMP IROP1,IROP2M ;
780 00069C 0128 JLO DIV2
781 00069E 0B87 SUB IROP1,IROP2M
782 0006A0 0C6C DIV2: RLC IRACL
783 0006A2 092C JC DIV4 ; Error: result > 16
bits
784 0006A4 1683 DEC IRBT ; Decrement loop counter
785 0006A6 0624 JZ DIV3 ; Is 0: terminate w/o
error
786 0006A8 0A5A RLA IROP2L
787 0006AA 0B6B RLC IROP2M
788 0006AC F62B JNC DIV1
789 0006AE 0B87 SUB IROP1,IROP2M
790 0006B0 12D3 SETC
791 0006B2 F63F JMP DIV2
792 0006B4 12C3 DIV3: CLRC ; No error, C = 0
793 0006B6 DIV4: ; Error indication in C
794 0006B6 ; END T.I. ROUTINE Section 5.1.5 of MSP430
Family Application Reports
795 0006B6 844B0000 MOV IROP2M,0(PSP) ; remainder on
stack
796 0006BA 074C MOV IRACL,TOS ; quotient in
TOS
- 4e-core430G2553 - Page 62
797 0006BC NEXT
797.1 0006BC 3645 MOV @IP+,W // ; fetch word address
into W
797.2 0006BE 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
797.3 0006C0 ENDM
798 0006C0
799 0006C0 ; ----------------------------------------------
------------------------
800 0006C0 ; BLOCK AND STRING OPERATIONS
801 0006C0
802 0006C0 ;C FILL c-addr u char -- fill memory with
char
803 0006C0 HEADER FILL,4,'FILL',DOCODE
803.1 000000 PUBLIC FILL
803.2 0006C0 .... DW link
803.3 0006C2 FF DB 0FFh ; not immediate
803.4 0006C3 link SET $
803.5 0006C3 04 DB 4
803.6 0006C4 46494C4C DB 'FILL'
803.7 0006C8 EVEN
803.8 0006C8 IF 'DOCODE'='DOCODE'
803.9 0006C8 .... FILL: DW $+2
803.10 0006CA ELSE
803.11 0006CA FILL: DW DOCODE
803.12 0006CA ENDIF
803.13 0006CA ENDM
804 0006CA 3A44 MOV @PSP+,X ; count
805 0006CC 3644 MOV @PSP+,W ; address
806 0006CE 0A93 CMP #0,X
807 0006D0 0524 JZ FILL_X
808 0006D2 C6470000 FILL_1: MOV.B TOS,0(W) ; store char in
memory
809 0006D6 1653 ADD #1,W
810 0006D8 1A83 SUB #1,X
811 0006DA FB23 JNZ FILL_1
812 0006DC 3744 FILL_X: MOV @PSP+,TOS ; pop new TOS
813 0006DE NEXT
813.1 0006DE 3645 MOV @IP+,W // ; fetch word address
into W
813.2 0006E0 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
813.3 0006E2 ENDM
814 0006E2
815 0006E2 ;X CMOVE c-addr1 c-addr2 u -- move from
bottom
816 0006E2 ; as defined in the ANSI optional String word
set
817 0006E2 ; On byte machines, CMOVE and CMOVE> are
logical
818 0006E2 ; factors of MOVE. They are easy to implement
on
819 0006E2 ; CPUs which have a block-move instruction.
820 0006E2 HEADER CMOVE,5,'CMOVE',DOCODE
820.1 000000 PUBLIC CMOVE
820.2 0006E2 .... DW link
820.3 0006E4 FF DB 0FFh ; not immediate
820.4 0006E5 link SET $
820.5 0006E5 05 DB 5
820.6 0006E6 434D4F5645 DB 'CMOVE'
820.7 0006EB 00 EVEN
820.8 0006EC IF 'DOCODE'='DOCODE'
820.9 0006EC .... CMOVE: DW $+2
820.10 0006EE ELSE
820.11 0006EE CMOVE: DW DOCODE
820.12 0006EE ENDIF
820.13 0006EE ENDM
821 0006EE 3644 MOV @PSP+,W ; dest adrs
822 0006F0 3A44 MOV @PSP+,X ; src adrs
823 0006F2 0793 CMP #0,TOS
824 0006F4 0524 JZ CMOVE_X
825 0006F6 F64A0000 CMOVE_1: MOV.B @X+,0(W) ; copy byte
826 0006FA 1653 ADD #1,W
827 0006FC 1783 SUB #1,TOS
828 0006FE FB23 JNZ CMOVE_1
829 000700 3744 CMOVE_X: MOV @PSP+,TOS ; pop new TOS
830 000702 NEXT
830.1 000702 3645 MOV @IP+,W // ; fetch word address
- 4e-core430G2553 - Page 63
into W
830.2 000704 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
830.3 000706 ENDM
831 000706
832 000706 ;X CMOVE> c-addr1 c-addr2 u -- move from
top
833 000706 ; as defined in the ANSI optional String word
set
834 000706 HEADER CMOVEUP,6,'CMOVE>',DOCODE
834.1 000000 PUBLIC CMOVEUP
834.2 000706 .... DW link
834.3 000708 FF DB 0FFh ; not immediate
834.4 000709 link SET $
834.5 000709 06 DB 6
834.6 00070A 434D4F56453E DB 'CMOVE>'
834.7 000710 EVEN
834.8 000710 IF 'DOCODE'='DOCODE'
834.9 000710 .... CMOVEUP: DW $+2
834.10 000712 ELSE
834.11 000712 CMOVEUP: DW DOCODE
834.12 000712 ENDIF
834.13 000712 ENDM
835 000712 3644 MOV @PSP+,W ; dest adrs
836 000714 3A44 MOV @PSP+,X ; src adrs
837 000716 0793 CMP #0,TOS
838 000718 0824 JZ CMOVU_X
839 00071A 0657 ADD TOS,W ; start at
end
840 00071C 0A57 ADD TOS,X
841 00071E 1A83 CMOVU_1: SUB #1,X
842 000720 1683 SUB #1,W
843 000722 E64A0000 MOV.B @X,0(W) ; copy byte
844 000726 1783 SUB #1,TOS
845 000728 FA23 JNZ CMOVU_1
846 00072A 3744 CMOVU_X: MOV @PSP+,TOS ; pop new TOS
847 00072C NEXT
847.1 00072C 3645 MOV @IP+,W // ; fetch word address
into W
847.2 00072E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
847.3 000730 ENDM
848 000730
849 000730 ;Z I->D c-addr1 c-addr2 u -- move
Code->Data
850 000730 ; Block move from Code space to Data space.
851 000730 ; On the MSP430, this is the same as CMOVE.
852 000730 HEADER ITOD,4,'I->D',CMOVE+2
852.1 000000 PUBLIC ITOD
852.2 000730 .... DW link
852.3 000732 FF DB 0FFh ; not immediate
852.4 000733 link SET $
852.5 000733 04 DB 4
852.6 000734 492D3E44 DB 'I->D'
852.7 000738 EVEN
852.8 000738 IF 'CMOVE+2'='DOCODE'
852.9 000738 ITOD: DW $+2
852.10 000738 ELSE
852.11 000738 .... ITOD: DW CMOVE+2
852.12 00073A ENDIF
852.13 00073A ENDM
853 00073A
854 00073A ;Z SKIP c-addr u c -- c-addr' u'
skip matching chars
855 00073A ; Although SKIP, SCAN, and S= are perhaps not
the ideal factors
856 00073A ; of WORD and FIND, they closely follow the
string operations
857 00073A ; available on many CPUs, and so are easy to
implement and fast.
858 00073A HEADER SKIP,4,'SKIP',DOCODE
858.1 000000 PUBLIC SKIP
858.2 00073A .... DW link
858.3 00073C FF DB 0FFh ; not immediate
858.4 00073D link SET $
858.5 00073D 04 DB 4
858.6 00073E 534B4950 DB 'SKIP'
858.7 000742 EVEN
- 4e-core430G2553 - Page 64
858.8 000742 IF 'DOCODE'='DOCODE'
858.9 000742 .... SKIP: DW $+2
858.10 000744 ELSE
858.11 000744 SKIP: DW DOCODE
858.12 000744 ENDIF
858.13 000744 ENDM
859 000744 3A44 MOV @PSP+,X ; get count
860 000746 2644 MOV @PSP,W ; get address, leave
space on stack
861 000748 0A93 CMP #0,X
862 00074A 0524 JZ SKIP_X
863 00074C 6796 SKIP_1: CMP.B @W,TOS ; does character
match?
864 00074E 0320 JNZ SKIP_X ; no, we are
done
865 000750 1653 ADD #1,W
866 000752 1A83 SUB #1,X
867 000754 FB23 JNZ SKIP_1
868 000756 84460000 SKIP_X: MOV W,0(PSP) ; store updated
address on
stack
869 00075A 074A MOV X,TOS ; updated count to
TOS
870 00075C NEXT
870.1 00075C 3645 MOV @IP+,W // ; fetch word address
into W
870.2 00075E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
870.3 000760 ENDM
871 000760
872 000760 ;Z SCAN c-addr u c -- c-addr' u'
find matching char
873 000760 HEADER SCAN,4,'SCAN',DOCODE
873.1 000000 PUBLIC SCAN
873.2 000760 .... DW link
873.3 000762 FF DB 0FFh ; not immediate
873.4 000763 link SET $
873.5 000763 04 DB 4
873.6 000764 5343414E DB 'SCAN'
873.7 000768 EVEN
873.8 000768 IF 'DOCODE'='DOCODE'
873.9 000768 .... SCAN: DW $+2
873.10 00076A ELSE
873.11 00076A SCAN: DW DOCODE
873.12 00076A ENDIF
873.13 00076A ENDM
874 00076A 3A44 MOV @PSP+,X ; get count
875 00076C 2644 MOV @PSP,W ; get address, leave
space on stack
876 00076E 0A93 CMP #0,X
877 000770 0524 JZ SCAN_X
878 000772 6796 SCAN_1: CMP.B @W,TOS ; does character
match?
879 000774 0324 JZ SCAN_X ; yes, we are
done
880 000776 1653 ADD #1,W
881 000778 1A83 SUB #1,X
882 00077A FB23 JNZ SCAN_1
883 00077C 84460000 SCAN_X: MOV W,0(PSP) ; store updated
address on
stack
884 000780 074A MOV X,TOS ; updated count to
TOS
885 000782 NEXT
885.1 000782 3645 MOV @IP+,W // ; fetch word address
into W
885.2 000784 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
885.3 000786 ENDM
886 000786
887 000786 ;Z S= c-addr1 c-addr2 u -- n string
compare
888 000786 ;Z S= n<0: s10: s1>s2
889 000786 HEADER SEQUAL,2,'S=',DOCODE
889.1 000000 PUBLIC SEQUAL
889.2 000786 .... DW link
889.3 000788 FF DB 0FFh ; not immediate
889.4 000789 link SET $
- 4e-core430G2553 - Page 65
889.5 000789 02 DB 2
889.6 00078A 533D DB 'S='
889.7 00078C EVEN
889.8 00078C IF 'DOCODE'='DOCODE'
889.9 00078C .... SEQUAL: DW $+2
889.10 00078E ELSE
889.11 00078E SEQUAL: DW DOCODE
889.12 00078E ENDIF
889.13 00078E ENDM
890 00078E 3644 MOV @PSP+,W ; adrs2
891 000790 3A44 MOV @PSP+,X ; adrs1
892 000792 0793 CMP #0,TOS
893 000794 0A24 JZ SEQU_X
894 000796 FA960000 SEQU_1: CMP.B @W+,0(X) ; compare char1-char
2
895 00079A 0420 JNZ SMISMATCH
896 00079C 1A53 ADD #1,X
897 00079E 1783 SUB #1,TOS
898 0007A0 FA23 JNZ SEQU_1
899 0007A2 ; no mismatch found, strings are equal,
TOS=0
900 0007A2 033C JMP SEQU_X
901 0007A4 ; mismatch found, CY clear if borrow set
(s10: s1>s2
909 0007AE ; For Harvard model, c-addr1 is Data, c-addr2 is
Header.
910 0007AE ; On MSP430, both use the same fetch instruction
, so N= is the same as S=.
911 0007AE HEADER NEQUAL,2,'N=',SEQUAL+2
911.1 000000 PUBLIC NEQUAL
911.2 0007AE .... DW link
911.3 0007B0 FF DB 0FFh ; not immediate
911.4 0007B1 link SET $
911.5 0007B1 02 DB 2
911.6 0007B2 4E3D DB 'N='
911.7 0007B4 EVEN
911.8 0007B4 IF 'SEQUAL+2'='DOCODE'
911.9 0007B4 NEQUAL: DW $+2
911.10 0007B4 ELSE
911.11 0007B4 .... NEQUAL: DW SEQUAL+2
911.12 0007B6 ENDIF
911.13 0007B6 ENDM
912 0007B6
913 0007B6 ; ----------------------------------------------
------------------------
914 0007B6 ; TERMINAL I/O
915 0007B6
916 000000 PUBLIC DOKEY,DOEMIT
917 0007B6
918 0007B6 /*
919 0007B6 ;C EMIT c -- output character to console;
core routine
920 0007B6 HEADER EMIT,4,'EMIT',DOCODE
921 0007B6 EMITLOOP:
922 0007B6 BIT.B #UCA0TXIFG,&IFG2
923 0007B6 JZ EMITLOOP
924 0007B6 MOV.B TOS,&UCA0TXBUF
925 0007B6 MOV @PSP+,TOS
926 0007B6 NEXT
927 0007B6
928 0007B6 ;C KEY -- c get character from
- 4e-core430G2553 - Page 66
keyboard; core routine
929 0007B6 HEADER KEY,3,'KEY',DOCODE
930 0007B6 KEYLOOP:
931 0007B6 BIT.B #UCA0RXIFG,&IFG2
932 0007B6 JZ KEYLOOP
933 0007B6 SUB #2,PSP ; 1 push old
TOS..
934 0007B6 MOV TOS,0(PSP) ; 4 ..onto
stack
935 0007B6 MOV.B &UCA0RXBUF,TOS ; read
character into TOS
936 0007B6 donoop1:
937 0007B6 donext1: NEXT
938 0007B6 */
939 0007B6
940 0007B6 ;C (EMIT) c -- output character to
console; core routine
941 0007B6 HEADER DOEMIT,6,'(EMIT)',DOCODE
941.1 0007B6 PUBLIC DOEMIT
941.2 0007B6 .... DW link
941.3 0007B8 FF DB 0FFh ; not immediate
941.4 0007B9 link SET $
941.5 0007B9 06 DB 6
941.6 0007BA 28454D495429 DB '(EMIT)'
941.7 0007C0 EVEN
941.8 0007C0 IF 'DOCODE'='DOCODE'
941.9 0007C0 .... DOEMIT: DW $+2
941.10 0007C2 ELSE
941.11 0007C2 DOEMIT: DW DOCODE
941.12 0007C2 ENDIF
941.13 0007C2 ENDM
942 0007C2 EMITLOOPx:
943 0007C2 E2B30300 BIT.B #UCA0TXIFG,&IFG2
944 0007C6 FD27 JZ EMITLOOPx
945 0007C8 C2476700 MOV.B TOS,&UCA0TXBUF
946 0007CC 3744 MOV @PSP+,TOS
947 0007CE NEXT
947.1 0007CE 3645 MOV @IP+,W // ; fetch word address
into W
947.2 0007D0 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
947.3 0007D2 ENDM
948 0007D2
949 0007D2 ;C (KEY) -- c get character from
keyboard; core routine
950 0007D2 HEADER DOKEY,5,'(KEY)',DOCODE
950.1 0007D2 PUBLIC DOKEY
950.2 0007D2 .... DW link
950.3 0007D4 FF DB 0FFh ; not immediate
950.4 0007D5 link SET $
950.5 0007D5 05 DB 5
950.6 0007D6 284B455929 DB '(KEY)'
950.7 0007DB 00 EVEN
950.8 0007DC IF 'DOCODE'='DOCODE'
950.9 0007DC .... DOKEY: DW $+2
950.10 0007DE ELSE
950.11 0007DE DOKEY: DW DOCODE
950.12 0007DE ENDIF
950.13 0007DE ENDM
951 0007DE KEYLOOPx:
952 0007DE D2B30300 BIT.B #UCA0RXIFG,&IFG2
953 0007E2 FD27 JZ KEYLOOPx
954 0007E4 2483 SUB #2,PSP ; 1 push old
TOS..
955 0007E6 84470000 MOV TOS,0(PSP) ; 4 ..onto
stack
956 0007EA 57426600 MOV.B &UCA0RXBUF,TOS ; read
character
into
TOS
957 0007EE donoop:
958 0007EE donext: NEXT
958.1 0007EE 3645 MOV @IP+,W // ; fetch word address
into W
958.2 0007F0 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
958.3 0007F2 ENDM
959 0007F2
- 4e-core430G2553 - Page 67
960 0007F2
961 0007F2 ;C KEY -- c get character from
keyboard; vectored
962 0007F2 HEADER KEY,3,'KEY',DOCOLON
962.1 000000 PUBLIC KEY
962.2 0007F2 .... DW link
962.3 0007F4 FF DB 0FFh ; not immediate
962.4 0007F5 link SET $
962.5 0007F5 03 DB 3
962.6 0007F6 4B4559 DB 'KEY'
962.7 0007F9 00 EVEN
962.8 0007FA IF 'DOCOLON'='DOCODE'
962.9 0007FA KEY: DW $+2
962.10 0007FA ELSE
962.11 0007FA .... KEY: DW DOCOLON
962.12 0007FC ENDIF
962.13 0007FC ENDM
963 0007FC ............* DW USERKEY,FETCH,EXECUTE,EXIT
964 000804
965 000804 ;C EMIT c -- output character to
console; vectored
966 000804 HEADER EMIT,4,'EMIT',DOCOLON
966.1 000000 PUBLIC EMIT
966.2 000804 .... DW link
966.3 000806 FF DB 0FFh ; not immediate
966.4 000807 link SET $
966.5 000807 04 DB 4
966.6 000808 454D4954 DB 'EMIT'
966.7 00080C EVEN
966.8 00080C IF 'DOCOLON'='DOCODE'
966.9 00080C EMIT: DW $+2
966.10 00080C ELSE
966.11 00080C .... EMIT: DW DOCOLON
966.12 00080E ENDIF
966.13 00080E ENDM
967 00080E ............* DW USEREMIT,FETCH,EXECUTE,EXIT
968 000816
969 000816
970 000816 ;X KEY? -- f return true if char
waiting
971 000816 HEADER KEYQ,4,'KEY?',DOCODE
971.1 000000 PUBLIC KEYQ
971.2 000816 .... DW link
971.3 000818 FF DB 0FFh ; not immediate
971.4 000819 link SET $
971.5 000819 04 DB 4
971.6 00081A 4B45593F DB 'KEY?'
971.7 00081E EVEN
971.8 00081E IF 'DOCODE'='DOCODE'
971.9 00081E .... KEYQ: DW $+2
971.10 000820 ELSE
971.11 000820 KEYQ: DW DOCODE
971.12 000820 ENDIF
971.13 000820 ENDM
972 000820 2483 SUB #2,PSP ; 1 push old
TOS..
973 000822 84470000 MOV TOS,0(PSP) ; 4 ..onto
stack
974 000826 D2B30300 BIT.B #UCA0RXIFG,&IFG2
975 00082A 8622 JNZ TOSTRUE
976 00082C 743E JMP TOSFALSE
977 00082E
978 00082E ;X ZERO -- 0 put zero on stack. Often
usesd word.
979 00082E HEADER ZERO,4,'ZERO',DOCON
979.1 000000 PUBLIC ZERO
979.2 00082E .... DW link
979.3 000830 FF DB 0FFh ; not immediate
979.4 000831 link SET $
979.5 000831 04 DB 4
979.6 000832 5A45524F DB 'ZERO'
979.7 000836 EVEN
979.8 000836 IF 'DOCON'='DOCODE'
979.9 000836 ZERO: DW $+2
979.10 000836 ELSE
979.11 000836 .... ZERO: DW DOCON
979.12 000838 ENDIF
979.13 000838 ENDM
- 4e-core430G2553 - Page 68
980 000838 0000 DW 0
981 00083A ; ----------------------------------------------
------------------------
982 00083A ; We #include the following source files, rather
than compiling them
983 00083A ; separately, so that they can inherit the value
of 'link'.
984 00083A
985 00083A #include "4e-deps430G2553.s43"
1 00083A ; ----------------------------------------------
------------------------
2 00083A ; 4e4th is a Forth based on CamelForth
3 00083A ; for the Texas Instruments MSP430
4 00083A ;
5 00083A ; This program is free software; you can
redistribute it and/or modify
6 00083A ; it under the terms of the GNU General Public
License as published by
7 00083A ; the Free Software Foundation; either version 3
of the License, or
8 00083A ; (at your option) any later version.
9 00083A ;
10 00083A ; This program is distributed in the hope that
it will be useful,
11 00083A ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
12 00083A ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
13 00083A ; GNU General Public License for more details.
14 00083A ;
15 00083A ; You should have received a copy of the GNU
General Public License
16 00083A ; along with this program. If not, see
.
17 00083A ;
18 00083A ; See LICENSE TERMS in Brads file readme.txt as
well.
19 00083A
20 00083A ; ----------------------------------------------
------------------------
21 00083A ; 4e-deps430.s43: CPU and Model Dependencies -
MSP430G2553
22 00083A ; ----------------------------------------------
------------------------
23 00083A
24 00083A ; Forth words are documented as follows:
25 00083A ;x NAME stack -- stack description
26 00083A ; where x=C for ANS Forth Core words, X for
ANS
27 00083A ; Extensions, Z for internal or private
words.
28 00083A ;
29 00083A ; Indirect-Threaded Forth model for T.I.
MSP430
30 00083A ; cell size is 16 bits (2 bytes)
31 00083A ; char size is 8 bits (1 byte)
32 00083A ; address unit is 8 bits (1 byte), i.e.,
addresses are byte-aligned.
33 00083A ; ----------------------------------------------
------------------------
34 00083A
35 00083A ; ----------------------------------------------
------------------------
36 00083A ; ALIGNMENT AND PORTABILITY OPERATORS
37 00083A ; Many of these are synonyms for other
words,
38 00083A ; and so are defined as CODE words.
39 00083A
40 00083A ;C ALIGN -- align
HERE
41 00083A ; IHERE 1 AND IALLOT ;
42 00083A HEADER ALIGNN,5,'ALIGN',DOCOLON
42.1 000000 PUBLIC ALIGNN
42.2 00083A .... DW link
42.3 00083C FF DB 0FFh ; not immediate
42.4 00083D link SET $
42.5 00083D 05 DB 5
- 4e-core430G2553 - Page 69
42.6 00083E 414C49474E DB 'ALIGN'
42.7 000843 00 EVEN
42.8 000844 IF 'DOCOLON'='DOCODE'
42.9 000844 ALIGNN: DW $+2
42.10 000844 ELSE
42.11 000844 .... ALIGNN: DW DOCOLON
42.12 000846 ENDIF
42.13 000846 ENDM
43 000846 ........0100* DW IHERE,lit,1,ANDD,IALLOT,EXIT
44 000852
45 000852 ;C ALIGNED addr -- a-addr align given
addr
46 000852 ; DUP 1 AND + ;
47 000852 HEADER ALIGNED,7,'ALIGNED',DOCOLON
47.1 000000 PUBLIC ALIGNED
47.2 000852 .... DW link
47.3 000854 FF DB 0FFh ; not immediate
47.4 000855 link SET $
47.5 000855 07 DB 7
47.6 000856 414C49474E45* DB 'ALIGNED'
47.7 00085D 00 EVEN
47.8 00085E IF 'DOCOLON'='DOCODE'
47.9 00085E ALIGNED: DW $+2
47.10 00085E ELSE
47.11 00085E .... ALIGNED: DW DOCOLON
47.12 000860 ENDIF
47.13 000860 ENDM
48 000860 ........0100* DW DUP,lit,1,ANDD,PLUS,EXIT
49 00086C
50 00086C ;Z CELL -- n size of one
cell
51 00086C HEADER CELL,4,'CELL',DOCON
51.1 000000 PUBLIC CELL
51.2 00086C .... DW link
51.3 00086E FF DB 0FFh ; not immediate
51.4 00086F link SET $
51.5 00086F 04 DB 4
51.6 000870 43454C4C DB 'CELL'
51.7 000874 EVEN
51.8 000874 IF 'DOCON'='DOCODE'
51.9 000874 CELL: DW $+2
51.10 000874 ELSE
51.11 000874 .... CELL: DW DOCON
51.12 000876 ENDIF
51.13 000876 ENDM
52 000876 0200 dw 2
53 000878
54 000878 ;C CELL+ a-addr1 -- a-addr2 add cell
size
55 000878 ; 2 + ;
56 000878 HEADER CELLPLUS,5,'CELL+',DOCODE
56.1 000000 PUBLIC CELLPLUS
56.2 000878 .... DW link
56.3 00087A FF DB 0FFh ; not immediate
56.4 00087B link SET $
56.5 00087B 05 DB 5
56.6 00087C 43454C4C2B DB 'CELL+'
56.7 000881 00 EVEN
56.8 000882 IF 'DOCODE'='DOCODE'
56.9 000882 .... CELLPLUS: DW $+2
56.10 000884 ELSE
56.11 000884 CELLPLUS: DW DOCODE
56.12 000884 ENDIF
56.13 000884 ENDM
57 000884 2753 ADD #2,TOS
58 000886 B33F JMP donext
59 000888
60 000888 ;C CELLS n1 -- n2 cells->adrs
units
61 000888 HEADER CELLS,5,'CELLS',TWOSTAR+2
61.1 000000 PUBLIC CELLS
61.2 000888 .... DW link
61.3 00088A FF DB 0FFh ; not immediate
61.4 00088B link SET $
61.5 00088B 05 DB 5
61.6 00088C 43454C4C53 DB 'CELLS'
61.7 000891 00 EVEN
61.8 000892 IF 'TWOSTAR+2'='DOCODE'
- 4e-core430G2553 - Page 70
61.9 000892 CELLS: DW $+2
61.10 000892 ELSE
61.11 000892 .... CELLS: DW TWOSTAR+2
61.12 000894 ENDIF
61.13 000894 ENDM
62 000894
63 000894 ;C CHAR+ c-addr1 -- c-addr2 add char
size
64 000894 HEADER CHARPLUS,5,'CHAR+',ONEPLUS+2
64.1 000000 PUBLIC CHARPLUS
64.2 000894 .... DW link
64.3 000896 FF DB 0FFh ; not immediate
64.4 000897 link SET $
64.5 000897 05 DB 5
64.6 000898 434841522B DB 'CHAR+'
64.7 00089D 00 EVEN
64.8 00089E IF 'ONEPLUS+2'='DOCODE'
64.9 00089E CHARPLUS: DW $+2
64.10 00089E ELSE
64.11 00089E .... CHARPLUS: DW ONEPLUS+2
64.12 0008A0 ENDIF
64.13 0008A0 ENDM
65 0008A0
66 0008A0 ;C CHARS n1 -- n2 chars->adrs
units
67 0008A0 HEADER CHARS,5,'CHARS',donoop
67.1 000000 PUBLIC CHARS
67.2 0008A0 .... DW link
67.3 0008A2 FF DB 0FFh ; not immediate
67.4 0008A3 link SET $
67.5 0008A3 05 DB 5
67.6 0008A4 4348415253 DB 'CHARS'
67.7 0008A9 00 EVEN
67.8 0008AA IF 'donoop'='DOCODE'
67.9 0008AA CHARS: DW $+2
67.10 0008AA ELSE
67.11 0008AA .... CHARS: DW donoop
67.12 0008AC ENDIF
67.13 0008AC ENDM
68 0008AC
69 0008AC ;C >BODY xt -- a-addr adrs of CREATE
data
70 0008AC ; 2+ ; 8086 (3 byte
CALL)
71 0008AC HEADER TOBODY,5,'>BODY',CELLPLUS+2
71.1 000000 PUBLIC TOBODY
71.2 0008AC .... DW link
71.3 0008AE FF DB 0FFh ; not immediate
71.4 0008AF link SET $
71.5 0008AF 05 DB 5
71.6 0008B0 3E424F4459 DB '>BODY'
71.7 0008B5 00 EVEN
71.8 0008B6 IF 'CELLPLUS+2'='DOCODE'
71.9 0008B6 TOBODY: DW $+2
71.10 0008B6 ELSE
71.11 0008B6 .... TOBODY: DW CELLPLUS+2
71.12 0008B8 ENDIF
71.13 0008B8 ENDM
72 0008B8
73 0008B8 ;X COMPILE, xt -- append execution
token
74 0008B8 ; I called this word ,XT before I discovered
that it is defined in the
75 0008B8 ; ANSI standard as COMPILE,. On a DTC Forth this
simply appends xt
76 0008B8 ; (like , ) but on an STC Forth this must append
'CALL xt'.
77 0008B8 HEADER COMMAXT,8,'COMPILE,',DOALIAS
77.1 000000 PUBLIC COMMAXT
77.2 0008B8 .... DW link
77.3 0008BA FF DB 0FFh ; not immediate
77.4 0008BB link SET $
77.5 0008BB 08 DB 8
77.6 0008BC 434F4D50494C* DB 'COMPILE,'
77.7 0008C4 EVEN
77.8 0008C4 IF 'DOALIAS'='DOCODE'
77.9 0008C4 COMMAXT: DW $+2
77.10 0008C4 ELSE
- 4e-core430G2553 - Page 71
77.11 0008C4 .... COMMAXT: DW DOALIAS
77.12 0008C6 ENDIF
77.13 0008C6 ENDM
78 0008C6 .... DW ICOMMA
79 0008C8
80 0008C8 ;Z !CF adrs cfa -- set code action of a
word
81 0008C8 ; I! ;
82 0008C8 ; Indirect threaded model just stores adrs in
cfa field.
83 0008C8 HEADER STORECF,3,'!CF',DOALIAS
83.1 000000 PUBLIC STORECF
83.2 0008C8 .... DW link
83.3 0008CA FF DB 0FFh ; not immediate
83.4 0008CB link SET $
83.5 0008CB 03 DB 3
83.6 0008CC 214346 DB '!CF'
83.7 0008CF 00 EVEN
83.8 0008D0 IF 'DOALIAS'='DOCODE'
83.9 0008D0 STORECF: DW $+2
83.10 0008D0 ELSE
83.11 0008D0 .... STORECF: DW DOALIAS
83.12 0008D2 ENDIF
83.13 0008D2 ENDM
84 0008D2 .... DW ISTORE
85 0008D4
86 0008D4 ;Z ,CF adrs -- append a code field
87 0008D4 ; IHERE !CF 2 IALLOT ; MSP430 VERSION (2
bytes)
88 0008D4 HEADER COMMACF,3,',CF',DOCOLON
88.1 000000 PUBLIC COMMACF
88.2 0008D4 .... DW link
88.3 0008D6 FF DB 0FFh ; not immediate
88.4 0008D7 link SET $
88.5 0008D7 03 DB 3
88.6 0008D8 2C4346 DB ',CF'
88.7 0008DB 00 EVEN
88.8 0008DC IF 'DOCOLON'='DOCODE'
88.9 0008DC COMMACF: DW $+2
88.10 0008DC ELSE
88.11 0008DC .... COMMACF: DW DOCOLON
88.12 0008DE ENDIF
88.13 0008DE ENDM
89 0008DE ............* DW IHERE,STORECF,lit,2,IALLOT,EXIT
90 0008EA
91 0008EA ;Z ,CALL adrs -- append a subroutine
CALL
92 0008EA ; MSP430: 128x is call, Ad=11, Dreg=0000 (PC)
thus append 12B0,adrs.
93 0008EA HEADER COMMACALL,5,',CALL',DOCOLON
93.1 000000 PUBLIC COMMACALL
93.2 0008EA .... DW link
93.3 0008EC FF DB 0FFh ; not immediate
93.4 0008ED link SET $
93.5 0008ED 05 DB 5
93.6 0008EE 2C43414C4C DB ',CALL'
93.7 0008F3 00 EVEN
93.8 0008F4 IF 'DOCOLON'='DOCODE'
93.9 0008F4 COMMACALL: DW $+2
93.10 0008F4 ELSE
93.11 0008F4 .... COMMACALL: DW DOCOLON
93.12 0008F6 ENDIF
93.13 0008F6 ENDM
94 0008F6 ....B012....* DW lit,12B0h,ICOMMA,ICOMMA,EXIT
95 000900
96 000900 ;Z ,JMP adrs -- append an absolute
16-bit JMP (MOV #xx,PC)
97 000900 ; MSP430: opcode 4, Sreg=0000, Ad=0, As=11
(immed), Dreg=0000 (PC)
98 000900 ; thus append 4030,adrs.
99 000900 HEADER COMMAJMP,4,',JMP',DOCOLON
99.1 000000 PUBLIC COMMAJMP
99.2 000900 .... DW link
99.3 000902 FF DB 0FFh ; not immediate
99.4 000903 link SET $
99.5 000903 04 DB 4
99.6 000904 2C4A4D50 DB ',JMP'
99.7 000908 EVEN
- 4e-core430G2553 - Page 72
99.8 000908 IF 'DOCOLON'='DOCODE'
99.9 000908 COMMAJMP: DW $+2
99.10 000908 ELSE
99.11 000908 .... COMMAJMP: DW DOCOLON
99.12 00090A ENDIF
99.13 00090A ENDM
100 00090A ....3040....* DW lit,4030h,ICOMMA,ICOMMA,EXIT
101 000914
102 000914 ;Z !COLON -- change code field to
DOCOLON
103 000914 ; -2 IALLOT DOCOLON-adrs ,CF ;
104 000914 ; This should be used immediately after
CREATE.
105 000914 ; This is made a distinct word, because on an
STC
106 000914 ; Forth, colon definitions have no code
field.
107 000914 HEADER STORCOLON,6,'!COLON',DOCOLON
107.1 000000 PUBLIC STORCOLON
107.2 000914 .... DW link
107.3 000916 FF DB 0FFh ; not immediate
107.4 000917 link SET $
107.5 000917 06 DB 6
107.6 000918 21434F4C4F4E DB '!COLON'
107.7 00091E EVEN
107.8 00091E IF 'DOCOLON'='DOCODE'
107.9 00091E STORCOLON: DW $+2
107.10 00091E ELSE
107.11 00091E .... STORCOLON: DW DOCOLON
107.12 000920 ENDIF
107.13 000920 ENDM
108 000920 ....FEFF.... DW lit,-2,IALLOT
109 000926 ............* DW lit,DOCOLON,COMMACF,EXIT
110 00092E
111 00092E ;Z ,EXIT -- append hi-level EXIT
action
112 00092E ; ['] EXIT ,XT ;
113 00092E ; This is made a distinct word, because on an
STC
114 00092E ; Forth, it appends a RET instruction, not an
xt.
115 00092E HEADER CEXIT,5,',EXIT',DOCOLON
115.1 000000 PUBLIC CEXIT
115.2 00092E .... DW link
115.3 000930 FF DB 0FFh ; not immediate
115.4 000931 link SET $
115.5 000931 05 DB 5
115.6 000932 2C45584954 DB ',EXIT'
115.7 000937 00 EVEN
115.8 000938 IF 'DOCOLON'='DOCODE'
115.9 000938 CEXIT: DW $+2
115.10 000938 ELSE
115.11 000938 .... CEXIT: DW DOCOLON
115.12 00093A ENDIF
115.13 00093A ENDM
116 00093A ............* DW lit,EXIT,COMMAXT,EXIT
117 000942
118 000942 ; ----------------------------------------------
------------------------
119 000942 ; CONTROL STRUCTURES
120 000942 ; These words allow Forth control structure
words
121 000942 ; to be defined portably.
122 000942
123 000942 ;Z ,BRANCH xt -- append a branch instructio
n
124 000942 ; xt is the branch operator to use, e.g. qbranch
or (loop).
125 000942 ; It does NOT append the destination address.
126 000942 ; On the MSP430 this is equivalent to ,XT
(above).
127 000942 HEADER COMMABRANCH,7,',BRANCH',DOALIAS
127.1 000000 PUBLIC COMMABRANCH
127.2 000942 .... DW link
127.3 000944 FF DB 0FFh ; not immediate
127.4 000945 link SET $
127.5 000945 07 DB 7
- 4e-core430G2553 - Page 73
127.6 000946 2C4252414E43* DB ',BRANCH'
127.7 00094D 00 EVEN
127.8 00094E IF 'DOALIAS'='DOCODE'
127.9 00094E COMMABRANCH: DW $+2
127.10 00094E ELSE
127.11 00094E .... COMMABRANCH: DW DOALIAS
127.12 000950 ENDIF
127.13 000950 ENDM
128 000950 .... DW ICOMMA
129 000952
130 000952 ;Z ,DEST dest -- append a branch
address
131 000952 ; IHERE - , ;
132 000952 ; This appends the given destination address to
the branch instruction.
133 000952 ; The MSP430 uses relative addressing from the
location of the offset cell,
134 000952 ; i.e., to branch to FOO the offset cell at $
contains FOO-$.
135 000952 HEADER COMMADEST,5,',DEST',DOCOLON
135.1 000000 PUBLIC COMMADEST
135.2 000952 .... DW link
135.3 000954 FF DB 0FFh ; not immediate
135.4 000955 link SET $
135.5 000955 05 DB 5
135.6 000956 2C44455354 DB ',DEST'
135.7 00095B 00 EVEN
135.8 00095C IF 'DOCOLON'='DOCODE'
135.9 00095C COMMADEST: DW $+2
135.10 00095C ELSE
135.11 00095C .... COMMADEST: DW DOCOLON
135.12 00095E ENDIF
135.13 00095E ENDM
136 00095E ............* DW IHERE,MINUS,ICOMMA,EXIT
137 000966
138 000966 ;Z !DEST dest adrs -- change a branch
dest'n
139 000966 ; TUCK - SWAP I! ;
140 000966 ; Changes the destination address found at
'adrs' to the given 'dest'.
141 000966 ; The MSP430 uses relative addressing from the
location of the offset cell,
142 000966 ; i.e., to branch to FOO the offset cell at $
contains FOO-$.
143 000966 HEADER STOREDEST,5,'!DEST',DOCOLON
143.1 000000 PUBLIC STOREDEST
143.2 000966 .... DW link
143.3 000968 FF DB 0FFh ; not immediate
143.4 000969 link SET $
143.5 000969 05 DB 5
143.6 00096A 2144455354 DB '!DEST'
143.7 00096F 00 EVEN
143.8 000970 IF 'DOCOLON'='DOCODE'
143.9 000970 STOREDEST: DW $+2
143.10 000970 ELSE
143.11 000970 .... STOREDEST: DW DOCOLON
143.12 000972 ENDIF
143.13 000972 ENDM
144 000972 ............* DW TUCK,MINUS,SWAP,ISTORE,EXIT
145 00097C
146 00097C ;Z ,NONE -- append a null
destination (Flashable)
147 00097C ; CELL IALLOT ;
148 00097C ; When compiling in Flash ROM a branch to be
resolved later, we must
149 00097C ; skip the cell so that it can be programmed at
a later time.
150 00097C ; In general Flash memory can only be written
once!
151 00097C ; ,NONE should be used wherever !DEST will
resolve the branch.
152 00097C HEADER COMMANONE,5,',NONE',DOCOLON
152.1 000000 PUBLIC COMMANONE
152.2 00097C .... DW link
152.3 00097E FF DB 0FFh ; not immediate
152.4 00097F link SET $
152.5 00097F 05 DB 5
152.6 000980 2C4E4F4E45 DB ',NONE'
- 4e-core430G2553 - Page 74
152.7 000985 00 EVEN
152.8 000986 IF 'DOCOLON'='DOCODE'
152.9 000986 COMMANONE: DW $+2
152.10 000986 ELSE
152.11 000986 .... COMMANONE: DW DOCOLON
152.12 000988 ENDIF
152.13 000988 ENDM
153 000988 ............ DW CELL,IALLOT,EXIT
154 00098E
155 00098E ; ----------------------------------------------
------------------------
156 00098E ; HEADER STRUCTURE
157 00098E ; The structure of the Forth dictionary headers
(name, link, immediate
158 00098E ; flag, and "smudge" bit) does not necessarily
differ across CPUs. This
159 00098E ; structure is not easily factored into distinct
"portable" words;
160 00098E ; instead, it is implicit in the definitions of
FIND and CREATE, and
161 00098E ; also in NFA>LFA, NFA>CFA, IMMED?, IMMEDIATE,
HIDE, and REVEAL.
162 00098E ; These words must be (substantially) rewritten
if either the header
163 00098E ; structure or its inherent assumptions are
changed.
164 00098E ; ----------------------------------------------
------------------------
165 00098E
986 00098E #include "4e-hilvl430G2553.s43"
1 00098E ; ----------------------------------------------
------------------------
2 00098E ; 4e4th is a Forth based on CamelForth
3 00098E ; for the Texas Instruments MSP430
4 00098E ;
5 00098E ; This program is free software; you can
redistribute it and/or modify
6 00098E ; it under the terms of the GNU General Public
License as published by
7 00098E ; the Free Software Foundation; either version 3
of the License, or
8 00098E ; (at your option) any later version.
9 00098E ;
10 00098E ; This program is distributed in the hope that
it will be useful,
11 00098E ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
12 00098E ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
13 00098E ; GNU General Public License for more details.
14 00098E ;
15 00098E ; You should have received a copy of the GNU
General Public License
16 00098E ; along with this program. If not, see
.
17 00098E ;
18 00098E ; See LICENSE TERMS in Brads file readme.txt as
well.
19 00098E
20 00098E ; ----------------------------------------------
------------------------
21 00098E ; 4e-hilvl430G2553.s43 - High Level Words -
MSP430G2553
22 00098E ; ----------------------------------------------
------------------------
23 00098E
24 00098E ; Forth words are documented as follows:
25 00098E ;x NAME stack -- stack description
26 00098E ; where x=C for ANS Forth Core words, X for
ANS
27 00098E ; Extensions, Z for internal or private
words.
28 00098E ; ----------------------------------------------
------------------------
29 00098E ; REVISION HISTORY
30 00098E
31 00098E ; 17 November 2013
- 4e-core430G2553 - Page 75
32 00098E ; Comments about making ISR in 4e4th
33 00098E ; 05 June 2013
34 00098E ; WORDS can stop and go now.
35 00098E ; LABEL to build ISR code.
36 00098E ; INTERRUPT to store ISR address in Interrupt
vector.
37 00098E ; VECSAVE VECRESTORE VECBACK added.
38 00098E ; 12 Jan 2013 Use CODE ... NEXT, END-CODE to
build code primitives.
39 00098E ; Usage: CODE name opcode1 i, opcode2 i,
opcode3 i, ... NEXT, END-CODE
40 00098E ; Example: See "Basics for an extern cross
assembler" at end of file.
41 00098E ; 11 Jan 2013 made comments, new features and
words:
42 00098E ; Indicate BASE in ok promt.
43 00098E ; 0U.R ( u n -- ) print u with n leading
zeros.
44 00098E ; (VECWIPE) ( -- ) erase ISR flash.
45 00098E ; VECWIPE ( -- ) do (VECWIPE) and set
default reset vector.
46 00098E ; cleaned up/added memory information words:
47 00098E ; RESETADR ( -- adr) reset vector
address
48 00098E ; MEMBOT ( -- adr) bottom of
USERflash
49 00098E ; MEMTOP ( -- adr) top of USERflash
50 00098E ; MEM ( -- u) unused bytes in
flash
51 00098E ; UNUSED ( -- u) unused bytes in
RAM
52 00098E ; VARBOT ( -- adr) bottom of variable
area
53 00098E ; TOPSEG ( -- adr) bottom of top most
flash segment
54 00098E ; VECBOT ( -- adr) bottom of
interrupt vectors
55 00098E ; ? ( adr -- u ) display content of
variable
56 00098E ; 08 Dez 2012 merged brads PARSE etc form
camelforth/340 V4.1
57 00098E ; which fixes the empty string bug.
58 00098E ; Dez 2012 Added some features:
59 00098E ; Save variables to info-c and restore from
there on COLD.
60 00098E ; Made upper most flash segment writable; you
may write vectors now.
61 00098E ; VEC! (x adr -- ) store x to adr in top
most segment
62 00098E ; VEC! will write _any_ flash location. !!
dangerous!!
63 00098E ; VECWIPE will erase flash but not kernel,
sets reset vector to boot 4e4th.
64 00098E ; Kernal is bigger now, user flash smaler;
65 00098E ; see: XLINK configuration file for
MSP430G2553 4e-lnk430G2553.xcl
66 00098E ; 30 Mar 2012 mk fixed FM/MOD
67 00098E ; 26 Feb 2012 mk - adopted to MSP430G2553
68 00098E ; MEM ( -- n ) n = bytes left in flash
69 00098E ; FLASHEND constant MEMTOP
70 00098E ; FLASHSTART constant MEMBOT
71 00098E ; kernel at $E000, IDP = FLASHSTART =
C000
72 00098E ; fixed backspace.
73 00098E ; ok promt at end of line.
74 00098E ; .S prints depth.
75 00098E ;
76 00098E ; 17 jan 09 bjr - changed label _DP to DDP for
compatibility with token
77 00098E ; naming convention. Now uses DEST macro to
compute branch offsets.
78 00098E ; 11 jan 09 bjr - modified QUIT for Xon/Xoff
flow control
79 00098E ; 4 jan 09 bjr - created from Camel86h.asm.
80 00098E
81 00098E ; SYSTEM VARIABLES & CONSTANTS =================
- 4e-core430G2553 - Page 76
=
82 00098E
83 00098E ;Z u0 -- a-addr current user area
adrs
84 00098E ; 0 USER U0
85 00098E HEADER U0,2,'U0',DOUSER
85.1 000000 PUBLIC U0
85.2 00098E .... DW link
85.3 000990 FF DB 0FFh ; not immediate
85.4 000991 link SET $
85.5 000991 02 DB 2
85.6 000992 5530 DB 'U0'
85.7 000994 EVEN
85.8 000994 IF 'DOUSER'='DOCODE'
85.9 000994 U0: DW $+2
85.10 000994 ELSE
85.11 000994 .... U0: DW DOUSER
85.12 000996 ENDIF
85.13 000996 ENDM
86 000996 0000 DW 0
87 000998
88 000998 ;C >IN -- a-addr holds offset into
TIB
89 000998 ; 2 USER >IN
90 000998 HEADER TOIN,3,'>IN',DOUSER
90.1 000000 PUBLIC TOIN
90.2 000998 .... DW link
90.3 00099A FF DB 0FFh ; not immediate
90.4 00099B link SET $
90.5 00099B 03 DB 3
90.6 00099C 3E494E DB '>IN'
90.7 00099F 00 EVEN
90.8 0009A0 IF 'DOUSER'='DOCODE'
90.9 0009A0 TOIN: DW $+2
90.10 0009A0 ELSE
90.11 0009A0 .... TOIN: DW DOUSER
90.12 0009A2 ENDIF
90.13 0009A2 ENDM
91 0009A2 0200 DW 2
92 0009A4
93 0009A4 ;C BASE -- a-addr holds conversion
radix
94 0009A4 ; 4 USER BASE
95 0009A4 HEADER BASE,4,'BASE',DOUSER
95.1 000000 PUBLIC BASE
95.2 0009A4 .... DW link
95.3 0009A6 FF DB 0FFh ; not immediate
95.4 0009A7 link SET $
95.5 0009A7 04 DB 4
95.6 0009A8 42415345 DB 'BASE'
95.7 0009AC EVEN
95.8 0009AC IF 'DOUSER'='DOCODE'
95.9 0009AC BASE: DW $+2
95.10 0009AC ELSE
95.11 0009AC .... BASE: DW DOUSER
95.12 0009AE ENDIF
95.13 0009AE ENDM
96 0009AE 0400 DW 4
97 0009B0
98 0009B0 ;C STATE -- a-addr holds compiler
state
99 0009B0 ; 6 USER STATE
100 0009B0 HEADER STATE,5,'STATE',DOUSER
100.1 000000 PUBLIC STATE
100.2 0009B0 .... DW link
100.3 0009B2 FF DB 0FFh ; not immediate
100.4 0009B3 link SET $
100.5 0009B3 05 DB 5
100.6 0009B4 5354415445 DB 'STATE'
100.7 0009B9 00 EVEN
100.8 0009BA IF 'DOUSER'='DOCODE'
100.9 0009BA STATE: DW $+2
100.10 0009BA ELSE
100.11 0009BA .... STATE: DW DOUSER
100.12 0009BC ENDIF
100.13 0009BC ENDM
101 0009BC 0600 DW 6
102 0009BE
- 4e-core430G2553 - Page 77
103 0009BE ;Z dp -- a-addr holds dictionary
ptr
104 0009BE ; 8 USER DP
105 0009BE HEADER DDP,2,'DP',DOUSER
105.1 000000 PUBLIC DDP
105.2 0009BE .... DW link
105.3 0009C0 FF DB 0FFh ; not immediate
105.4 0009C1 link SET $
105.5 0009C1 02 DB 2
105.6 0009C2 4450 DB 'DP'
105.7 0009C4 EVEN
105.8 0009C4 IF 'DOUSER'='DOCODE'
105.9 0009C4 DDP: DW $+2
105.10 0009C4 ELSE
105.11 0009C4 .... DDP: DW DOUSER
105.12 0009C6 ENDIF
105.13 0009C6 ENDM
106 0009C6 0800 DW 8
107 0009C8
108 0009C8 ;Z 'source -- a-addr two cells: len,
adrs
109 0009C8 ; 10 USER 'SOURCE
110 0009C8 HEADER TICKSOURCE,7,'\'SOURCE',DOUSER
110.1 000000 PUBLIC TICKSOURCE
110.2 0009C8 .... DW link
110.3 0009CA FF DB 0FFh ; not immediate
110.4 0009CB link SET $
110.5 0009CB 07 DB 7
110.6 0009CC 27534F555243* DB '\'SOURCE'
110.7 0009D3 00 EVEN
110.8 0009D4 IF 'DOUSER'='DOCODE'
110.9 0009D4 TICKSOURCE: DW $+2
110.10 0009D4 ELSE
110.11 0009D4 .... TICKSOURCE: DW DOUSER
110.12 0009D6 ENDIF
110.13 0009D6 ENDM
111 0009D6 0A00 DW 10
112 0009D8
113 0009D8 ;Z latest -- a-addr last word in
dict.
114 0009D8 ; 14 USER LATEST
115 0009D8 HEADER LATEST,6,'LATEST',DOUSER
115.1 000000 PUBLIC LATEST
115.2 0009D8 .... DW link
115.3 0009DA FF DB 0FFh ; not immediate
115.4 0009DB link SET $
115.5 0009DB 06 DB 6
115.6 0009DC 4C4154455354 DB 'LATEST'
115.7 0009E2 EVEN
115.8 0009E2 IF 'DOUSER'='DOCODE'
115.9 0009E2 LATEST: DW $+2
115.10 0009E2 ELSE
115.11 0009E2 .... LATEST: DW DOUSER
115.12 0009E4 ENDIF
115.13 0009E4 ENDM
116 0009E4 0E00 DW 14
117 0009E6
118 0009E6 ;Z hp -- a-addr HOLD pointer
119 0009E6 ; 16 USER HP
120 0009E6 HEADER HP,2,'HP',DOUSER
120.1 000000 PUBLIC HP
120.2 0009E6 .... DW link
120.3 0009E8 FF DB 0FFh ; not immediate
120.4 0009E9 link SET $
120.5 0009E9 02 DB 2
120.6 0009EA 4850 DB 'HP'
120.7 0009EC EVEN
120.8 0009EC IF 'DOUSER'='DOCODE'
120.9 0009EC HP: DW $+2
120.10 0009EC ELSE
120.11 0009EC .... HP: DW DOUSER
120.12 0009EE ENDIF
120.13 0009EE ENDM
121 0009EE 1000 DW 16
122 0009F0
123 0009F0 ;Z LP -- a-addr Leave-stack pointer
124 0009F0 ; 18 USER LP
125 0009F0 HEADER LP,2,'LP',DOUSER
- 4e-core430G2553 - Page 78
125.1 000000 PUBLIC LP
125.2 0009F0 .... DW link
125.3 0009F2 FF DB 0FFh ; not immediate
125.4 0009F3 link SET $
125.5 0009F3 02 DB 2
125.6 0009F4 4C50 DB 'LP'
125.7 0009F6 EVEN
125.8 0009F6 IF 'DOUSER'='DOCODE'
125.9 0009F6 LP: DW $+2
125.10 0009F6 ELSE
125.11 0009F6 .... LP: DW DOUSER
125.12 0009F8 ENDIF
125.13 0009F8 ENDM
126 0009F8 1200 DW 18
127 0009FA
128 0009FA ;Z IDP -- a-addr ROM dictionary
pointer
129 0009FA ; 20 USER IDP
130 0009FA HEADER IDP,3,'IDP',DOUSER
130.1 000000 PUBLIC IDP
130.2 0009FA .... DW link
130.3 0009FC FF DB 0FFh ; not immediate
130.4 0009FD link SET $
130.5 0009FD 03 DB 3
130.6 0009FE 494450 DB 'IDP'
130.7 000A01 00 EVEN
130.8 000A02 IF 'DOUSER'='DOCODE'
130.9 000A02 IDP: DW $+2
130.10 000A02 ELSE
130.11 000A02 .... IDP: DW DOUSER
130.12 000A04 ENDIF
130.13 000A04 ENDM
131 000A04 1400 DW 20
132 000A06
133 000A06 ;Z NEWEST -- a-addr temporary LATEST
storage
134 000A06 ; 22 USER NEWEST
135 000A06 HEADER NEWEST,6,'NEWEST',DOUSER
135.1 000000 PUBLIC NEWEST
135.2 000A06 .... DW link
135.3 000A08 FF DB 0FFh ; not immediate
135.4 000A09 link SET $
135.5 000A09 06 DB 6
135.6 000A0A 4E4557455354 DB 'NEWEST'
135.7 000A10 EVEN
135.8 000A10 IF 'DOUSER'='DOCODE'
135.9 000A10 NEWEST: DW $+2
135.10 000A10 ELSE
135.11 000A10 .... NEWEST: DW DOUSER
135.12 000A12 ENDIF
135.13 000A12 ENDM
136 000A12 1600 DW 22
137 000A14
138 000A14 ;Z APP -- a-addr app pointer ( was
TURNKEY)
139 000A14 ; 24 USER APP
140 000A14 HEADER APP,3,'APP',DOUSER
140.1 000000 PUBLIC APP
140.2 000A14 .... DW link
140.3 000A16 FF DB 0FFh ; not immediate
140.4 000A17 link SET $
140.5 000A17 03 DB 3
140.6 000A18 415050 DB 'APP'
140.7 000A1B 00 EVEN
140.8 000A1C IF 'DOUSER'='DOCODE'
140.9 000A1C APP: DW $+2
140.10 000A1C ELSE
140.11 000A1C .... APP: DW DOUSER
140.12 000A1E ENDIF
140.13 000A1E ENDM
141 000A1E 1800 DW 24
142 000A20
143 000A20 ;Z CAPS -- a-addr capitalize words
pointer
144 000A20 ; 26 USER CAPS
145 000A20 HEADER CAPS,4,'CAPS',DOUSER
145.1 000000 PUBLIC CAPS
145.2 000A20 .... DW link
- 4e-core430G2553 - Page 79
145.3 000A22 FF DB 0FFh ; not immediate
145.4 000A23 link SET $
145.5 000A23 04 DB 4
145.6 000A24 43415053 DB 'CAPS'
145.7 000A28 EVEN
145.8 000A28 IF 'DOUSER'='DOCODE'
145.9 000A28 CAPS: DW $+2
145.10 000A28 ELSE
145.11 000A28 .... CAPS: DW DOUSER
145.12 000A2A ENDIF
145.13 000A2A ENDM
146 000A2A 1A00 DW 26
147 000A2C
148 000A2C ;Z USERKEY -- a-addr KEY pointer
149 000A2C ; 28 USER KEY
150 000A2C HEADER USERKEY,7,'USERKEY',DOUSER
150.1 000000 PUBLIC USERKEY
150.2 000A2C .... DW link
150.3 000A2E FF DB 0FFh ; not immediate
150.4 000A2F link SET $
150.5 000A2F 07 DB 7
150.6 000A30 555345524B45* DB 'USERKEY'
150.7 000A37 00 EVEN
150.8 000A38 IF 'DOUSER'='DOCODE'
150.9 000A38 USERKEY: DW $+2
150.10 000A38 ELSE
150.11 000A38 .... USERKEY: DW DOUSER
150.12 000A3A ENDIF
150.13 000A3A ENDM
151 000A3A 1C00 DW 28
152 000A3C
153 000A3C ;Z USEREMIT -- a-addr EMIT
pointer
154 000A3C ; 30 USER EMIT
155 000A3C HEADER USEREMIT,8,'USEREMIT',DOUSER
155.1 000000 PUBLIC USEREMIT
155.2 000A3C .... DW link
155.3 000A3E FF DB 0FFh ; not immediate
155.4 000A3F link SET $
155.5 000A3F 08 DB 8
155.6 000A40 55534552454D* DB 'USEREMIT'
155.7 000A48 EVEN
155.8 000A48 IF 'DOUSER'='DOCODE'
155.9 000A48 USEREMIT: DW $+2
155.10 000A48 ELSE
155.11 000A48 .... USEREMIT: DW DOUSER
155.12 000A4A ENDIF
155.13 000A4A ENDM
156 000A4A 1E00 DW 30
157 000A4C
158 000A4C ;Z NEWLINE -- a-addr CR pointer
159 000A4C ; 32 USER
160 000A4C HEADER NEWLINE,7,'NEWLINE',DOUSER
160.1 000000 PUBLIC NEWLINE
160.2 000A4C .... DW link
160.3 000A4E FF DB 0FFh ; not immediate
160.4 000A4F link SET $
160.5 000A4F 07 DB 7
160.6 000A50 4E45574C494E* DB 'NEWLINE'
160.7 000A57 00 EVEN
160.8 000A58 IF 'DOUSER'='DOCODE'
160.9 000A58 NEWLINE: DW $+2
160.10 000A58 ELSE
160.11 000A58 .... NEWLINE: DW DOUSER
160.12 000A5A ENDIF
160.13 000A5A ENDM
161 000A5A 2000 DW 32
162 000A5C
163 000A5C ; 2 more for savety 34, 36
164 000A5C
165 000A5C
166 000A5C
167 000A5C ;X PAD -- a-addr user PAD buffer
168 000A5C ; = end of hold
area!
169 000A5C HEADER PAD,3,'PAD',DOUSER
169.1 000000 PUBLIC PAD
169.2 000A5C .... DW link
- 4e-core430G2553 - Page 80
169.3 000A5E FF DB 0FFh ; not immediate
169.4 000A5F link SET $
169.5 000A5F 03 DB 3
169.6 000A60 504144 DB 'PAD'
169.7 000A63 00 EVEN
169.8 000A64 IF 'DOUSER'='DOCODE'
169.9 000A64 PAD: DW $+2
169.10 000A64 ELSE
169.11 000A64 .... PAD: DW DOUSER
169.12 000A66 ENDIF
169.13 000A66 ENDM
170 000A66 .... DW PADAREA-UAREA
171 000A68
172 000A68 ;Z l0 -- a-addr bottom of Leave
stack
173 000A68 HEADER L0,2,'L0',DOUSER
173.1 000000 PUBLIC L0
173.2 000A68 .... DW link
173.3 000A6A FF DB 0FFh ; not immediate
173.4 000A6B link SET $
173.5 000A6B 02 DB 2
173.6 000A6C 4C30 DB 'L0'
173.7 000A6E EVEN
173.8 000A6E IF 'DOUSER'='DOCODE'
173.9 000A6E L0: DW $+2
173.10 000A6E ELSE
173.11 000A6E .... L0: DW DOUSER
173.12 000A70 ENDIF
173.13 000A70 ENDM
174 000A70 .... DW LSTACK-UAREA
175 000A72
176 000A72 ;Z r0 -- a-addr end of return
stack
177 000A72 HEADER RZERO,2,'R0',DOUSER
177.1 000000 PUBLIC RZERO
177.2 000A72 .... DW link
177.3 000A74 FF DB 0FFh ; not immediate
177.4 000A75 link SET $
177.5 000A75 02 DB 2
177.6 000A76 5230 DB 'R0'
177.7 000A78 EVEN
177.8 000A78 IF 'DOUSER'='DOCODE'
177.9 000A78 RZERO: DW $+2
177.10 000A78 ELSE
177.11 000A78 .... RZERO: DW DOUSER
177.12 000A7A ENDIF
177.13 000A7A ENDM
178 000A7A .... DW RSTACK-UAREA
179 000A7C
180 000A7C ;Z s0 -- a-addr end of parameter
stack
181 000A7C HEADER S0,2,'S0',DOUSER
181.1 000000 PUBLIC S0
181.2 000A7C .... DW link
181.3 000A7E FF DB 0FFh ; not immediate
181.4 000A7F link SET $
181.5 000A7F 02 DB 2
181.6 000A80 5330 DB 'S0'
181.7 000A82 EVEN
181.8 000A82 IF 'DOUSER'='DOCODE'
181.9 000A82 S0: DW $+2
181.10 000A82 ELSE
181.11 000A82 .... S0: DW DOUSER
181.12 000A84 ENDIF
181.13 000A84 ENDM
182 000A84 .... DW PSTACK-UAREA
183 000A86
184 000A86 ;X tib -- a-addr Terminal Input
Buffer
185 000A86 ; HEX 80 USER TIB 8086: above user
area
186 000A86 HEADER TIB,3,'TIB',DOUSER
186.1 000000 PUBLIC TIB
186.2 000A86 .... DW link
186.3 000A88 FF DB 0FFh ; not immediate
186.4 000A89 link SET $
186.5 000A89 03 DB 3
186.6 000A8A 544942 DB 'TIB'
- 4e-core430G2553 - Page 81
186.7 000A8D 00 EVEN
186.8 000A8E IF 'DOUSER'='DOCODE'
186.9 000A8E TIB: DW $+2
186.10 000A8E ELSE
186.11 000A8E .... TIB: DW DOUSER
186.12 000A90 ENDIF
186.13 000A90 ENDM
187 000A90 .... DW TIBAREA-UAREA
188 000A92
189 000A92 ;Z tibsize -- n size of TIB
190 000A92 HEADER TIBSIZE,7,'TIBSIZE',DOCON
190.1 000000 PUBLIC TIBSIZE
190.2 000A92 .... DW link
190.3 000A94 FF DB 0FFh ; not immediate
190.4 000A95 link SET $
190.5 000A95 07 DB 7
190.6 000A96 54494253495A* DB 'TIBSIZE'
190.7 000A9D 00 EVEN
190.8 000A9E IF 'DOCON'='DOCODE'
190.9 000A9E TIBSIZE: DW $+2
190.10 000A9E ELSE
190.11 000A9E .... TIBSIZE: DW DOCON
190.12 000AA0 ENDIF
190.13 000AA0 ENDM
191 000AA0 .... DW TIB_SIZE-2 ; 2 chars safety zone
192 000AA2
193 000AA2 ;C BL -- char an ASCII
space
194 000AA2 HEADER BLANK,2,'BL',DOCON
194.1 000000 PUBLIC BLANK
194.2 000AA2 .... DW link
194.3 000AA4 FF DB 0FFh ; not immediate
194.4 000AA5 link SET $
194.5 000AA5 02 DB 2
194.6 000AA6 424C DB 'BL'
194.7 000AA8 EVEN
194.8 000AA8 IF 'DOCON'='DOCODE'
194.9 000AA8 BLANK: DW $+2
194.10 000AA8 ELSE
194.11 000AA8 .... BLANK: DW DOCON
194.12 000AAA ENDIF
194.13 000AAA ENDM
195 000AAA 2000 DW 20h
196 000AAC
197 000AAC ;Z uinit -- addr initial values for
user area
198 000AAC HEADER UINIT,5,'UINIT',DOROM
198.1 000000 PUBLIC UINIT
198.2 000AAC .... DW link
198.3 000AAE FF DB 0FFh ; not immediate
198.4 000AAF link SET $
198.5 000AAF 05 DB 5
198.6 000AB0 55494E4954 DB 'UINIT'
198.7 000AB5 00 EVEN
198.8 000AB6 IF 'DOROM'='DOCODE'
198.9 000AB6 UINIT: DW $+2
198.10 000AB6 ELSE
198.11 000AB6 .... UINIT: DW DOROM
198.12 000AB8 ENDIF
198.13 000AB8 ENDM
199 000AB8 uinitstart:
200 000AB8 000000000A00* DW 0,0,10,0 ; reserved,>IN,BASE,STAT
E ; start in HEX
mk
201 000AC0 .... DW RAMDICT ; DP
202 000AC2 00000000 DW 0,0 ; SOURCE init'd
elsewhere
203 000AC6 .... DW lastword ; LATEST
204 000AC8 00000000 DW 0,0 ; HP,LP init'd
elsewhere
205 000ACC 00C0 DW USERFLASHSTART ; IDP
206 000ACE 0000 DW 0 ; NEWEST not init'd
207 000AD0 .... DW DOTCOLD ; APP vector; default is
.COLD
208 000AD2 FFFF DW -1 ; CAPS flag; default is
TRUE
209 000AD4 .... DW DOKEY ; KEY vector
- 4e-core430G2553 - Page 82
210 000AD6 .... DW DOEMIT ; EMIT vector
211 000AD8 .... DW DOCR ; CR vector
212 000ADA uinitend:
213 000022 uareasize = uinitend-uinitstart
214 000ADA
215 000ADA /* not there mk
216 000ADA ; RAM interrupt vectors, 15 vectors of 2 cells
each
217 000ADA MOV #nullirq,PC
218 000ADA MOV #nullirq,PC
219 000ADA MOV #nullirq,PC
220 000ADA MOV #nullirq,PC
221 000ADA MOV #nullirq,PC
222 000ADA MOV #nullirq,PC
223 000ADA MOV #nullirq,PC
224 000ADA MOV #nullirq,PC
225 000ADA MOV #nullirq,PC
226 000ADA MOV #nullirq,PC
227 000ADA MOV #nullirq,PC
228 000ADA MOV #nullirq,PC
229 000ADA MOV #nullirq,PC
230 000ADA MOV #nullirq,PC
231 000ADA MOV #nullirq,PC
232 000ADA */
233 000ADA
234 000ADA ;Z #init -- n #bytes of user area init
data
235 000ADA HEADER NINIT,5,'#INIT',DOCON
235.1 000000 PUBLIC NINIT
235.2 000ADA .... DW link
235.3 000ADC FF DB 0FFh ; not immediate
235.4 000ADD link SET $
235.5 000ADD 05 DB 5
235.6 000ADE 23494E4954 DB '#INIT'
235.7 000AE3 00 EVEN
235.8 000AE4 IF 'DOCON'='DOCODE'
235.9 000AE4 NINIT: DW $+2
235.10 000AE4 ELSE
235.11 000AE4 .... NINIT: DW DOCON
235.12 000AE6 ENDIF
235.13 000AE6 ENDM
236 000AE6 2200 DW uareasize
237 000AE8
238 000AE8
239 000000 EXTERN cor,infoB,AppU0,infoC,infoD
240 000AE8 ;Z COR -- adr cause of reset
241 000AE8 HEADER COR,3,'COR',DOCON
241.1 000000 PUBLIC COR
241.2 000AE8 .... DW link
241.3 000AEA FF DB 0FFh ; not immediate
241.4 000AEB link SET $
241.5 000AEB 03 DB 3
241.6 000AEC 434F52 DB 'COR'
241.7 000AEF 00 EVEN
241.8 000AF0 IF 'DOCON'='DOCODE'
241.9 000AF0 COR: DW $+2
241.10 000AF0 ELSE
241.11 000AF0 .... COR: DW DOCON
241.12 000AF2 ENDIF
241.13 000AF2 ENDM
242 000AF2 .... DW cor
243 000AF4
244 000AF4 ;Z INFOB -- adr start of info B
segment
245 000AF4 HEADER INFOB,5,'INFOB',DOCON
245.1 000000 PUBLIC INFOB
245.2 000AF4 .... DW link
245.3 000AF6 FF DB 0FFh ; not immediate
245.4 000AF7 link SET $
245.5 000AF7 05 DB 5
245.6 000AF8 494E464F42 DB 'INFOB'
245.7 000AFD 00 EVEN
245.8 000AFE IF 'DOCON'='DOCODE'
245.9 000AFE INFOB: DW $+2
245.10 000AFE ELSE
245.11 000AFE .... INFOB: DW DOCON
245.12 000B00 ENDIF
245.13 000B00 ENDM
- 4e-core430G2553 - Page 83
246 000B00 .... DW infoB
247 000B02
248 000B02 ;Z INFOC -- adr start of info C
segment
249 000B02 HEADER INFOC,5,'INFOC',DOCON
249.1 000000 PUBLIC INFOC
249.2 000B02 .... DW link
249.3 000B04 FF DB 0FFh ; not immediate
249.4 000B05 link SET $
249.5 000B05 05 DB 5
249.6 000B06 494E464F43 DB 'INFOC'
249.7 000B0B 00 EVEN
249.8 000B0C IF 'DOCON'='DOCODE'
249.9 000B0C INFOC: DW $+2
249.10 000B0C ELSE
249.11 000B0C .... INFOC: DW DOCON
249.12 000B0E ENDIF
249.13 000B0E ENDM
250 000B0E .... DW infoC
251 000B10
252 000B10 ;Z INFOD -- adr start of info C
segment
253 000B10 HEADER INFOD,5,'INFOD',DOCON
253.1 000000 PUBLIC INFOD
253.2 000B10 .... DW link
253.3 000B12 FF DB 0FFh ; not immediate
253.4 000B13 link SET $
253.5 000B13 05 DB 5
253.6 000B14 494E464F44 DB 'INFOD'
253.7 000B19 00 EVEN
253.8 000B1A IF 'DOCON'='DOCODE'
253.9 000B1A INFOD: DW $+2
253.10 000B1A ELSE
253.11 000B1A .... INFOD: DW DOCON
253.12 000B1C ENDIF
253.13 000B1C ENDM
254 000B1C .... DW infoD
255 000B1E
256 000B1E ;Z APPU0 -- adr start of Application
user area
257 000B1E HEADER APPU0,5,'APPU0',DOCON
257.1 000000 PUBLIC APPU0
257.2 000B1E .... DW link
257.3 000B20 FF DB 0FFh ; not immediate
257.4 000B21 link SET $
257.5 000B21 05 DB 5
257.6 000B22 4150505530 DB 'APPU0'
257.7 000B27 00 EVEN
257.8 000B28 IF 'DOCON'='DOCODE'
257.9 000B28 APPU0: DW $+2
257.10 000B28 ELSE
257.11 000B28 .... APPU0: DW DOCON
257.12 000B2A ENDIF
257.13 000B2A ENDM
258 000B2A .... DW AppU0
259 000B2C
260 000B2C
261 000B2C ; ARITHMETIC OPERATORS =========================
=
262 000B2C
263 000B2C ;C S>D n -- d single -> double
prec.
264 000B2C ; DUP 0< ;
265 000B2C HEADER STOD,3,'S>D',DOCOLON
265.1 000000 PUBLIC STOD
265.2 000B2C .... DW link
265.3 000B2E FF DB 0FFh ; not immediate
265.4 000B2F link SET $
265.5 000B2F 03 DB 3
265.6 000B30 533E44 DB 'S>D'
265.7 000B33 00 EVEN
265.8 000B34 IF 'DOCOLON'='DOCODE'
265.9 000B34 STOD: DW $+2
265.10 000B34 ELSE
265.11 000B34 .... STOD: DW DOCOLON
265.12 000B36 ENDIF
265.13 000B36 ENDM
266 000B36 ............ DW DUP,ZEROLESS,EXIT
- 4e-core430G2553 - Page 84
267 000B3C
268 000B3C ;Z ?NEGATE n1 n2 -- n3 negate n1 if n2
negative
269 000B3C ; 0< IF NEGATE THEN ; ...a common
factor
270 000B3C HEADER QNEGATE,7,'?NEGATE',DOCOLON
270.1 000000 PUBLIC QNEGATE
270.2 000B3C .... DW link
270.3 000B3E FF DB 0FFh ; not immediate
270.4 000B3F link SET $
270.5 000B3F 07 DB 7
270.6 000B40 3F4E45474154* DB '?NEGATE'
270.7 000B47 00 EVEN
270.8 000B48 IF 'DOCOLON'='DOCODE'
270.9 000B48 QNEGATE: DW $+2
270.10 000B48 ELSE
270.11 000B48 .... QNEGATE: DW DOCOLON
270.12 000B4A ENDIF
270.13 000B4A ENDM
271 000B4A ........ DW ZEROLESS,qbran
272 000B4E DEST QNEG1
272.1 000B4E 0400 DW QNEG1-$
272.2 000B50 ENDM
273 000B50 .... DW NEGATE
274 000B52 .... QNEG1: DW EXIT
275 000B54
276 000B54 ;C ABS n1 -- +n2 absolute value
277 000B54 ; DUP ?NEGATE ;
278 000B54 HEADER ABBS,3,'ABS',DOCOLON
278.1 000000 PUBLIC ABBS
278.2 000B54 .... DW link
278.3 000B56 FF DB 0FFh ; not immediate
278.4 000B57 link SET $
278.5 000B57 03 DB 3
278.6 000B58 414253 DB 'ABS'
278.7 000B5B 00 EVEN
278.8 000B5C IF 'DOCOLON'='DOCODE'
278.9 000B5C ABBS: DW $+2
278.10 000B5C ELSE
278.11 000B5C .... ABBS: DW DOCOLON
278.12 000B5E ENDIF
278.13 000B5E ENDM
279 000B5E ............ DW DUP,QNEGATE,EXIT
280 000B64
281 000B64 ;X DNEGATE d1 -- d2 negate double
precision
282 000B64 ; SWAP INVERT SWAP INVERT 1 M+ ;
283 000B64 HEADER DNEGATE,7,'DNEGATE',DOCOLON
283.1 000000 PUBLIC DNEGATE
283.2 000B64 .... DW link
283.3 000B66 FF DB 0FFh ; not immediate
283.4 000B67 link SET $
283.5 000B67 07 DB 7
283.6 000B68 444E45474154* DB 'DNEGATE'
283.7 000B6F 00 EVEN
283.8 000B70 IF 'DOCOLON'='DOCODE'
283.9 000B70 DNEGATE: DW $+2
283.10 000B70 ELSE
283.11 000B70 .... DNEGATE: DW DOCOLON
283.12 000B72 ENDIF
283.13 000B72 ENDM
284 000B72 ............* DW SWAP,INVERT,SWAP,INVERT,lit,1,MPLUS
285 000B80 .... DW EXIT
286 000B82
287 000B82 ;Z ?DNEGATE d1 n -- d2 negate d1 if n
negative
288 000B82 ; 0< IF DNEGATE THEN ; ...a common
factor
289 000B82 HEADER QDNEGATE,8,'?DNEGATE',DOCOLON
289.1 000000 PUBLIC QDNEGATE
289.2 000B82 .... DW link
289.3 000B84 FF DB 0FFh ; not immediate
289.4 000B85 link SET $
289.5 000B85 08 DB 8
289.6 000B86 3F444E454741* DB '?DNEGATE'
289.7 000B8E EVEN
289.8 000B8E IF 'DOCOLON'='DOCODE'
289.9 000B8E QDNEGATE: DW $+2
- 4e-core430G2553 - Page 85
289.10 000B8E ELSE
289.11 000B8E .... QDNEGATE: DW DOCOLON
289.12 000B90 ENDIF
289.13 000B90 ENDM
290 000B90 ........ DW ZEROLESS,qbran
291 000B94 DEST DNEG1
291.1 000B94 0400 DW DNEG1-$
291.2 000B96 ENDM
292 000B96 .... DW DNEGATE
293 000B98 .... DNEG1: DW EXIT
294 000B9A
295 000B9A ;X DABS d1 -- +d2 absolute value
dbl.prec.
296 000B9A ; DUP ?DNEGATE ;
297 000B9A HEADER DABS,4,'DABS',DOCOLON
297.1 000000 PUBLIC DABS
297.2 000B9A .... DW link
297.3 000B9C FF DB 0FFh ; not immediate
297.4 000B9D link SET $
297.5 000B9D 04 DB 4
297.6 000B9E 44414253 DB 'DABS'
297.7 000BA2 EVEN
297.8 000BA2 IF 'DOCOLON'='DOCODE'
297.9 000BA2 DABS: DW $+2
297.10 000BA2 ELSE
297.11 000BA2 .... DABS: DW DOCOLON
297.12 000BA4 ENDIF
297.13 000BA4 ENDM
298 000BA4 ............ DW DUP,QDNEGATE,EXIT
299 000BAA
300 000BAA ;C M* n1 n2 -- d signed 16*16->32
multiply
301 000BAA ; 2DUP XOR >R carries sign of the
result
302 000BAA ; SWAP ABS SWAP ABS UM*
303 000BAA ; R> ?DNEGATE ;
304 000BAA HEADER MSTAR,2,'M*',DOCOLON
304.1 000000 PUBLIC MSTAR
304.2 000BAA .... DW link
304.3 000BAC FF DB 0FFh ; not immediate
304.4 000BAD link SET $
304.5 000BAD 02 DB 2
304.6 000BAE 4D2A DB 'M*'
304.7 000BB0 EVEN
304.8 000BB0 IF 'DOCOLON'='DOCODE'
304.9 000BB0 MSTAR: DW $+2
304.10 000BB0 ELSE
304.11 000BB0 .... MSTAR: DW DOCOLON
304.12 000BB2 ENDIF
304.13 000BB2 ENDM
305 000BB2 ............ DW TWODUP,XORR,TOR
306 000BB8 ............* DW SWAP,ABBS,SWAP,ABBS,UMSTAR
307 000BC2 ............ DW RFROM,QDNEGATE,EXIT
308 000BC8
309 000BC8 ;C SM/REM d1 n1 -- n2 n3 symmetric signed
div
310 000BC8 ; 2DUP XOR >R sign of quotient
311 000BC8 ; OVER >R sign of remainder
312 000BC8 ; ABS >R DABS R> UM/MOD
313 000BC8 ; SWAP R> ?NEGATE
314 000BC8 ; SWAP R> ?NEGATE ;
315 000BC8 ; Ref. dpANS-6 section 3.2.2.1.
316 000BC8 HEADER SMSLASHREM,6,'SM/REM',DOCOLON
316.1 000000 PUBLIC SMSLASHREM
316.2 000BC8 .... DW link
316.3 000BCA FF DB 0FFh ; not immediate
316.4 000BCB link SET $
316.5 000BCB 06 DB 6
316.6 000BCC 534D2F52454D DB 'SM/REM'
316.7 000BD2 EVEN
316.8 000BD2 IF 'DOCOLON'='DOCODE'
316.9 000BD2 SMSLASHREM: DW $+2
316.10 000BD2 ELSE
316.11 000BD2 .... SMSLASHREM: DW DOCOLON
316.12 000BD4 ENDIF
316.13 000BD4 ENDM
317 000BD4 ............* DW TWODUP,XORR,TOR,OVER,TOR
318 000BDE ............* DW ABBS,TOR,DABS,RFROM,UMSLASHMOD
- 4e-core430G2553 - Page 86
319 000BE8 ............* DW SWAP,RFROM,QNEGATE,SWAP,RFROM,QNEGATE
320 000BF4 .... DW EXIT
321 000BF6
322 000BF6 ;C d1 n1 -- n2 n3 floored signed div'n
323 000BF6 ; courtesy of Ed
Smeda
324 000BF6 ; DUP >R SM/REM 2DUP 1 < AND IF
325 000BF6 ; SWAP R@ + SWAP 1- THEN
326 000BF6 ; R> DROP ;
327 000BF6 ; Ref. dpANS-6 section 3.2.2.1.
328 000BF6 ; HEADER FMSLASHMOD,6,'FM/MOD',DOCOLON
329 000BF6 ; DW DUP,TOR,SMSLASHREM
330 000BF6 ; DW TWODUP,lit,1,LESS,ANDD,qbran
331 000BF6 ; DEST FMMOD1
332 000BF6 ; DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS
333 000BF6 ;FMMOD1: DW RFROM,DROP,EXIT
334 000BF6
335 000BF6 ; Fixed FM/MOD, added 12 nov 2012
336 000BF6 ;C FM/MOD d1 n1 -- n2 n3 floored signed
div'n
337 000BF6 ; Ching-Tang Tseng
Mar 24 2012
338 000BF6 ; DUP >R OVER OVER XOR >R
339 000BF6 ; SM/REM
340 000BF6 ; OVER R> 0< AND
341 000BF6 ; IF SWAP R@ + SWAP 1 -
342 000BF6 ; THEN R> DROP ;
343 000BF6 ; 1 0 2 FM/MOD(OK) . . 0 1 ok
344 000BF6 ; 7 0 9 FM/MOD(OK) . . 0 7 ok
345 000BF6 ; Ref. dpANS-6 section 3.2.2.1.
346 000BF6 HEADER FMSLASHMOD,6,'FM/MOD',DOCOLON
346.1 000000 PUBLIC FMSLASHMOD
346.2 000BF6 .... DW link
346.3 000BF8 FF DB 0FFh ; not immediate
346.4 000BF9 link SET $
346.5 000BF9 06 DB 6
346.6 000BFA 464D2F4D4F44 DB 'FM/MOD'
346.7 000C00 EVEN
346.8 000C00 IF 'DOCOLON'='DOCODE'
346.9 000C00 FMSLASHMOD: DW $+2
346.10 000C00 ELSE
346.11 000C00 .... FMSLASHMOD: DW DOCOLON
346.12 000C02 ENDIF
346.13 000C02 ENDM
347 000C02 ............* DW DUP,TOR,OVER,OVER,XORR,TOR
348 000C0E .... DW SMSLASHREM
349 000C10 ............* DW OVER,RFROM,ZEROLESS,ANDD,qbran
350 000C1A DEST FMMOD1
350.1 000C1A 0C00 DW FMMOD1-$
350.2 000C1C ENDM
351 000C1C ............* DW SWAP,RFETCH,PLUS,SWAP,ONEMINUS
352 000C26 ............ FMMOD1: DW RFROM,DROP,EXIT
353 000C2C
354 000C2C ;C * n1 n2 -- n3 signed multiply
355 000C2C ; M* DROP ;
356 000C2C HEADER STAR,1,'*',DOCOLON
356.1 000000 PUBLIC STAR
356.2 000C2C .... DW link
356.3 000C2E FF DB 0FFh ; not immediate
356.4 000C2F link SET $
356.5 000C2F 01 DB 1
356.6 000C30 2A DB '*'
356.7 000C31 00 EVEN
356.8 000C32 IF 'DOCOLON'='DOCODE'
356.9 000C32 STAR: DW $+2
356.10 000C32 ELSE
356.11 000C32 .... STAR: DW DOCOLON
356.12 000C34 ENDIF
356.13 000C34 ENDM
357 000C34 ............ DW MSTAR,DROP,EXIT
358 000C3A
359 000C3A ;C /MOD n1 n2 -- n3 n4 signed divide/rem'dr
360 000C3A ; >R S>D R> FM/MOD ;
361 000C3A HEADER SLASHMOD,4,'/MOD',DOCOLON
361.1 000000 PUBLIC SLASHMOD
361.2 000C3A .... DW link
361.3 000C3C FF DB 0FFh ; not immediate
361.4 000C3D link SET $
- 4e-core430G2553 - Page 87
361.5 000C3D 04 DB 4
361.6 000C3E 2F4D4F44 DB '/MOD'
361.7 000C42 EVEN
361.8 000C42 IF 'DOCOLON'='DOCODE'
361.9 000C42 SLASHMOD: DW $+2
361.10 000C42 ELSE
361.11 000C42 .... SLASHMOD: DW DOCOLON
361.12 000C44 ENDIF
361.13 000C44 ENDM
362 000C44 ............* DW TOR,STOD,RFROM,FMSLASHMOD,EXIT
363 000C4E
364 000C4E ;C / n1 n2 -- n3 signed divide
365 000C4E ; /MOD nip ;
366 000C4E HEADER SLASH,1,'/',DOCOLON
366.1 000000 PUBLIC SLASH
366.2 000C4E .... DW link
366.3 000C50 FF DB 0FFh ; not immediate
366.4 000C51 link SET $
366.5 000C51 01 DB 1
366.6 000C52 2F DB '/'
366.7 000C53 00 EVEN
366.8 000C54 IF 'DOCOLON'='DOCODE'
366.9 000C54 SLASH: DW $+2
366.10 000C54 ELSE
366.11 000C54 .... SLASH: DW DOCOLON
366.12 000C56 ENDIF
366.13 000C56 ENDM
367 000C56 ............ DW SLASHMOD,NIP,EXIT
368 000C5C
369 000C5C ;C MOD n1 n2 -- n3 signed remainder
370 000C5C ; /MOD DROP ;
371 000C5C HEADER MODD,3,'MOD',DOCOLON
371.1 000000 PUBLIC MODD
371.2 000C5C .... DW link
371.3 000C5E FF DB 0FFh ; not immediate
371.4 000C5F link SET $
371.5 000C5F 03 DB 3
371.6 000C60 4D4F44 DB 'MOD'
371.7 000C63 00 EVEN
371.8 000C64 IF 'DOCOLON'='DOCODE'
371.9 000C64 MODD: DW $+2
371.10 000C64 ELSE
371.11 000C64 .... MODD: DW DOCOLON
371.12 000C66 ENDIF
371.13 000C66 ENDM
372 000C66 ............ DW SLASHMOD,DROP,EXIT
373 000C6C
374 000C6C ;C */MOD n1 n2 n3 -- n4 n5 n1*n2/n3,
rem"
375 000C6C ; >R M* R> FM/MOD ;
376 000C6C HEADER SSMOD,5,'*/MOD',DOCOLON
376.1 000000 PUBLIC SSMOD
376.2 000C6C .... DW link
376.3 000C6E FF DB 0FFh ; not immediate
376.4 000C6F link SET $
376.5 000C6F 05 DB 5
376.6 000C70 2A2F4D4F44 DB '*/MOD'
376.7 000C75 00 EVEN
376.8 000C76 IF 'DOCOLON'='DOCODE'
376.9 000C76 SSMOD: DW $+2
376.10 000C76 ELSE
376.11 000C76 .... SSMOD: DW DOCOLON
376.12 000C78 ENDIF
376.13 000C78 ENDM
377 000C78 ............* DW TOR,MSTAR,RFROM,FMSLASHMOD,EXIT
378 000C82
379 000C82 ;C */ n1 n2 n3 -- n4 n1*n2/n3
380 000C82 ; */MOD nip ;
381 000C82 HEADER STARSLASH,2,'*/',DOCOLON
381.1 000000 PUBLIC STARSLASH
381.2 000C82 .... DW link
381.3 000C84 FF DB 0FFh ; not immediate
381.4 000C85 link SET $
381.5 000C85 02 DB 2
381.6 000C86 2A2F DB '*/'
381.7 000C88 EVEN
381.8 000C88 IF 'DOCOLON'='DOCODE'
381.9 000C88 STARSLASH: DW $+2
- 4e-core430G2553 - Page 88
381.10 000C88 ELSE
381.11 000C88 .... STARSLASH: DW DOCOLON
381.12 000C8A ENDIF
381.13 000C8A ENDM
382 000C8A ............ DW SSMOD,NIP,EXIT
383 000C90
384 000C90 ;C MAX n1 n2 -- n3 signed maximum
385 000C90 ; 2DUP < IF SWAP THEN DROP ;
386 000C90 HEADER MAX,3,'MAX',DOCOLON
386.1 000000 PUBLIC MAX
386.2 000C90 .... DW link
386.3 000C92 FF DB 0FFh ; not immediate
386.4 000C93 link SET $
386.5 000C93 03 DB 3
386.6 000C94 4D4158 DB 'MAX'
386.7 000C97 00 EVEN
386.8 000C98 IF 'DOCOLON'='DOCODE'
386.9 000C98 MAX: DW $+2
386.10 000C98 ELSE
386.11 000C98 .... MAX: DW DOCOLON
386.12 000C9A ENDIF
386.13 000C9A ENDM
387 000C9A ............ DW TWODUP,LESS,qbran
388 000CA0 DEST MAX1
388.1 000CA0 0400 DW MAX1-$
388.2 000CA2 ENDM
389 000CA2 .... DW SWAP
390 000CA4 ........ MAX1: DW DROP,EXIT
391 000CA8
392 000CA8 ;C MIN n1 n2 -- n3 signed minimum
393 000CA8 ; 2DUP > IF SWAP THEN DROP ;
394 000CA8 HEADER MIN,3,'MIN',DOCOLON
394.1 000000 PUBLIC MIN
394.2 000CA8 .... DW link
394.3 000CAA FF DB 0FFh ; not immediate
394.4 000CAB link SET $
394.5 000CAB 03 DB 3
394.6 000CAC 4D494E DB 'MIN'
394.7 000CAF 00 EVEN
394.8 000CB0 IF 'DOCOLON'='DOCODE'
394.9 000CB0 MIN: DW $+2
394.10 000CB0 ELSE
394.11 000CB0 .... MIN: DW DOCOLON
394.12 000CB2 ENDIF
394.13 000CB2 ENDM
395 000CB2 ............ DW TWODUP,GREATER,qbran
396 000CB8 DEST MIN1
396.1 000CB8 0400 DW MIN1-$
396.2 000CBA ENDM
397 000CBA .... DW SWAP
398 000CBC ........ MIN1: DW DROP,EXIT
399 000CC0
400 000CC0 ; DOUBLE OPERATORS =============================
=
401 000CC0
402 000CC0 ;C 2@ a-addr -- x1 x2 fetch 2 cells
403 000CC0 ; DUP CELL+ @ SWAP @ ;
404 000CC0 ; the lower address will appear on top of
stack
405 000CC0 HEADER TWOFETCH,2,'2@',DOCOLON
405.1 000000 PUBLIC TWOFETCH
405.2 000CC0 .... DW link
405.3 000CC2 FF DB 0FFh ; not immediate
405.4 000CC3 link SET $
405.5 000CC3 02 DB 2
405.6 000CC4 3240 DB '2@'
405.7 000CC6 EVEN
405.8 000CC6 IF 'DOCOLON'='DOCODE'
405.9 000CC6 TWOFETCH: DW $+2
405.10 000CC6 ELSE
405.11 000CC6 .... TWOFETCH: DW DOCOLON
405.12 000CC8 ENDIF
405.13 000CC8 ENDM
406 000CC8 ............* DW DUP,CELLPLUS,FETCH,SWAP,FETCH,EXIT
407 000CD4
408 000CD4 ;C 2! x1 x2 a-addr -- store 2 cells
409 000CD4 ; SWAP OVER ! CELL+ ! ;
410 000CD4 ; the top of stack is stored at the lower
- 4e-core430G2553 - Page 89
adrs
411 000CD4 HEADER TWOSTORE,2,'2!',DOCOLON
411.1 000000 PUBLIC TWOSTORE
411.2 000CD4 .... DW link
411.3 000CD6 FF DB 0FFh ; not immediate
411.4 000CD7 link SET $
411.5 000CD7 02 DB 2
411.6 000CD8 3221 DB '2!'
411.7 000CDA EVEN
411.8 000CDA IF 'DOCOLON'='DOCODE'
411.9 000CDA TWOSTORE: DW $+2
411.10 000CDA ELSE
411.11 000CDA .... TWOSTORE: DW DOCOLON
411.12 000CDC ENDIF
411.13 000CDC ENDM
412 000CDC ............* DW SWAP,OVER,STORE,CELLPLUS,STORE,EXIT
413 000CE8
414 000CE8 ;C 2DROP x1 x2 -- drop 2 cells
415 000CE8 ; DROP DROP ;
416 000CE8 HEADER TWODROP,5,'2DROP',DOCOLON
416.1 000000 PUBLIC TWODROP
416.2 000CE8 .... DW link
416.3 000CEA FF DB 0FFh ; not immediate
416.4 000CEB link SET $
416.5 000CEB 05 DB 5
416.6 000CEC 3244524F50 DB '2DROP'
416.7 000CF1 00 EVEN
416.8 000CF2 IF 'DOCOLON'='DOCODE'
416.9 000CF2 TWODROP: DW $+2
416.10 000CF2 ELSE
416.11 000CF2 .... TWODROP: DW DOCOLON
416.12 000CF4 ENDIF
416.13 000CF4 ENDM
417 000CF4 ............ DW DROP,DROP,EXIT
418 000CFA
419 000CFA ;C 2DUP x1 x2 -- x1 x2 x1 x2 dup top 2
cells
420 000CFA ; OVER OVER ;
421 000CFA HEADER TWODUP,4,'2DUP',DOCOLON
421.1 000000 PUBLIC TWODUP
421.2 000CFA .... DW link
421.3 000CFC FF DB 0FFh ; not immediate
421.4 000CFD link SET $
421.5 000CFD 04 DB 4
421.6 000CFE 32445550 DB '2DUP'
421.7 000D02 EVEN
421.8 000D02 IF 'DOCOLON'='DOCODE'
421.9 000D02 TWODUP: DW $+2
421.10 000D02 ELSE
421.11 000D02 .... TWODUP: DW DOCOLON
421.12 000D04 ENDIF
421.13 000D04 ENDM
422 000D04 ............ DW OVER,OVER,EXIT
423 000D0A
424 000D0A ;C 2SWAP x1 x2 x3 x4 -- x3 x4 x1 x2 per
diagram
425 000D0A ; ROT >R ROT R> ;
426 000D0A HEADER TWOSWAP,5,'2SWAP',DOCOLON
426.1 000000 PUBLIC TWOSWAP
426.2 000D0A .... DW link
426.3 000D0C FF DB 0FFh ; not immediate
426.4 000D0D link SET $
426.5 000D0D 05 DB 5
426.6 000D0E 3253574150 DB '2SWAP'
426.7 000D13 00 EVEN
426.8 000D14 IF 'DOCOLON'='DOCODE'
426.9 000D14 TWOSWAP: DW $+2
426.10 000D14 ELSE
426.11 000D14 .... TWOSWAP: DW DOCOLON
426.12 000D16 ENDIF
426.13 000D16 ENDM
427 000D16 ............* DW ROT,TOR,ROT,RFROM,EXIT
428 000D20
429 000D20 ;C 2OVER x1 x2 x3 x4 -- x1 x2 x3 x4 x1
x2
430 000D20 ; >R >R 2DUP R> R> 2SWAP ;
431 000D20 HEADER TWOOVER,5,'2OVER',DOCOLON
431.1 000000 PUBLIC TWOOVER
- 4e-core430G2553 - Page 90
431.2 000D20 .... DW link
431.3 000D22 FF DB 0FFh ; not immediate
431.4 000D23 link SET $
431.5 000D23 05 DB 5
431.6 000D24 324F564552 DB '2OVER'
431.7 000D29 00 EVEN
431.8 000D2A IF 'DOCOLON'='DOCODE'
431.9 000D2A TWOOVER: DW $+2
431.10 000D2A ELSE
431.11 000D2A .... TWOOVER: DW DOCOLON
431.12 000D2C ENDIF
431.13 000D2C ENDM
432 000D2C ............* DW TOR,TOR,TWODUP,RFROM,RFROM
433 000D36 ........ DW TWOSWAP,EXIT
434 000D3A
435 000D3A ; INPUT/OUTPUT =================================
=
436 000D3A
437 000000 PUBLIC DOCR
438 000D3A
439 000D3A ;C COUNT c-addr1 -- c-addr2 u counted->adr/le
n
440 000D3A ; DUP CHAR+ SWAP C@ ;
441 000D3A HEADER COUNT,5,'COUNT',DOCOLON
441.1 000000 PUBLIC COUNT
441.2 000D3A .... DW link
441.3 000D3C FF DB 0FFh ; not immediate
441.4 000D3D link SET $
441.5 000D3D 05 DB 5
441.6 000D3E 434F554E54 DB 'COUNT'
441.7 000D43 00 EVEN
441.8 000D44 IF 'DOCOLON'='DOCODE'
441.9 000D44 COUNT: DW $+2
441.10 000D44 ELSE
441.11 000D44 .... COUNT: DW DOCOLON
441.12 000D46 ENDIF
441.13 000D46 ENDM
442 000D46 ............* DW DUP,CHARPLUS,SWAP,CFETCH,EXIT
443 000D50
444 000D50 ;C DOCR -- output newline
445 000D50 ; 0D EMIT 0A EMIT ;
446 000D50 HEADER DOCR,4,'DOCR',DOCOLON
446.1 000D50 PUBLIC DOCR
446.2 000D50 .... DW link
446.3 000D52 FF DB 0FFh ; not immediate
446.4 000D53 link SET $
446.5 000D53 04 DB 4
446.6 000D54 444F4352 DB 'DOCR'
446.7 000D58 EVEN
446.8 000D58 IF 'DOCOLON'='DOCODE'
446.9 000D58 DOCR: DW $+2
446.10 000D58 ELSE
446.11 000D58 .... DOCR: DW DOCOLON
446.12 000D5A ENDIF
446.13 000D5A ENDM
447 000D5A ....0D00....* DW lit,0dh,EMIT,lit,0ah,EMIT,EXIT
448 000D68
449 000D68 ;C CR -- output newline
450 000D68 ; userkey @ execute ;
451 000D68 HEADER CR,2,'CR',DOCOLON
451.1 000000 PUBLIC CR
451.2 000D68 .... DW link
451.3 000D6A FF DB 0FFh ; not immediate
451.4 000D6B link SET $
451.5 000D6B 02 DB 2
451.6 000D6C 4352 DB 'CR'
451.7 000D6E EVEN
451.8 000D6E IF 'DOCOLON'='DOCODE'
451.9 000D6E CR: DW $+2
451.10 000D6E ELSE
451.11 000D6E .... CR: DW DOCOLON
451.12 000D70 ENDIF
451.13 000D70 ENDM
452 000D70 ............* DW NEWLINE,FETCH,EXECUTE,EXIT
453 000D78
454 000D78 ;C SPACE -- output a space
455 000D78 ; BL EMIT ;
- 4e-core430G2553 - Page 91
456 000D78 HEADER SPACE,5,'SPACE',DOCOLON
456.1 000000 PUBLIC SPACE
456.2 000D78 .... DW link
456.3 000D7A FF DB 0FFh ; not immediate
456.4 000D7B link SET $
456.5 000D7B 05 DB 5
456.6 000D7C 5350414345 DB 'SPACE'
456.7 000D81 00 EVEN
456.8 000D82 IF 'DOCOLON'='DOCODE'
456.9 000D82 SPACE: DW $+2
456.10 000D82 ELSE
456.11 000D82 .... SPACE: DW DOCOLON
456.12 000D84 ENDIF
456.13 000D84 ENDM
457 000D84 ............ DW BLANK,EMIT,EXIT
458 000D8A
459 000D8A ;C SPACES n -- output n spaces
460 000D8A ; BEGIN DUP WHILE SPACE 1- REPEAT DROP
;
461 000D8A HEADER SPACES,6,'SPACES',DOCOLON
461.1 000000 PUBLIC SPACES
461.2 000D8A .... DW link
461.3 000D8C FF DB 0FFh ; not immediate
461.4 000D8D link SET $
461.5 000D8D 06 DB 6
461.6 000D8E 535041434553 DB 'SPACES'
461.7 000D94 EVEN
461.8 000D94 IF 'DOCOLON'='DOCODE'
461.9 000D94 SPACES: DW $+2
461.10 000D94 ELSE
461.11 000D94 .... SPACES: DW DOCOLON
461.12 000D96 ENDIF
461.13 000D96 ENDM
462 000D96 ........ SPCS1: DW DUP,qbran
463 000D9A DEST SPCS2
463.1 000D9A 0A00 DW SPCS2-$
463.2 000D9C ENDM
464 000D9C ............ DW SPACE,ONEMINUS,bran
465 000DA2 DEST SPCS1
465.1 000DA2 F4FF DW SPCS1-$
465.2 000DA4 ENDM
466 000DA4 ........ SPCS2: DW DROP,EXIT
467 000DA8
468 000DA8 ;Z umin u1 u2 -- u unsigned minimum
469 000DA8 ; 2DUP U> IF SWAP THEN DROP ;
470 000DA8 HEADER UMIN,4,'UMIN',DOCOLON
470.1 000000 PUBLIC UMIN
470.2 000DA8 .... DW link
470.3 000DAA FF DB 0FFh ; not immediate
470.4 000DAB link SET $
470.5 000DAB 04 DB 4
470.6 000DAC 554D494E DB 'UMIN'
470.7 000DB0 EVEN
470.8 000DB0 IF 'DOCOLON'='DOCODE'
470.9 000DB0 UMIN: DW $+2
470.10 000DB0 ELSE
470.11 000DB0 .... UMIN: DW DOCOLON
470.12 000DB2 ENDIF
470.13 000DB2 ENDM
471 000DB2 ............ DW TWODUP,UGREATER,qbran
472 000DB8 DEST UMIN1
472.1 000DB8 0400 DW UMIN1-$
472.2 000DBA ENDM
473 000DBA .... DW SWAP
474 000DBC ........ UMIN1: DW DROP,EXIT
475 000DC0
476 000DC0 ;Z umax u1 u2 -- u unsigned maximum
477 000DC0 ; 2DUP U< IF SWAP THEN DROP ;
478 000DC0 HEADER UMAX,4,'UMAX',DOCOLON
478.1 000000 PUBLIC UMAX
478.2 000DC0 .... DW link
478.3 000DC2 FF DB 0FFh ; not immediate
478.4 000DC3 link SET $
478.5 000DC3 04 DB 4
478.6 000DC4 554D4158 DB 'UMAX'
478.7 000DC8 EVEN
478.8 000DC8 IF 'DOCOLON'='DOCODE'
478.9 000DC8 UMAX: DW $+2
- 4e-core430G2553 - Page 92
478.10 000DC8 ELSE
478.11 000DC8 .... UMAX: DW DOCOLON
478.12 000DCA ENDIF
478.13 000DCA ENDM
479 000DCA ............ DW TWODUP,ULESS,qbran
480 000DD0 DEST UMAX1
480.1 000DD0 0400 DW UMAX1-$
480.2 000DD2 ENDM
481 000DD2 .... DW SWAP
482 000DD4 ........ UMAX1: DW DROP,EXIT
483 000DD8
484 000DD8 ; C .ERR# n -- print error
number
485 000DD8 HEADER DOTERRN,5,'.ERR#',DOCOLON
485.1 000000 PUBLIC DOTERRN
485.2 000DD8 .... DW link
485.3 000DDA FF DB 0FFh ; not immediate
485.4 000DDB link SET $
485.5 000DDB 05 DB 5
485.6 000DDC 2E45525223 DB '.ERR#'
485.7 000DE1 00 EVEN
485.8 000DE2 IF 'DOCOLON'='DOCODE'
485.9 000DE2 DOTERRN: DW $+2
485.10 000DE2 ELSE
485.11 000DE2 .... DOTERRN: DW DOCOLON
485.12 000DE4 ENDIF
485.13 000DE4 ENDM
486 000DE4 ....1500.... DW lit,15H,EMIT ; emit a NAK ($15)
487 000DEA ....3F00.... DW lit,3FH,EMIT
488 000DF0 ............* DW BASE,FETCH,TOR,DECIMAL
489 000DF8 .... DW DOT
490 000DFA ............ DW RFROM,BASE,STORE
491 000E00 .... DW EXIT
492 000E02
493 000E02 ; C ?TIB adr1 adr2 -- error if line
too long
494 000E02 HEADERLESS QTIB,4,'?TIB',DOCOLON
494.1 000000 PUBLIC QTIB
494.2 000E02 IF 'DOCOLON'='DOCODE'
494.3 000E02 QTIB: DW $+2
494.4 000E02 ELSE
494.5 000E02 .... QTIB: DW DOCOLON
494.6 000E04 ENDIF
494.7 000E04 ENDM
495 000E04 ........ DW GREATER,qbran
496 000E08 DEST QTIB1
496.1 000E08 0C00 DW QTIB1-$
496.2 000E0A ENDM
497 000E0A ....9601.... DW lit,406,DOTERRN
498 000E10 ........ DW CR,ABORT
499 000E14 .... QTIB1: DW EXIT
500 000E16
501 000E16 ;C ACCEPT c-addr +n -- +n' get line from
term'l
502 000E16 ; OVER + 1- OVER -- sa ea a
503 000E16 ; BEGIN KEY -- sa ea a c
504 000E16 ; DUP 0D <> WHILE
505 000E16 ; DUP EMIT -- sa ea a c
506 000E16 ; DUP 8 = IF DROP 1- >R OVER R>
UMAX
507 000E16 ; ELSE OVER C! 1+ OVER UMIN
508 000E16 ; THEN -- sa ea a
509 000E16 ; REPEAT -- sa ea a c
510 000E16 ; DROP NIP SWAP - ;
511 000E16 HEADER ACCEPT,6,'ACCEPT',DOCOLON
511.1 000000 PUBLIC ACCEPT
511.2 000E16 .... DW link
511.3 000E18 FF DB 0FFh ; not immediate
511.4 000E19 link SET $
511.5 000E19 06 DB 6
511.6 000E1A 414343455054 DB 'ACCEPT'
511.7 000E20 EVEN
511.8 000E20 IF 'DOCOLON'='DOCODE'
511.9 000E20 ACCEPT: DW $+2
511.10 000E20 ELSE
511.11 000E20 .... ACCEPT: DW DOCOLON
511.12 000E22 ENDIF
511.13 000E22 ENDM
- 4e-core430G2553 - Page 93
512 000E22 ............* DW OVER,PLUS,ONEMINUS,OVER
513 000E2A ACC1: ; DW KEY,DUP,lit,0DH,NOTEQUAL,qbran
514 000E2A .... DW KEY
515 000E2C ........0D00* DW DUP,lit,0DH,NOTEQUAL ; ( -- c f )
CR
516 000E34 ; DW OVER,lit,0AH,NOTEQUAL ; ( -- c f f )
LF
517 000E34 ; DW ANDD
518 000E34 .... DW qbran
519 000E36 DEST ACC5
519.1 000E36 3A00 DW ACC5-$
519.2 000E38 ENDM
520 000E38 ........ DW DUP,EMIT
521 000E3C ; DW DUP,STORELEDS ; testing
522 000E3C ........0800* DW DUP,lit,8,EQUAL,qbran ;mk BS
received?
523 000E46 DEST ACC3
523.1 000E46 1A00 DW ACC3-$
523.2 000E48 ENDM
524 000E48 ............* DW DROP,ONEMINUS,TOR,OVER,RFROM,UMAX ;mk
backspace handling
525 000E54 ........0800* DW SPACE,lit,8,EMIT ;mk $08 == BS (for
tera term and
hyterterminal)
526 000E5C .... DW bran
527 000E5E DEST ACC4
527.1 000E5E 0E00 DW ACC4-$
527.2 000E60 ENDM
528 000E60 ; ( -- sa ea a c )
529 000E60 ............ ACC3: DW OVER,CSTORE,ONEPLUS
530 000E66 ; ( -- sa ea a+1 )
531 000E66 ; DW OVER,UMIN ; einfacher zähler
stillstand
532 000E66 ............ DW TWODUP,SWAP,QTIB ; line too
long?
533 000E6C .... ACC4: DW bran
534 000E6E DEST ACC1
534.1 000E6E BCFF DW ACC1-$
534.2 000E70 ENDM
535 000E70 ............*ACC5: DW DROP,NIP,SWAP,MINUS,EXIT
536 000E7A
537 000E7A ;C TYPE c-addr +n -- type line to
term'l
538 000E7A ; ?DUP IF
539 000E7A ; OVER + SWAP DO I C@ EMIT LOOP
540 000E7A ; ELSE DROP THEN ;
541 000E7A HEADER TYP,4,'TYPE',DOCOLON
541.1 000000 PUBLIC TYP
541.2 000E7A .... DW link
541.3 000E7C FF DB 0FFh ; not immediate
541.4 000E7D link SET $
541.5 000E7D 04 DB 4
541.6 000E7E 54595045 DB 'TYPE'
541.7 000E82 EVEN
541.8 000E82 IF 'DOCOLON'='DOCODE'
541.9 000E82 TYP: DW $+2
541.10 000E82 ELSE
541.11 000E82 .... TYP: DW DOCOLON
541.12 000E84 ENDIF
541.13 000E84 ENDM
542 000E84 ........ DW QDUP,qbran
543 000E88 DEST TYP4
543.1 000E88 1800 DW TYP4-$
543.2 000E8A ENDM
544 000E8A ............* DW OVER,PLUS,SWAP,xdo
545 000E92 ............*TYP3: DW II,CFETCH,EMIT,xloop
546 000E9A DEST TYP3
546.1 000E9A F8FF DW TYP3-$
546.2 000E9C ENDM
547 000E9C .... DW bran
548 000E9E DEST TYP5
548.1 000E9E 0400 DW TYP5-$
548.2 000EA0 ENDM
549 000EA0 .... TYP4: DW DROP
550 000EA2 .... TYP5: DW EXIT
551 000EA4
552 000EA4 #define ITYPE TYP
553 000EA4 #define ICOUNT COUNT
- 4e-core430G2553 - Page 94
554 000EA4
555 000EA4 ; HARVARD MODEL EXTENSIONS (split Code &
Data)
556 000EA4
557 000EA4 /*
558 000EA4 ;Z ICOUNT c-addr1 -- c-addr2 u counted->adr/le
n
559 000EA4 ; DUP CHAR+ SWAP IC@ ; from Code
space
560 000EA4 HEADER ICOUNT,6,'ICOUNT',DOCOLON
561 000EA4 DW DUP,CHARPLUS,SWAP,ICFETCH,EXIT
562 000EA4
563 000EA4 ;Z ITYPE c-addr +n -- type line to
term'l
564 000EA4 ; ?DUP IF from Code
space
565 000EA4 ; OVER + SWAP DO I IC@ EMIT LOOP
566 000EA4 ; ELSE DROP THEN ;
567 000EA4 HEADER ITYPE,5,'ITYPE',DOCOLON
568 000EA4 DW QDUP,qbran
569 000EA4 DEST ITYP4
570 000EA4 DW OVER,PLUS,SWAP,xdo
571 000EA4 ITYP3: DW II,ICFETCH,EMIT,xloop
572 000EA4 DEST ITYP3
573 000EA4 DW bran
574 000EA4 DEST ITYP5
575 000EA4 ITYP4: DW DROP
576 000EA4 ITYP5: DW EXIT
577 000EA4 */
578 000EA4
579 000EA4
580 000EA4 ;Z (IS") -- c-addr u run-time code for
S"
581 000EA4 ; R> ICOUNT 2DUP + ALIGNED >R ;
582 000EA4 ; Harvard model, for string stored in Code
space
583 000EA4 ; e.g. as used by ."
584 000EA4 HEADER XISQUOTE,5,'(IS")',DOCOLON
584.1 000000 PUBLIC XISQUOTE
584.2 000EA4 .... DW link
584.3 000EA6 FF DB 0FFh ; not immediate
584.4 000EA7 link SET $
584.5 000EA7 05 DB 5
584.6 000EA8 2849532229 DB '(IS")'
584.7 000EAD 00 EVEN
584.8 000EAE IF 'DOCOLON'='DOCODE'
584.9 000EAE XISQUOTE: DW $+2
584.10 000EAE ELSE
584.11 000EAE .... XISQUOTE: DW DOCOLON
584.12 000EB0 ENDIF
584.13 000EB0 ENDM
585 000EB0 ............* DW RFROM,ICOUNT,TWODUP,PLUS,ALIGNED,TOR
586 000EBC .... DW EXIT
587 000EBE
588 000EBE ;Z (S") -- c-addr u run-time code for
S"
589 000EBE ; R@ I@ get Data
address
590 000EBE ; R> CELL+ DUP IC@ CHAR+ -- Dadr Radr+2
n+1
591 000EBE ; 2DUP + ALIGNED >R -- Dadr Iadr
n+1
592 000EBE ; >R OVER R> I->D -- Dadr
593 000EBE ; COUNT ;
594 000EBE ; Harvard model, for string stored in Code
space
595 000EBE ; which is copied to Data space.
596 000EBE HEADER XSQUOTE,4,'(S")',DOCOLON
596.1 000000 PUBLIC XSQUOTE
596.2 000EBE .... DW link
596.3 000EC0 FF DB 0FFh ; not immediate
596.4 000EC1 link SET $
596.5 000EC1 04 DB 4
596.6 000EC2 28532229 DB '(S")'
596.7 000EC6 EVEN
596.8 000EC6 IF 'DOCOLON'='DOCODE'
596.9 000EC6 XSQUOTE: DW $+2
596.10 000EC6 ELSE
- 4e-core430G2553 - Page 95
596.11 000EC6 .... XSQUOTE: DW DOCOLON
596.12 000EC8 ENDIF
596.13 000EC8 ENDM
597 000EC8 ........ DW RFETCH,IFETCH
598 000ECC ............* DW RFROM,CELLPLUS,DUP,ICFETCH,CHARPLUS
599 000ED6 ............* DW TWODUP,PLUS,ALIGNED,TOR
600 000EDE ............* DW TOR,OVER,RFROM,ITOD,COUNT,EXIT
601 000EEA
602 000EEA ;Z IS" -- compile in-line
string
603 000EEA ; COMPILE (IS") [ HEX ]
604 000EEA ; 22 PARSE ( -- c-addr n )
605 000EEA ; DUP >R IC, IHERE R@ D->I
606 000EEA ; R> IALLOT ALIGN ; IMMEDIATE
607 000EEA ; Harvard model: string is stored in Code
space
608 000EEA IMMED ISQUOTE,3,'IS"',DOCOLON
608.1 000000 PUBLIC ISQUOTE
608.2 000EEA .... DW link
608.3 000EEC FE DB 0FEh // ; immediate
(LSB=0)
608.4 000EED link SET $
608.5 000EED 03 DB 3
608.6 000EEE 495322 DB 'IS"'
608.7 000EF1 00 EVEN
608.8 000EF2 IF 'DOCOLON'='DOCODE'
608.9 000EF2 ISQUOTE: DW $+2
608.10 000EF2 ELSE
608.11 000EF2 .... ISQUOTE: DW DOCOLON
608.12 000EF4 ENDIF
608.13 000EF4 ENDM
609 000EF4 ............ DW lit,XISQUOTE,COMMAXT
610 000EFA ....2200.... DW lit,22H,PARSE
611 000F00 ............* DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI
612 000F0C ............* DW RFROM,IALLOT,ALIGNN,EXIT
613 000F14
614 000F14 ;Z IS" -- compile in-line string
OLD DEF'N
615 000F14 ; COMPILE (IS") [ HEX ]
616 000F14 ; 22 IWORD
617 000F14 ; IC@ 1+ ALIGNED IALLOT ; IMMEDIATE
618 000F14 ; Harvard model: string is stored in Code
space
619 000F14 ; IMMED ISQUOTE,3,'IS"',DOCOLON
620 000F14 ; DW lit,XISQUOTE,COMMAXT
621 000F14 ; DW lit,22H,IWORD
622 000F14 ; DW ICFETCH,ONEPLUS,ALIGNED,IALLOT,EXIT
623 000F14
624 000F14 ;C S" -- compile in-line
string
625 000F14 ; COMPILE (S") [ HEX ]
626 000F14 ; HERE I, data address
627 000F14 ; 22 PARSE ( -- c-addr n )
628 000F14 ; DUP >R IC, IHERE R@ D->I
629 000F14 ; R@ 1+ ALLOT reserve RAM
space
630 000F14 ; R> IALLOT ALIGN ; IMMEDIATE
631 000F14 ; Harvard model: string is stored in Code
space
632 000F14 IMMED SQUOTE,2,'S"',DOCOLON
632.1 000000 PUBLIC SQUOTE
632.2 000F14 .... DW link
632.3 000F16 FE DB 0FEh // ; immediate
(LSB=0)
632.4 000F17 link SET $
632.5 000F17 02 DB 2
632.6 000F18 5322 DB 'S"'
632.7 000F1A EVEN
632.8 000F1A IF 'DOCOLON'='DOCODE'
632.9 000F1A SQUOTE: DW $+2
632.10 000F1A ELSE
632.11 000F1A .... SQUOTE: DW DOCOLON
632.12 000F1C ENDIF
632.13 000F1C ENDM
633 000F1C ............ DW lit,XSQUOTE,COMMAXT
634 000F22 ............* DW HERE,ICOMMA,lit,22H,PARSE
635 000F2C ............* DW DUP,TOR,ICCOMMA,IHERE,RFETCH,DTOI
636 000F38 ............ DW RFETCH,ONEPLUS,ALLOT
- 4e-core430G2553 - Page 96
637 000F3E ............* DW RFROM,IALLOT,ALIGNN,EXIT
638 000F46
639 000F46 ;C S" -- compile in-line
string OLD DEF'N
640 000F46 ; COMPILE (S") [ HEX ]
641 000F46 ; HERE I, data address
642 000F46 ; 22 IWORD
643 000F46 ; IC@ 1+ ALIGNED
644 000F46 ; DUP ALLOT IALLOT ; IMMEDIATE
645 000F46 ; Harvard model: string is stored in Code
space
646 000F46 ; IMMED SQUOTE,2,'S"',DOCOLON
647 000F46 ; DW lit,XSQUOTE,COMMAXT
648 000F46 ; DW HERE,ICOMMA,lit,22H,IWORD
649 000F46 ; DW ICFETCH,ONEPLUS,ALIGNED
650 000F46 ; DW DUP,ALLOT,IALLOT,EXIT
651 000F46
652 000F46 ;C ." -- compile string to
print
653 000F46 ; POSTPONE IS" POSTPONE ITYPE ; IMMEDIATE
654 000F46 IMMED DOTQUOTE,2,'."',DOCOLON
654.1 000000 PUBLIC DOTQUOTE
654.2 000F46 .... DW link
654.3 000F48 FE DB 0FEh // ; immediate
(LSB=0)
654.4 000F49 link SET $
654.5 000F49 02 DB 2
654.6 000F4A 2E22 DB '."'
654.7 000F4C EVEN
654.8 000F4C IF 'DOCOLON'='DOCODE'
654.9 000F4C DOTQUOTE: DW $+2
654.10 000F4C ELSE
654.11 000F4C .... DOTQUOTE: DW DOCOLON
654.12 000F4E ENDIF
654.13 000F4E ENDM
655 000F4E .... DW ISQUOTE
656 000F50 ............ DW lit,ITYPE,COMMAXT
657 000F56 .... DW EXIT
658 000F58
659 000F58 ;Z IWORD c -- c-addr WORD to Code
space
660 000F58 ; WORD
661 000F58 ; IHERE TUCK OVER C@ CHAR+ D->I ;
662 000F58 HEADER IWORD,5,'IWORD',DOCOLON
662.1 000000 PUBLIC IWORD
662.2 000F58 .... DW link
662.3 000F5A FF DB 0FFh ; not immediate
662.4 000F5B link SET $
662.5 000F5B 05 DB 5
662.6 000F5C 49574F5244 DB 'IWORD'
662.7 000F61 00 EVEN
662.8 000F62 IF 'DOCOLON'='DOCODE'
662.9 000F62 IWORD: DW $+2
662.10 000F62 ELSE
662.11 000F62 .... IWORD: DW DOCOLON
662.12 000F64 ENDIF
662.13 000F64 ENDM
663 000F64 .... DW WORDD
664 000F66 ............*IWORD1: DW IHERE,TUCK,OVER,CFETCH
665 000F6E ............ DW CHARPLUS,DTOI,EXIT
666 000F74
667 000F74 ;Z IWORDC c -- c-addr maybe capitalize
WORD to Code space
668 000F74 ; WORD CAPITALIZE
669 000F74 ; IHERE TUCK OVER C@ CHAR+ D->I ;
670 000F74 ; HEADER IWORDC,6,'IWORDC',DOCOLON
671 000F74 HEADLESS IWORDC, DOCOLON
671.1 000000 PUBLIC IWORDC
671.2 000F74 IF 'DOCOLON'='DOCODE'
671.3 000F74 IWORDC: DW $+2
671.4 000F74 ELSE
671.5 000F74 .... IWORDC: DW DOCOLON
671.6 000F76 ENDIF
671.7 000F76 ENDM
672 000F76 ........ DW WORDD, CAPITALIZE
673 000F7A .... DW bran
674 000F7C DEST IWORD1
674.1 000F7C EAFF DW IWORD1-$
- 4e-core430G2553 - Page 97
674.2 000F7E ENDM
675 000F7E
676 000F7E ; SEPARATE HEADER EXTENSIONS ARE NOT USED
677 000F7E #define HCOUNT ICOUNT
678 000F7E #define HTYPE ITYPE
679 000F7E #define HWORD IWORDC
680 000F7E
681 000F7E ; NUMERIC OUTPUT ===============================
=
682 000F7E ; Numeric conversion is done l.s.digit first,
so
683 000F7E ; the output buffer is built backwards in
memory.
684 000F7E
685 000F7E ; Some double-precision arithmetic operators
are
686 000F7E ; needed to implement ANSI numeric conversion.
687 000F7E
688 000F7E ;Z UD/MOD ud1 u2 -- u3 ud4 32/16->32
divide
689 000F7E ; >R 0 R@ UM/MOD ROT ROT R> UM/MOD ROT
;
690 000F7E HEADER UDSLASHMOD,6,'UD/MOD',DOCOLON
690.1 000000 PUBLIC UDSLASHMOD
690.2 000F7E .... DW link
690.3 000F80 FF DB 0FFh ; not immediate
690.4 000F81 link SET $
690.5 000F81 06 DB 6
690.6 000F82 55442F4D4F44 DB 'UD/MOD'
690.7 000F88 EVEN
690.8 000F88 IF 'DOCOLON'='DOCODE'
690.9 000F88 UDSLASHMOD: DW $+2
690.10 000F88 ELSE
690.11 000F88 .... UDSLASHMOD: DW DOCOLON
690.12 000F8A ENDIF
690.13 000F8A ENDM
691 000F8A ............* DW TOR,ZERO,RFETCH,UMSLASHMOD,ROT,ROT
692 000F96 ............* DW RFROM,UMSLASHMOD,ROT,EXIT
693 000F9E
694 000F9E ;Z UD* ud1 d2 -- ud3 32*16->32
multiply
695 000F9E ; DUP >R UM* DROP SWAP R> UM* ROT +
;
696 000F9E HEADER UDSTAR,3,'UD*',DOCOLON
696.1 000000 PUBLIC UDSTAR
696.2 000F9E .... DW link
696.3 000FA0 FF DB 0FFh ; not immediate
696.4 000FA1 link SET $
696.5 000FA1 03 DB 3
696.6 000FA2 55442A DB 'UD*'
696.7 000FA5 00 EVEN
696.8 000FA6 IF 'DOCOLON'='DOCODE'
696.9 000FA6 UDSTAR: DW $+2
696.10 000FA6 ELSE
696.11 000FA6 .... UDSTAR: DW DOCOLON
696.12 000FA8 ENDIF
696.13 000FA8 ENDM
697 000FA8 ............* DW DUP,TOR,UMSTAR,DROP
698 000FB0 ............* DW SWAP,RFROM,UMSTAR,ROT,PLUS,EXIT
699 000FBC
700 000FBC ;C HOLD char -- add char to output
string
701 000FBC ; -1 HP +! HP @ C! ;
702 000FBC HEADER HOLD,4,'HOLD',DOCOLON
702.1 000000 PUBLIC HOLD
702.2 000FBC .... DW link
702.3 000FBE FF DB 0FFh ; not immediate
702.4 000FBF link SET $
702.5 000FBF 04 DB 4
702.6 000FC0 484F4C44 DB 'HOLD'
702.7 000FC4 EVEN
702.8 000FC4 IF 'DOCOLON'='DOCODE'
702.9 000FC4 HOLD: DW $+2
702.10 000FC4 ELSE
702.11 000FC4 .... HOLD: DW DOCOLON
702.12 000FC6 ENDIF
702.13 000FC6 ENDM
703 000FC6 ....FFFF....* DW lit,-1,HP,PLUSSTORE
- 4e-core430G2553 - Page 98
704 000FCE ............* DW HP,FETCH,CSTORE,EXIT
705 000FD6
706 000FD6 ;C <# -- begin numeric conversion
707 000FD6 ; PAD HP ! ; (initialize Hold
Pointer)
708 000FD6 HEADER LESSNUM,2,'<#',DOCOLON
708.1 000000 PUBLIC LESSNUM
708.2 000FD6 .... DW link
708.3 000FD8 FF DB 0FFh ; not immediate
708.4 000FD9 link SET $
708.5 000FD9 02 DB 2
708.6 000FDA 3C23 DB '<#'
708.7 000FDC EVEN
708.8 000FDC IF 'DOCOLON'='DOCODE'
708.9 000FDC LESSNUM: DW $+2
708.10 000FDC ELSE
708.11 000FDC .... LESSNUM: DW DOCOLON
708.12 000FDE ENDIF
708.13 000FDE ENDM
709 000FDE ............* DW PAD,HP,STORE,EXIT
710 000FE6
711 000FE6 ;Z >digit n -- c convert to 0..9A..Z
712 000FE6 ; [ HEX ] DUP 9 > 7 AND + 30 + ;
713 000FE6 HEADER TODIGIT,6,'>DIGIT',DOCOLON
713.1 000000 PUBLIC TODIGIT
713.2 000FE6 .... DW link
713.3 000FE8 FF DB 0FFh ; not immediate
713.4 000FE9 link SET $
713.5 000FE9 06 DB 6
713.6 000FEA 3E4449474954 DB '>DIGIT'
713.7 000FF0 EVEN
713.8 000FF0 IF 'DOCOLON'='DOCODE'
713.9 000FF0 TODIGIT: DW $+2
713.10 000FF0 ELSE
713.11 000FF0 .... TODIGIT: DW DOCOLON
713.12 000FF2 ENDIF
713.13 000FF2 ENDM
714 000FF2 ........0900* DW DUP,lit,9,GREATER,lit,7,ANDD,PLUS
715 001002 ....3000....* DW lit,30H,PLUS,EXIT
716 00100A
717 00100A ;C # ud1 -- ud2 convert 1 digit of
output
718 00100A ; BASE @ UD/MOD ROT >digit HOLD ;
719 00100A HEADER NUM,1,'#',DOCOLON
719.1 000000 PUBLIC NUM
719.2 00100A .... DW link
719.3 00100C FF DB 0FFh ; not immediate
719.4 00100D link SET $
719.5 00100D 01 DB 1
719.6 00100E 23 DB '#'
719.7 00100F 00 EVEN
719.8 001010 IF 'DOCOLON'='DOCODE'
719.9 001010 NUM: DW $+2
719.10 001010 ELSE
719.11 001010 .... NUM: DW DOCOLON
719.12 001012 ENDIF
719.13 001012 ENDM
720 001012 ............* DW BASE,FETCH,UDSLASHMOD,ROT,TODIGIT
721 00101C ........ DW HOLD,EXIT
722 001020
723 001020 ;C #S ud1 -- ud2 convert remaining
digits
724 001020 ; BEGIN # 2DUP OR 0= UNTIL ;
725 001020 HEADER NUMS,2,'#S',DOCOLON
725.1 000000 PUBLIC NUMS
725.2 001020 .... DW link
725.3 001022 FF DB 0FFh ; not immediate
725.4 001023 link SET $
725.5 001023 02 DB 2
725.6 001024 2353 DB '#S'
725.7 001026 EVEN
725.8 001026 IF 'DOCOLON'='DOCODE'
725.9 001026 NUMS: DW $+2
725.10 001026 ELSE
725.11 001026 .... NUMS: DW DOCOLON
725.12 001028 ENDIF
725.13 001028 ENDM
726 001028 ............*NUMS1: DW NUM,TWODUP,ORR,ZEROEQUAL,qbran
- 4e-core430G2553 - Page 99
727 001032 DEST NUMS1
727.1 001032 F6FF DW NUMS1-$
727.2 001034 ENDM
728 001034 .... DW EXIT
729 001036
730 001036 ;C #> ud1 -- c-addr u end conv., get
string
731 001036 ; 2DROP HP @ PAD OVER - ;
732 001036 HEADER NUMGREATER,2,'#>',DOCOLON
732.1 000000 PUBLIC NUMGREATER
732.2 001036 .... DW link
732.3 001038 FF DB 0FFh ; not immediate
732.4 001039 link SET $
732.5 001039 02 DB 2
732.6 00103A 233E DB '#>'
732.7 00103C EVEN
732.8 00103C IF 'DOCOLON'='DOCODE'
732.9 00103C NUMGREATER: DW $+2
732.10 00103C ELSE
732.11 00103C .... NUMGREATER: DW DOCOLON
732.12 00103E ENDIF
732.13 00103E ENDM
733 00103E ............* DW TWODROP,HP,FETCH,PAD,OVER,MINUS,EXIT
734 00104C
735 00104C ;C SIGN n -- add minus sign if
n<0
736 00104C ; 0< IF 2D HOLD THEN ;
737 00104C HEADER SIGN,4,'SIGN',DOCOLON
737.1 000000 PUBLIC SIGN
737.2 00104C .... DW link
737.3 00104E FF DB 0FFh ; not immediate
737.4 00104F link SET $
737.5 00104F 04 DB 4
737.6 001050 5349474E DB 'SIGN'
737.7 001054 EVEN
737.8 001054 IF 'DOCOLON'='DOCODE'
737.9 001054 SIGN: DW $+2
737.10 001054 ELSE
737.11 001054 .... SIGN: DW DOCOLON
737.12 001056 ENDIF
737.13 001056 ENDM
738 001056 ........ DW ZEROLESS,qbran
739 00105A DEST SIGN1
739.1 00105A 0800 DW SIGN1-$
739.2 00105C ENDM
740 00105C ....2D00.... DW lit,2DH,HOLD
741 001062 .... SIGN1: DW EXIT
742 001064
743 001064 ;C U. u -- display u unsigned
744 001064 ; <# 0 #S #> TYPE SPACE ;
745 001064 HEADER UDOT,2,'U.',DOCOLON
745.1 000000 PUBLIC UDOT
745.2 001064 .... DW link
745.3 001066 FF DB 0FFh ; not immediate
745.4 001067 link SET $
745.5 001067 02 DB 2
745.6 001068 552E DB 'U.'
745.7 00106A EVEN
745.8 00106A IF 'DOCOLON'='DOCODE'
745.9 00106A UDOT: DW $+2
745.10 00106A ELSE
745.11 00106A .... UDOT: DW DOCOLON
745.12 00106C ENDIF
745.13 00106C ENDM
746 00106C ............* DW LESSNUM,ZERO,NUMS,NUMGREATER,TYP
747 001076 ........ DW SPACE,EXIT
748 00107A
749 00107A ;C . n -- display n signed
750 00107A ; <# DUP ABS 0 #S ROT SIGN #> TYPE SPACE
;
751 00107A HEADER DOT,1,'.',DOCOLON
751.1 000000 PUBLIC DOT
751.2 00107A .... DW link
751.3 00107C FF DB 0FFh ; not immediate
751.4 00107D link SET $
751.5 00107D 01 DB 1
751.6 00107E 2E DB '.'
751.7 00107F 00 EVEN
- 4e-core430G2553 - Page 100
751.8 001080 IF 'DOCOLON'='DOCODE'
751.9 001080 DOT: DW $+2
751.10 001080 ELSE
751.11 001080 .... DOT: DW DOCOLON
751.12 001082 ENDIF
751.13 001082 ENDM
752 001082 ............* DW LESSNUM,DUP,ABBS,ZERO,NUMS
753 00108C ............* DW ROT,SIGN,NUMGREATER,TYP,SPACE,EXIT
754 001098
755 001098 ;C DECIMAL -- set number base to
decimal
756 001098 ; 10 BASE ! ;
757 001098 HEADER DECIMAL,7,'DECIMAL',DOCOLON
757.1 000000 PUBLIC DECIMAL
757.2 001098 .... DW link
757.3 00109A FF DB 0FFh ; not immediate
757.4 00109B link SET $
757.5 00109B 07 DB 7
757.6 00109C 444543494D41* DB 'DECIMAL'
757.7 0010A3 00 EVEN
757.8 0010A4 IF 'DOCOLON'='DOCODE'
757.9 0010A4 DECIMAL: DW $+2
757.10 0010A4 ELSE
757.11 0010A4 .... DECIMAL: DW DOCOLON
757.12 0010A6 ENDIF
757.13 0010A6 ENDM
758 0010A6 ....0A00....* DW lit,10,BASE,STORE,EXIT
759 0010B0
760 0010B0 ;X HEX -- set number base to
hex
761 0010B0 ; 16 BASE ! ;
762 0010B0 HEADER HEX,3,'HEX',DOCOLON
762.1 000000 PUBLIC HEX
762.2 0010B0 .... DW link
762.3 0010B2 FF DB 0FFh ; not immediate
762.4 0010B3 link SET $
762.5 0010B3 03 DB 3
762.6 0010B4 484558 DB 'HEX'
762.7 0010B7 00 EVEN
762.8 0010B8 IF 'DOCOLON'='DOCODE'
762.9 0010B8 HEX: DW $+2
762.10 0010B8 ELSE
762.11 0010B8 .... HEX: DW DOCOLON
762.12 0010BA ENDIF
762.13 0010BA ENDM
763 0010BA ....1000....* DW lit,16,BASE,STORE,EXIT
764 0010C4
765 0010C4 ; DICTIONARY MANAGEMENT ========================
=
766 0010C4
767 0010C4 ;C HERE -- addr returns dictionary
ptr
768 0010C4 ; DP @ ;
769 0010C4 HEADER HERE,4,'HERE',DOCOLON
769.1 000000 PUBLIC HERE
769.2 0010C4 .... DW link
769.3 0010C6 FF DB 0FFh ; not immediate
769.4 0010C7 link SET $
769.5 0010C7 04 DB 4
769.6 0010C8 48455245 DB 'HERE'
769.7 0010CC EVEN
769.8 0010CC IF 'DOCOLON'='DOCODE'
769.9 0010CC HERE: DW $+2
769.10 0010CC ELSE
769.11 0010CC .... HERE: DW DOCOLON
769.12 0010CE ENDIF
769.13 0010CE ENDM
770 0010CE ............ DW DDP,FETCH,EXIT
771 0010D4
772 0010D4 ;C ALLOT n -- allocate n bytes in
dict
773 0010D4 ; DP +! ;
774 0010D4 HEADER ALLOT,5,'ALLOT',DOCOLON
774.1 000000 PUBLIC ALLOT
774.2 0010D4 .... DW link
774.3 0010D6 FF DB 0FFh ; not immediate
774.4 0010D7 link SET $
774.5 0010D7 05 DB 5
- 4e-core430G2553 - Page 101
774.6 0010D8 414C4C4F54 DB 'ALLOT'
774.7 0010DD 00 EVEN
774.8 0010DE IF 'DOCOLON'='DOCODE'
774.9 0010DE ALLOT: DW $+2
774.10 0010DE ELSE
774.11 0010DE .... ALLOT: DW DOCOLON
774.12 0010E0 ENDIF
774.13 0010E0 ENDM
775 0010E0 ............ DW DDP,PLUSSTORE,EXIT
776 0010E6
777 0010E6 ;C , x -- append cell to dict
778 0010E6 ; HERE ! 1 CELLS ALLOT ;
779 0010E6 HEADER COMMA,1,',',DOCOLON
779.1 000000 PUBLIC COMMA
779.2 0010E6 .... DW link
779.3 0010E8 FF DB 0FFh ; not immediate
779.4 0010E9 link SET $
779.5 0010E9 01 DB 1
779.6 0010EA 2C DB ','
779.7 0010EB 00 EVEN
779.8 0010EC IF 'DOCOLON'='DOCODE'
779.9 0010EC COMMA: DW $+2
779.10 0010EC ELSE
779.11 0010EC .... COMMA: DW DOCOLON
779.12 0010EE ENDIF
779.13 0010EE ENDM
780 0010EE ............* DW HERE,STORE,lit,1,CELLS,ALLOT,EXIT
781 0010FC
782 0010FC ;C C, char -- append char to dict
783 0010FC ; HERE C! 1 CHARS ALLOT ;
784 0010FC HEADER CCOMMA,2,'C,',DOCOLON
784.1 000000 PUBLIC CCOMMA
784.2 0010FC .... DW link
784.3 0010FE FF DB 0FFh ; not immediate
784.4 0010FF link SET $
784.5 0010FF 02 DB 2
784.6 001100 432C DB 'C,'
784.7 001102 EVEN
784.8 001102 IF 'DOCOLON'='DOCODE'
784.9 001102 CCOMMA: DW $+2
784.10 001102 ELSE
784.11 001102 .... CCOMMA: DW DOCOLON
784.12 001104 ENDIF
784.13 001104 ENDM
785 001104 ............* DW HERE,CSTORE,lit,1,CHARS,ALLOT,EXIT
786 001112
787 001112 ; The following additional words support
the
788 001112 ; "Harvard" model, with separate address
spaces
789 001112 ; for Instructions (Code) and Data. ANSI
790 001112 ; requires DP to manage the Data space, so
a
791 001112 ; separate Instruction Dictionary Pointer,
IDP,
792 001112 ; is added to manage the Code space. Also
added:
793 001112 ; I@ IC@ I! IC! I->D D->I (in the primitives
)
794 001112 ; ITYPE ICOUNT IWORD (above)
795 001112 ; IHERE IALLOT I, IC, (below)
796 001112 ; It should be possible to convert the
Harvard
797 001112 ; implementation to a combined-code-and-data
798 001112 ; system, by equating these words to their
799 001112 ; Data-space counterparts.
800 001112
801 001112 ; on MSP430 we have Neumann, but
802 001112 ; I! IC! D->I (in the primitives) work on
flash
803 001112 ; I@ IC@ alias @ C@
804 001112 ; I->D alias CMOVE
805 001112 ; IWORD works on flash
806 001112 ; IHERE IALLOT I, IC, work on flash
807 001112
808 001112 ;C IHERE -- addr returns Code dictionary
ptr
809 001112 ; IDP @ ;
- 4e-core430G2553 - Page 102
810 001112 HEADER IHERE,5,'IHERE',DOCOLON
810.1 000000 PUBLIC IHERE
810.2 001112 .... DW link
810.3 001114 FF DB 0FFh ; not immediate
810.4 001115 link SET $
810.5 001115 05 DB 5
810.6 001116 4948455245 DB 'IHERE'
810.7 00111B 00 EVEN
810.8 00111C IF 'DOCOLON'='DOCODE'
810.9 00111C IHERE: DW $+2
810.10 00111C ELSE
810.11 00111C .... IHERE: DW DOCOLON
810.12 00111E ENDIF
810.13 00111E ENDM
811 00111E ............ DW IDP,FETCH,EXIT
812 001124
813 001124 ;C IALLOT n -- allocate n bytes in Code
dict
814 001124 ; IDP +! ;
815 001124 HEADER IALLOT,6,'IALLOT',DOCOLON
815.1 000000 PUBLIC IALLOT
815.2 001124 .... DW link
815.3 001126 FF DB 0FFh ; not immediate
815.4 001127 link SET $
815.5 001127 06 DB 6
815.6 001128 49414C4C4F54 DB 'IALLOT'
815.7 00112E EVEN
815.8 00112E IF 'DOCOLON'='DOCODE'
815.9 00112E IALLOT: DW $+2
815.10 00112E ELSE
815.11 00112E .... IALLOT: DW DOCOLON
815.12 001130 ENDIF
815.13 001130 ENDM
816 001130 ............ DW IDP,PLUSSTORE,EXIT
817 001136
818 001136 ;C I, x -- append cell to Code
dict
819 001136 ; IHERE I! 1 CELLS IALLOT ;
820 001136 HEADER ICOMMA,2,'I,',DOCOLON
820.1 000000 PUBLIC ICOMMA
820.2 001136 .... DW link
820.3 001138 FF DB 0FFh ; not immediate
820.4 001139 link SET $
820.5 001139 02 DB 2
820.6 00113A 492C DB 'I,'
820.7 00113C EVEN
820.8 00113C IF 'DOCOLON'='DOCODE'
820.9 00113C ICOMMA: DW $+2
820.10 00113C ELSE
820.11 00113C .... ICOMMA: DW DOCOLON
820.12 00113E ENDIF
820.13 00113E ENDM
821 00113E ............* DW IHERE,ISTORE,lit,1,CELLS,IALLOT,EXIT
822 00114C
823 00114C ;C IC, char -- append char to Code
dict
824 00114C ; IHERE IC! 1 CHARS IALLOT ;
825 00114C HEADER ICCOMMA,3,'IC,',DOCOLON
825.1 000000 PUBLIC ICCOMMA
825.2 00114C .... DW link
825.3 00114E FF DB 0FFh ; not immediate
825.4 00114F link SET $
825.5 00114F 03 DB 3
825.6 001150 49432C DB 'IC,'
825.7 001153 00 EVEN
825.8 001154 IF 'DOCOLON'='DOCODE'
825.9 001154 ICCOMMA: DW $+2
825.10 001154 ELSE
825.11 001154 .... ICCOMMA: DW DOCOLON
825.12 001156 ENDIF
825.13 001156 ENDM
826 001156 ............* DW IHERE,ICSTORE,lit,1,CHARS,IALLOT,EXIT
827 001164
828 001164 ; SEPARATE HEADER EXTENSIONS ARE NOT USED
829 001164 #define HHERE IHERE
830 001164 #define HALLOT IALLOT
831 001164 #define HCOMMA ICOMMA
832 001164 #define HCCOMMA ICCOMMA
- 4e-core430G2553 - Page 103
833 001164 #define HCFETCH ICFETCH
834 001164 #define HFETCH IFETCH
835 001164 #define HCSTORE ICSTORE
836 001164 #define HSTORE ISTORE
837 001164
838 001164 ; INTERPRETER ==================================
=
839 001164 ; Note that NFA>LFA, NFA>CFA, IMMED?, and
FIND
840 001164 ; are dependent on the structure of the
Forth
841 001164 ; header. This may be common across many
CPUs,
842 001164 ; or it may be different.
843 001164
844 001164 ; ?STACK --
845 001164 ; depth 0< abort" SUF" ; stack underflow
846 001164 HEADER QSTACK,6,'?STACK',DOCOLON
846.1 000000 PUBLIC QSTACK
846.2 001164 .... DW link
846.3 001166 FF DB 0FFh ; not immediate
846.4 001167 link SET $
846.5 001167 06 DB 6
846.6 001168 3F535441434B DB '?STACK'
846.7 00116E EVEN
846.8 00116E IF 'DOCOLON'='DOCODE'
846.9 00116E QSTACK: DW $+2
846.10 00116E ELSE
846.11 00116E .... QSTACK: DW DOCOLON
846.12 001170 ENDIF
846.13 001170 ENDM
847 001170 ............ DW DEPTH,ZEROLESS,XISQUOTE
848 001176 03535546 DB 3,'SUF'
849 00117A ........ DW QABORT,EXIT
850 00117E
851 00117E ;C SOURCE -- adr n current input buffer
852 00117E ; 'SOURCE 2@ ; length is at lower
adrs
853 00117E HEADER SOURCE,6,'SOURCE',DOCOLON
853.1 000000 PUBLIC SOURCE
853.2 00117E .... DW link
853.3 001180 FF DB 0FFh ; not immediate
853.4 001181 link SET $
853.5 001181 06 DB 6
853.6 001182 534F55524345 DB 'SOURCE'
853.7 001188 EVEN
853.8 001188 IF 'DOCOLON'='DOCODE'
853.9 001188 SOURCE: DW $+2
853.10 001188 ELSE
853.11 001188 .... SOURCE: DW DOCOLON
853.12 00118A ENDIF
853.13 00118A ENDM
854 00118A ............ DW TICKSOURCE,TWOFETCH,EXIT
855 001190
856 001190 ;X /STRING a u n -- a+n u-n trim string
857 001190 ; ROT OVER + ROT ROT - ;
858 001190 HEADER SLASHSTRING,7,'/STRING',DOCOLON
858.1 000000 PUBLIC SLASHSTRING
858.2 001190 .... DW link
858.3 001192 FF DB 0FFh ; not immediate
858.4 001193 link SET $
858.5 001193 07 DB 7
858.6 001194 2F535452494E* DB '/STRING'
858.7 00119B 00 EVEN
858.8 00119C IF 'DOCOLON'='DOCODE'
858.9 00119C SLASHSTRING: DW $+2
858.10 00119C ELSE
858.11 00119C .... SLASHSTRING: DW DOCOLON
858.12 00119E ENDIF
858.13 00119E ENDM
859 00119E ............* DW ROT,OVER,PLUS,ROT,ROT,MINUS,EXIT
860 0011AC
861 0011AC ;Z >counted src n dst -- copy to counted
str
862 0011AC ; 2DUP C! CHAR+ SWAP CMOVE ;
863 0011AC HEADER TOCOUNTED,8,'>COUNTED',DOCOLON
863.1 000000 PUBLIC TOCOUNTED
863.2 0011AC .... DW link
- 4e-core430G2553 - Page 104
863.3 0011AE FF DB 0FFh ; not immediate
863.4 0011AF link SET $
863.5 0011AF 08 DB 8
863.6 0011B0 3E434F554E54* DB '>COUNTED'
863.7 0011B8 EVEN
863.8 0011B8 IF 'DOCOLON'='DOCODE'
863.9 0011B8 TOCOUNTED: DW $+2
863.10 0011B8 ELSE
863.11 0011B8 .... TOCOUNTED: DW DOCOLON
863.12 0011BA ENDIF
863.13 0011BA ENDM
864 0011BA ............* DW TWODUP,CSTORE,CHARPLUS,SWAP,CMOVE,EXI
T
865 0011C6
866 0011C6 ;Z ADR>IN c-addr' -- set >IN to offset to
given adr
867 0011C6 ; SOURCE -- adr' adr n
868 0011C6 ; ROT ROT - -- n adr'-adr
869 0011C6 ; MIN 0 MAX -- n'
870 0011C6 ; >IN ! ;
871 0011C6 HEADER ADRTOIN,6,'ADR>IN',DOCOLON
871.1 000000 PUBLIC ADRTOIN
871.2 0011C6 .... DW link
871.3 0011C8 FF DB 0FFh ; not immediate
871.4 0011C9 link SET $
871.5 0011C9 06 DB 6
871.6 0011CA 4144523E494E DB 'ADR>IN'
871.7 0011D0 EVEN
871.8 0011D0 IF 'DOCOLON'='DOCODE'
871.9 0011D0 ADRTOIN: DW $+2
871.10 0011D0 ELSE
871.11 0011D0 .... ADRTOIN: DW DOCOLON
871.12 0011D2 ENDIF
871.13 0011D2 ENDM
872 0011D2 ............* DW SOURCE,ROT,ROT,MINUS,MIN,lit,0,MAX
873 0011E2 ............ DW TOIN,STORE,EXIT
874 0011E8
875 0011E8 ;X PARSE char -- c-addr n word delim'd by
char
876 0011E8 ; SOURCE >IN @ /STRING -- c adr
n
877 0011E8 ; OVER >R save adr of
string start
878 0011E8 ; ROT SCAN -- adr"
n"
879 0011E8 ; OVER SWAP IF CHAR+ THEN skip trailing
delim. if any
880 0011E8 ; ADR>IN advance >IN --
adr"
881 0011E8 ; R> TUCK - ; -- adr
n'
882 0011E8 HEADER PARSE,5,'PARSE',DOCOLON
882.1 000000 PUBLIC PARSE
882.2 0011E8 .... DW link
882.3 0011EA FF DB 0FFh ; not immediate
882.4 0011EB link SET $
882.5 0011EB 05 DB 5
882.6 0011EC 5041525345 DB 'PARSE'
882.7 0011F1 00 EVEN
882.8 0011F2 IF 'DOCOLON'='DOCODE'
882.9 0011F2 PARSE: DW $+2
882.10 0011F2 ELSE
882.11 0011F2 .... PARSE: DW DOCOLON
882.12 0011F4 ENDIF
882.13 0011F4 ENDM
883 0011F4 ............* DW SOURCE,TOIN,FETCH,SLASHSTRING
884 0011FC ............* DW OVER,TOR,ROT,SCAN
885 001204 ............ DW OVER,SWAP,qbran
886 00120A DEST PARSE1
886.1 00120A 0400 DW PARSE1-$
886.2 00120C ENDM
887 00120C .... DW ONEPLUS ; char+
888 00120E .... PARSE1: DW ADRTOIN
889 001210 ............* DW RFROM,TUCK,MINUS,EXIT
890 001218
891 001218 ;C WORD char -- c-addr word delim'd by
char
892 001218 ; DUP SOURCE >IN @ /STRING -- c c adr
- 4e-core430G2553 - Page 105
n
893 001218 ; ROT SKIP -- c adr'
n'
894 001218 ; DROP ADR>IN PARSE -- adr"
n"
895 001218 ; HERE >counted --
896 001218 ; HERE -- a
897 001218 ; BL OVER COUNT + C! ; append trailing
blank
898 001218 HEADER WORDD,4,'WORD',DOCOLON
898.1 000000 PUBLIC WORDD
898.2 001218 .... DW link
898.3 00121A FF DB 0FFh ; not immediate
898.4 00121B link SET $
898.5 00121B 04 DB 4
898.6 00121C 574F5244 DB 'WORD'
898.7 001220 EVEN
898.8 001220 IF 'DOCOLON'='DOCODE'
898.9 001220 WORDD: DW $+2
898.10 001220 ELSE
898.11 001220 .... WORDD: DW DOCOLON
898.12 001222 ENDIF
898.13 001222 ENDM
899 001222 ............* DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING
900 00122C ........ DW ROT,SKIP
901 001230 ............ DW DROP,ADRTOIN,PARSE
902 001236 ............ DW HERE,TOCOUNTED,HERE
903 00123C ............* DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT
904 001248
905 001248 ;C WORD char -- c-addr word delim'd by char
OLD DEF'N
906 001248 ; DUP SOURCE >IN @ /STRING -- c c adr
n
907 001248 ; DUP >R ROT SKIP -- c adr'
n'
908 001248 ; OVER >R ROT SCAN -- adr"
n"
909 001248 ; DUP IF CHAR- THEN skip trailing
delim.
910 001248 ; R> R> ROT - >IN +! update >IN
offset
911 001248 ; TUCK - -- adr'
N
912 001248 ; HERE >counted --
913 001248 ; HERE -- a
914 001248 ; BL OVER COUNT + C! ; append trailing
blank
915 001248 ; HEADER WORDD,4,'WORD',DOCOLON
916 001248 ; DW DUP,SOURCE,TOIN,FETCH,SLASHSTRING
917 001248 ; DW DUP,TOR,ROT,SKIP
918 001248 ; DW OVER,TOR,ROT,SCAN
919 001248 ; DW DUP,qbran
920 001248 ; DEST WORD1
921 001248 ; DW ONEMINUS ; char-
922 001248 ;WORD1: DW RFROM,RFROM,ROT,MINUS,TOIN,PLUSSTORE
923 001248 ; DW TUCK,MINUS
924 001248 ; DW HERE,TOCOUNTED,HERE
925 001248 ; DW BLANK,OVER,COUNT,PLUS,CSTORE,EXIT
926 001248
927 001248 ;Z NFA>LFA nfa -- lfa name adr -> link
field
928 001248 ; 3 - ;
929 001248 HEADER NFATOLFA,7,'NFA>LFA',DOCOLON
929.1 000000 PUBLIC NFATOLFA
929.2 001248 .... DW link
929.3 00124A FF DB 0FFh ; not immediate
929.4 00124B link SET $
929.5 00124B 07 DB 7
929.6 00124C 4E46413E4C46* DB 'NFA>LFA'
929.7 001253 00 EVEN
929.8 001254 IF 'DOCOLON'='DOCODE'
929.9 001254 NFATOLFA: DW $+2
929.10 001254 ELSE
929.11 001254 .... NFATOLFA: DW DOCOLON
929.12 001256 ENDIF
929.13 001256 ENDM
930 001256 ....0300....* DW lit,3,MINUS,EXIT
931 00125E
- 4e-core430G2553 - Page 106
932 00125E ;Z NFA>CFA nfa -- cfa name adr -> code
field
933 00125E ; HCOUNT 7F AND + ALIGNED ; mask off
'smudge' bit
934 00125E HEADER NFATOCFA,7,'NFA>CFA',DOCOLON
934.1 000000 PUBLIC NFATOCFA
934.2 00125E .... DW link
934.3 001260 FF DB 0FFh ; not immediate
934.4 001261 link SET $
934.5 001261 07 DB 7
934.6 001262 4E46413E4346* DB 'NFA>CFA'
934.7 001269 00 EVEN
934.8 00126A IF 'DOCOLON'='DOCODE'
934.9 00126A NFATOCFA: DW $+2
934.10 00126A ELSE
934.11 00126A .... NFATOCFA: DW DOCOLON
934.12 00126C ENDIF
934.13 00126C ENDM
935 00126C .... DW HCOUNT
936 00126E ....7F00....* DW lit,07FH,ANDD,PLUS,ALIGNED,EXIT
937 00127A
938 00127A ;Z IMMED? nfa -- f fetch immediate
flag
939 00127A ; 1- HC@ 1 AND 0= ; Flashable model, LSB=0
if immed
940 00127A HEADER IMMEDQ,6,'IMMED?',DOCOLON
940.1 000000 PUBLIC IMMEDQ
940.2 00127A .... DW link
940.3 00127C FF DB 0FFh ; not immediate
940.4 00127D link SET $
940.5 00127D 06 DB 6
940.6 00127E 494D4D45443F DB 'IMMED?'
940.7 001284 EVEN
940.8 001284 IF 'DOCOLON'='DOCODE'
940.9 001284 IMMEDQ: DW $+2
940.10 001284 ELSE
940.11 001284 .... IMMEDQ: DW DOCOLON
940.12 001286 ENDIF
940.13 001286 ENDM
941 001286 ............* DW ONEMINUS,HCFETCH,lit,1,ANDD,ZEROEQUAL
,EXIT
942 001294
943 001294 ;C FIND c-addr -- c-addr 0 if not found
944 001294 ;C FIND c-addr -- xt 1 if immediate
945 001294 ;C FIND c-addr -- xt -1 if "normal"
946 001294 ; LATEST @ BEGIN -- a nfa
947 001294 ; 2DUP OVER C@ CHAR+ -- a nfa a nfa
n+1
948 001294 ; N= -- a nfa
f
949 001294 ; DUP IF
950 001294 ; DROP
951 001294 ; NFA>LFA H@ DUP -- a link
link
952 001294 ; THEN
953 001294 ; 0= UNTIL -- a nfa OR a
0
954 001294 ; DUP IF
955 001294 ; NIP DUP NFA>CFA -- nfa xt
956 001294 ; SWAP IMMED? -- xt iflag
957 001294 ; 0= 1 OR -- xt 1/-1
958 001294 ; THEN ;
959 001294 HEADER FIND,4,'FIND',DOCOLON
959.1 000000 PUBLIC FIND
959.2 001294 .... DW link
959.3 001296 FF DB 0FFh ; not immediate
959.4 001297 link SET $
959.5 001297 04 DB 4
959.6 001298 46494E44 DB 'FIND'
959.7 00129C EVEN
959.8 00129C IF 'DOCOLON'='DOCODE'
959.9 00129C FIND: DW $+2
959.10 00129C ELSE
959.11 00129C .... FIND: DW DOCOLON
959.12 00129E ENDIF
959.13 00129E ENDM
960 00129E ........ DW LATEST,FETCH
961 0012A2 ............*FIND1: DW TWODUP,OVER,CFETCH,CHARPLUS
- 4e-core430G2553 - Page 107
962 0012AA ............ DW NEQUAL,DUP,qbran
963 0012B0 DEST FIND2
963.1 0012B0 0A00 DW FIND2-$
963.2 0012B2 ENDM
964 0012B2 ............* DW DROP,NFATOLFA,HFETCH,DUP
965 0012BA ........ FIND2: DW ZEROEQUAL,qbran
966 0012BE DEST FIND1
966.1 0012BE E4FF DW FIND1-$
966.2 0012C0 ENDM
967 0012C0 ........ DW DUP,qbran
968 0012C4 DEST FIND3
968.1 0012C4 1400 DW FIND3-$
968.2 0012C6 ENDM
969 0012C6 ............ DW NIP,DUP,NFATOCFA
970 0012CC ............* DW SWAP,IMMEDQ,ZEROEQUAL,lit,1,ORR
971 0012D8 .... FIND3: DW EXIT
972 0012DA
973 0012DA ;C UPC char -- char capitalize character
974 0012DA ;
975 0012DA ; DUP [CHAR] a < OVER [CHAR] z > OR IF EXIT THEN
976 0012DA ; [ CHAR A CHAR a - ] LITERAL + ;
977 0012DA ; HEADER UPC,3,'UPC',DOCOLON
978 0012DA HEADLESS UPC, DOCOLON
978.1 000000 PUBLIC UPC
978.2 0012DA IF 'DOCOLON'='DOCODE'
978.3 0012DA UPC: DW $+2
978.4 0012DA ELSE
978.5 0012DA .... UPC: DW DOCOLON
978.6 0012DC ENDIF
978.7 0012DC ENDM
979 0012DC ........6100* DW DUP, lit, 'a', LESS, OVER, lit, 'z',
GREATER
980 0012EC ........ DW ORR, qbran
981 0012F0 DEST UPC1
981.1 0012F0 0400 DW UPC1-$
981.2 0012F2 ENDM
982 0012F2 .... DW EXIT
983 0012F4 ....E0FF.... UPC1: DW lit, 'A'-'a', PLUS
984 0012FA .... DW EXIT
985 0012FC
986 0012FC ;C CAPITALIZE c-addr -- c-addr capitalize
string
987 0012FC ;
988 0012FC ; CAPS @ IF DUP COUNT OVER + SWAP ?DO I c@ upc
I c! LOOP THEN
989 0012FC ; HEADER CAPITALIZE, 10, 'CAPITALIZE',
DOCOLON
990 0012FC HEADLESS CAPITALIZE, DOCOLON
990.1 000000 PUBLIC CAPITALIZE
990.2 0012FC IF 'DOCOLON'='DOCODE'
990.3 0012FC CAPITALIZE: DW $+2
990.4 0012FC ELSE
990.5 0012FC .... CAPITALIZE: DW DOCOLON
990.6 0012FE ENDIF
990.7 0012FE ENDM
991 0012FE ............ DW CAPS, FETCH, qbran
992 001304 DEST CAPS2
992.1 001304 1C00 DW CAPS2-$
992.2 001306 ENDM
993 001306 ............* DW DUP, COUNT, OVER, PLUS, SWAP,
xdo
994 001312 ............*CAPS1: DW II, CFETCH, UPC, II, CSTORE
995 00131C .... DW xloop
996 00131E DEST CAPS1
996.1 00131E F4FF DW CAPS1-$
996.2 001320 ENDM
997 001320 .... CAPS2: DW EXIT
998 001322
999 001322 ;C LITERAL x -- append numeric
literal
1000 001322 ; STATE @ IF ['] LIT ,XT I, THEN ; IMMEDIATE
1001 001322 ; This tests STATE so that it can also be
used
1002 001322 ; interpretively. (ANSI doesn't require
this.)
1003 001322 IMMED LITERAL,7,'LITERAL',DOCOLON
1003.1 000000 PUBLIC LITERAL
- 4e-core430G2553 - Page 108
1003.2 001322 .... DW link
1003.3 001324 FE DB 0FEh // ; immediate
(LSB=0)
1003.4 001325 link SET $
1003.5 001325 07 DB 7
1003.6 001326 4C4954455241* DB 'LITERAL'
1003.7 00132D 00 EVEN
1003.8 00132E IF 'DOCOLON'='DOCODE'
1003.9 00132E LITERAL: DW $+2
1003.10 00132E ELSE
1003.11 00132E .... LITERAL: DW DOCOLON
1003.12 001330 ENDIF
1003.13 001330 ENDM
1004 001330 ............ DW STATE,FETCH,qbran
1005 001336 DEST LITER1
1005.1 001336 0A00 DW LITER1-$
1005.2 001338 ENDM
1006 001338 ............* DW lit,lit,COMMAXT,ICOMMA
1007 001340 .... LITER1: DW EXIT
1008 001342
1009 001342 ;Z DIGIT? c -- n -1 if c is a valid
digit
1010 001342 ;Z DIGIT? c -- x 0 otherwise
1011 001342 ; [ HEX ] DUP 39 > 100 AND + silly
looking
1012 001342 ; DUP 140 > 107 AND - 30 - but it
works!
1013 001342 ; DUP BASE @ U< ;
1014 001342 HEADER DIGITQ,6,'DIGIT?',DOCOLON
1014.1 000000 PUBLIC DIGITQ
1014.2 001342 .... DW link
1014.3 001344 FF DB 0FFh ; not immediate
1014.4 001345 link SET $
1014.5 001345 06 DB 6
1014.6 001346 44494749543F DB 'DIGIT?'
1014.7 00134C EVEN
1014.8 00134C IF 'DOCOLON'='DOCODE'
1014.9 00134C DIGITQ: DW $+2
1014.10 00134C ELSE
1014.11 00134C .... DIGITQ: DW DOCOLON
1014.12 00134E ENDIF
1014.13 00134E ENDM
1015 00134E ........3900* DW DUP,lit,39H,GREATER,lit,100H,ANDD,PLU
S
1016 00135E ........4001* DW DUP,lit,140H,GREATER,lit,107H,ANDD
1017 00136C ........3000* DW MINUS,lit,30H,MINUS
1018 001374 ............* DW DUP,BASE,FETCH,ULESS,EXIT
1019 00137E
1020 00137E ;Z ?SIGN adr n -- adr' n' f get optional
sign
1021 00137E ;Z advance adr/n if sign; return NZ if
negative
1022 00137E ; OVER C@ -- adr n c
1023 00137E ; 2C - DUP ABS 1 = AND -- +=-1, -=+1, else
0
1024 00137E ; DUP IF 1+ -- +=0, -=+2
1025 00137E ; >R 1 /STRING R> -- adr' n'
f
1026 00137E ; THEN ;
1027 00137E HEADER QSIGN,5,'?SIGN',DOCOLON
1027.1 000000 PUBLIC QSIGN
1027.2 00137E .... DW link
1027.3 001380 FF DB 0FFh ; not immediate
1027.4 001381 link SET $
1027.5 001381 05 DB 5
1027.6 001382 3F5349474E DB '?SIGN'
1027.7 001387 00 EVEN
1027.8 001388 IF 'DOCOLON'='DOCODE'
1027.9 001388 QSIGN: DW $+2
1027.10 001388 ELSE
1027.11 001388 .... QSIGN: DW DOCOLON
1027.12 00138A ENDIF
1027.13 00138A ENDM
1028 00138A ............* DW OVER,CFETCH,lit,2CH,MINUS,DUP,ABBS
1029 001398 ....0100....* DW lit,1,EQUAL,ANDD,DUP,qbran
1030 0013A4 DEST QSIGN1
1030.1 0013A4 0E00 DW QSIGN1-$
1030.2 0013A6 ENDM
- 4e-core430G2553 - Page 109
1031 0013A6 ............* DW ONEPLUS,TOR,lit,1,SLASHSTRING,RFROM
1032 0013B2 .... QSIGN1: DW EXIT
1033 0013B4
1034 0013B4 ;C >NUMBER ud adr u -- ud' adr' u'
1035 0013B4 ;C convert string to
number
1036 0013B4 ; BEGIN
1037 0013B4 ; DUP WHILE
1038 0013B4 ; OVER C@ DIGIT?
1039 0013B4 ; 0= IF DROP EXIT THEN
1040 0013B4 ; >R 2SWAP BASE @ UD*
1041 0013B4 ; R> M+ 2SWAP
1042 0013B4 ; 1 /STRING
1043 0013B4 ; REPEAT ;
1044 0013B4 HEADER TONUMBER,7,'>NUMBER',DOCOLON
1044.1 000000 PUBLIC TONUMBER
1044.2 0013B4 .... DW link
1044.3 0013B6 FF DB 0FFh ; not immediate
1044.4 0013B7 link SET $
1044.5 0013B7 07 DB 7
1044.6 0013B8 3E4E554D4245* DB '>NUMBER'
1044.7 0013BF 00 EVEN
1044.8 0013C0 IF 'DOCOLON'='DOCODE'
1044.9 0013C0 TONUMBER: DW $+2
1044.10 0013C0 ELSE
1044.11 0013C0 .... TONUMBER: DW DOCOLON
1044.12 0013C2 ENDIF
1044.13 0013C2 ENDM
1045 0013C2 ........ TONUM1: DW DUP,qbran
1046 0013C6 DEST TONUM3
1046.1 0013C6 2C00 DW TONUM3-$
1046.2 0013C8 ENDM
1047 0013C8 ............ DW OVER,CFETCH,DIGITQ
1048 0013CE ........ DW ZEROEQUAL,qbran
1049 0013D2 DEST TONUM2
1049.1 0013D2 0600 DW TONUM2-$
1049.2 0013D4 ENDM
1050 0013D4 ........ DW DROP,EXIT
1051 0013D8 ............*TONUM2: DW TOR,TWOSWAP,BASE,FETCH,UDSTAR
1052 0013E2 ............ DW RFROM,MPLUS,TWOSWAP
1053 0013E8 ....0100....* DW lit,1,SLASHSTRING,bran
1054 0013F0 DEST TONUM1
1054.1 0013F0 D2FF DW TONUM1-$
1054.2 0013F2 ENDM
1055 0013F2 .... TONUM3: DW EXIT
1056 0013F4
1057 0013F4 ;Z ?NUMBER c-addr -- n -1 string->number
1058 0013F4 ;Z ?NUMBER c-addr -- c-addr 0 if convert
error
1059 0013F4 ; DUP 0 0 ROT COUNT -- ca ud adr
n
1060 0013F4 ; ?SIGN >R >NUMBER -- ca ud adr'
n'
1061 0013F4 ; IF R> 2DROP 2DROP 0 -- ca 0 (error)
1062 0013F4 ; ELSE 2DROP NIP R>
1063 0013F4 ; IF NEGATE THEN -1 -- n -1 (ok)
1064 0013F4 ; THEN ;
1065 0013F4 HEADER QNUMBER,7,'?NUMBER',DOCOLON
1065.1 000000 PUBLIC QNUMBER
1065.2 0013F4 .... DW link
1065.3 0013F6 FF DB 0FFh ; not immediate
1065.4 0013F7 link SET $
1065.5 0013F7 07 DB 7
1065.6 0013F8 3F4E554D4245* DB '?NUMBER'
1065.7 0013FF 00 EVEN
1065.8 001400 IF 'DOCOLON'='DOCODE'
1065.9 001400 QNUMBER: DW $+2
1065.10 001400 ELSE
1065.11 001400 .... QNUMBER: DW DOCOLON
1065.12 001402 ENDIF
1065.13 001402 ENDM
1066 001402 ............* DW DUP,ZERO,DUP,ROT,COUNT
1067 00140C ............* DW QSIGN,TOR,TONUMBER,qbran
1068 001414 DEST QNUM1
1068.1 001414 1000 DW QNUM1-$
1068.2 001416 ENDM
1069 001416 ............* DW RFROM,TWODROP,TWODROP,lit,0
1070 001420 .... DW bran
- 4e-core430G2553 - Page 110
1071 001422 DEST QNUM3
1071.1 001422 1200 DW QNUM3-$
1071.2 001424 ENDM
1072 001424 ............*QNUM1: DW TWODROP,NIP,RFROM,qbran
1073 00142C DEST QNUM2
1073.1 00142C 0400 DW QNUM2-$
1073.2 00142E ENDM
1074 00142E .... DW NEGATE
1075 001430 ....FFFF QNUM2: DW lit,-1
1076 001434 .... QNUM3: DW EXIT
1077 001436
1078 001436 ;Z INTERPRET i*x c-addr u -- j*x
interpret given buffer
1079 001436 ; This is a common factor of EVALUATE and
QUIT.
1080 001436 ; ref. dpANS-6, 3.4 The Forth Text Interpreter
1081 001436 ; 'SOURCE 2! 0 >IN !
1082 001436 ; BEGIN
1083 001436 ; BL WORD DUP C@ WHILE -- textadr
1084 001436 ; CAPITALIZE
1085 001436 ; FIND -- a 0/1/-1
1086 001436 ; ?DUP IF -- xt 1/-1
1087 001436 ; 1+ STATE @ 0= OR IMMED or
interp?
1088 001436 ; IF EXECUTE ELSE ,XT THEN
1089 001436 ; ELSE -- textadr
1090 001436 ; ?NUMBER
1091 001436 ; IF POSTPONE LITERAL converted
ok
1092 001436 ; ELSE COUNT TYPE 3F EMIT CR ABORT
err
1093 001436 ; THEN
1094 001436 ; THEN
1095 001436 ; REPEAT DROP ;
1096 001436 HEADER INTERPRET,9,'INTERPRET',DOCOLON
1096.1 000000 PUBLIC INTERPRET
1096.2 001436 .... DW link
1096.3 001438 FF DB 0FFh ; not immediate
1096.4 001439 link SET $
1096.5 001439 09 DB 9
1096.6 00143A 494E54455250* DB 'INTERPRET'
1096.7 001443 00 EVEN
1096.8 001444 IF 'DOCOLON'='DOCODE'
1096.9 001444 INTERPRET: DW $+2
1096.10 001444 ELSE
1096.11 001444 .... INTERPRET: DW DOCOLON
1096.12 001446 ENDIF
1096.13 001446 ENDM
1097 001446 ............* DW TICKSOURCE,TWOSTORE,ZERO,TOIN,STORE
1098 001450 .... INTER1: DW QSTACK ; ?stack prüft auf stck
underflow mk
1099 001452 ............* DW BLANK,WORDD,DUP,CFETCH,qbran
1100 00145C DEST INTER9
1100.1 00145C 4A00 DW INTER9-$
1100.2 00145E ENDM
1101 00145E .... DW CAPITALIZE
1102 001460 ............ DW FIND,QDUP,qbran
1103 001466 DEST INTER4
1103.1 001466 1C00 DW INTER4-$
1103.2 001468 ENDM
1104 001468 ............* DW ONEPLUS,STATE,FETCH,ZEROEQUAL,ORR
1105 001472 .... DW qbran
1106 001474 DEST INTER2
1106.1 001474 0800 DW INTER2-$
1106.2 001476 ENDM
1107 001476 ........ DW EXECUTE,bran
1108 00147A DEST INTER3
1108.1 00147A 0400 DW INTER3-$
1108.2 00147C ENDM
1109 00147C .... INTER2: DW COMMAXT
1110 00147E .... INTER3: DW bran
1111 001480 DEST INTER8
1111.1 001480 2200 DW INTER8-$
1111.2 001482 ENDM
1112 001482 ........ INTER4: DW QNUMBER,qbran
1113 001486 DEST INTER5
1113.1 001486 0800 DW INTER5-$
1113.2 001488 ENDM
- 4e-core430G2553 - Page 111
1114 001488 ........ DW LITERAL,bran
1115 00148C DEST INTER6
1115.1 00148C 1600 DW INTER6-$
1115.2 00148E ENDM
1116 00148E ........ INTER5: DW COUNT,TYP
1117 001492 ....1500.... DW lit,15H,EMIT ; emit a NAK ($15)
1118 001498 ....3F00.... DW lit,3FH,EMIT
1119 00149E ; DW TOIN,FETCH,DOT
1120 00149E ........ DW CR,ABORT
1121 0014A2 INTER6:
1122 0014A2 .... INTER8: DW bran
1123 0014A4 DEST INTER1
1123.1 0014A4 ACFF DW INTER1-$
1123.2 0014A6 ENDM
1124 0014A6 ........ INTER9: DW DROP,EXIT
1125 0014AA
1126 0014AA ;C EVALUATE i*x c-addr u -- j*x
interprt string
1127 0014AA ; 'SOURCE 2@ >R >R >IN @ >R
1128 0014AA ; INTERPRET
1129 0014AA ; R> >IN ! R> R> 'SOURCE 2! ;
1130 0014AA HEADER EVALUATE,8,'EVALUATE',DOCOLON
1130.1 000000 PUBLIC EVALUATE
1130.2 0014AA .... DW link
1130.3 0014AC FF DB 0FFh ; not immediate
1130.4 0014AD link SET $
1130.5 0014AD 08 DB 8
1130.6 0014AE 4556414C5541* DB 'EVALUATE'
1130.7 0014B6 EVEN
1130.8 0014B6 IF 'DOCOLON'='DOCODE'
1130.9 0014B6 EVALUATE: DW $+2
1130.10 0014B6 ELSE
1130.11 0014B6 .... EVALUATE: DW DOCOLON
1130.12 0014B8 ENDIF
1130.13 0014B8 ENDM
1131 0014B8 ............* DW TICKSOURCE,TWOFETCH,TOR,TOR
1132 0014C0 ............* DW TOIN,FETCH,TOR,INTERPRET
1133 0014C8 ............* DW RFROM,TOIN,STORE,RFROM,RFROM
1134 0014D2 ............ DW TICKSOURCE,TWOSTORE,EXIT
1135 0014D8
1136 0014D8 #define PREFIXPROMPT 0
1137 0014D8
1138 0014D8 ; C DOTSTATUS -- display system
status
1139 0014D8 HEADLESS DOTSTATUS,DOCOLON
1139.1 000000 PUBLIC DOTSTATUS
1139.2 0014D8 IF 'DOCOLON'='DOCODE'
1139.3 0014D8 DOTSTATUS: DW $+2
1139.4 0014D8 ELSE
1139.5 0014D8 .... DOTSTATUS: DW DOCOLON
1139.6 0014DA ENDIF
1139.7 0014DA ENDM
1140 0014DA ....1100.... DW lit,11H,EMIT ; send XON
1141 0014E0 .... DW CR
1142 0014E2 IF PREFIXPROMPT=1
1143 0014E2 DW XISQUOTE
1144 0014E2 DB 3,'OK ' ; for prefix prompt
style
1145 0014E2 DW ITYPE
1146 0014E2 ENDIF
1147 0014E2 .... DW EXIT
1148 0014E4
1149 0014E4 ; C PROMPT -- prompt user
1150 0014E4 HEADLESS PROMPT,DOCOLON
1150.1 000000 PUBLIC PROMPT
1150.2 0014E4 IF 'DOCOLON'='DOCODE'
1150.3 0014E4 PROMPT: DW $+2
1150.4 0014E4 ELSE
1150.5 0014E4 .... PROMPT: DW DOCOLON
1150.6 0014E6 ENDIF
1150.7 0014E6 ENDM
1151 0014E6 IF PREFIXPROMPT!=1
1152 0014E6 ............* DW STATE,FETCH,ZEROEQUAL,qbran
1153 0014EE DEST PROMPT1
1153.1 0014EE 2800 DW PROMPT1-$
1153.2 0014F0 ENDM
1154 0014F0 ....0600.... DW lit,06H,EMIT ; send ACK
1155 0014F6 ............* DW BASE,FETCH,DUP,HEX,lit,'$',EMIT,lit
- 4e-core430G2553 - Page 112
,02,ZEROUDOTR,BASE,STORE
1156 00150E .... DW XISQUOTE
1157 001510 036F6B20 DB 3,'ok ' ; for traditional Forth
style
1158 001514 .... DW ITYPE
1159 001516 ENDIF
1160 001516 .... PROMPT1:DW EXIT
1161 001518
1162 001518
1163 001518 ;C QUIT -- R: i*x -- interpret from
kbd
1164 001518 ; L0 LP ! R0 RP! 0 STATE !
1165 001518 ; BEGIN
1166 001518 ; xon EMIT
1167 001518 ; TIB DUP TIBSIZE ACCEPT
1168 001518 ; xoff EMIT SPACE
1169 001518 ; INTERPRET
1170 001518 ; CR STATE @ 0= IF ." OK" THEN
1171 001518 ; AGAIN ;
1172 001518 HEADER QUIT,4,'QUIT',DOCOLON
1172.1 000000 PUBLIC QUIT
1172.2 001518 .... DW link
1172.3 00151A FF DB 0FFh ; not immediate
1172.4 00151B link SET $
1172.5 00151B 04 DB 4
1172.6 00151C 51554954 DB 'QUIT'
1172.7 001520 EVEN
1172.8 001520 IF 'DOCOLON'='DOCODE'
1172.9 001520 QUIT: DW $+2
1172.10 001520 ELSE
1172.11 001520 .... QUIT: DW DOCOLON
1172.12 001522 ENDIF
1172.13 001522 ENDM
1173 001522 ............ DW L0,LP,STORE
1174 001528 ............* DW RZERO,RPSTORE,ZERO,STATE,STORE
1175 001532 .... QUIT1: DW DOTSTATUS
1176 001534 ............* DW TIB,DUP,TIBSIZE,ACCEPT
1177 00153C ; DW lit,13H,EMIT ; send
XOFF
1178 00153C .... DW SPACE
1179 00153E .... DW INTERPRET
1180 001540 .... DW PROMPT
1181 001542 .... DW bran
1182 001544 DEST QUIT1
1182.1 001544 EEFF DW QUIT1-$
1182.2 001546 ENDM
1183 000000 PUBLIC QUITIP
1184 001546 QUITIP equ QUIT+2
1185 001546
1186 001546 ;C ABORT i*x -- R: j*x -- clear stk &
QUIT
1187 001546 ; S0 SP! QUIT ;
1188 001546 HEADER ABORT,5,'ABORT',DOCOLON
1188.1 000000 PUBLIC ABORT
1188.2 001546 .... DW link
1188.3 001548 FF DB 0FFh ; not immediate
1188.4 001549 link SET $
1188.5 001549 05 DB 5
1188.6 00154A 41424F5254 DB 'ABORT'
1188.7 00154F 00 EVEN
1188.8 001550 IF 'DOCOLON'='DOCODE'
1188.9 001550 ABORT: DW $+2
1188.10 001550 ELSE
1188.11 001550 .... ABORT: DW DOCOLON
1188.12 001552 ENDIF
1188.13 001552 ENDM
1189 001552 ............ abort1 DW S0,SPSTORE,QUIT ; QUIT never
returns
1190 001558
1191 001558 ;Z ?ABORT f c-addr u -- abort & print
msg
1192 001558 ; ROT IF ITYPE ABORT THEN 2DROP ;
1193 001558 HEADER QABORT,6,'?ABORT',DOCOLON
1193.1 000000 PUBLIC QABORT
1193.2 001558 .... DW link
1193.3 00155A FF DB 0FFh ; not immediate
1193.4 00155B link SET $
1193.5 00155B 06 DB 6
- 4e-core430G2553 - Page 113
1193.6 00155C 3F41424F5254 DB '?ABORT'
1193.7 001562 EVEN
1193.8 001562 IF 'DOCOLON'='DOCODE'
1193.9 001562 QABORT: DW $+2
1193.10 001562 ELSE
1193.11 001562 .... QABORT: DW DOCOLON
1193.12 001564 ENDIF
1193.13 001564 ENDM
1194 001564 ........ DW ROT,qbran
1195 001568 DEST QABO1
1195.1 001568 0600 DW QABO1-$
1195.2 00156A ENDM
1196 00156A ........ DW ITYPE,ABORT
1197 00156E ........ QABO1: DW TWODROP,EXIT
1198 001572
1199 001572 ;C ABORT" i*x 0 -- i*x R: j*x -- j*x
x1=0
1200 001572 ;C ABORT" i*x x1 -- R: j*x --
x1<>0
1201 001572 ; POSTPONE IS" POSTPONE ?ABORT ; IMMEDIATE
1202 001572 IMMED ABORTQUOTE,6,'ABORT"',DOCOLON
1202.1 000000 PUBLIC ABORTQUOTE
1202.2 001572 .... DW link
1202.3 001574 FE DB 0FEh // ; immediate
(LSB=0
)
1202.4 001575 link SET $
1202.5 001575 06 DB 6
1202.6 001576 41424F525422 DB 'ABORT"'
1202.7 00157C EVEN
1202.8 00157C IF 'DOCOLON'='DOCODE'
1202.9 00157C ABORTQUOTE: DW $+2
1202.10 00157C ELSE
1202.11 00157C .... ABORTQUOTE: DW DOCOLON
1202.12 00157E ENDIF
1202.13 00157E ENDM
1203 00157E .... DW ISQUOTE
1204 001580 ............ DW lit,QABORT,COMMAXT
1205 001586 .... DW EXIT
1206 001588
1207 001588 ;C ' -- xt find word in dictionary
1208 001588 ; BL WORD CAPITALIZE FIND
1209 001588 ; 0= ABORT" ?" ;
1210 001588 HEADER TICK,1,27h,DOCOLON
1210.1 000000 PUBLIC TICK
1210.2 001588 .... DW link
1210.3 00158A FF DB 0FFh ; not immediate
1210.4 00158B link SET $
1210.5 00158B 01 DB 1
1210.6 00158C 27 DB 27h
1210.7 00158D 00 EVEN
1210.8 00158E IF 'DOCOLON'='DOCODE'
1210.9 00158E TICK: DW $+2
1210.10 00158E ELSE
1210.11 00158E .... TICK: DW DOCOLON
1210.12 001590 ENDIF
1210.13 001590 ENDM
1211 001590 ............* DW BLANK,WORDD,CAPITALIZE,FIND,ZEROEQUAL
,XISQUOTE
1212 00159C 013F DB 1,'?'
1213 00159E ........ DW QABORT,EXIT
1214 0015A2
1215 0015A2 ;C CHAR -- char parse ASCII
character
1216 0015A2 ; BL WORD 1+ C@ ;
1217 0015A2 HEADER CHARR,4,'CHAR',DOCOLON
1217.1 000000 PUBLIC CHARR
1217.2 0015A2 .... DW link
1217.3 0015A4 FF DB 0FFh ; not immediate
1217.4 0015A5 link SET $
1217.5 0015A5 04 DB 4
1217.6 0015A6 43484152 DB 'CHAR'
1217.7 0015AA EVEN
1217.8 0015AA IF 'DOCOLON'='DOCODE'
1217.9 0015AA CHARR: DW $+2
1217.10 0015AA ELSE
1217.11 0015AA .... CHARR: DW DOCOLON
1217.12 0015AC ENDIF
- 4e-core430G2553 - Page 114
1217.13 0015AC ENDM
1218 0015AC ............* DW BLANK,WORDD,ONEPLUS,CFETCH,EXIT
1219 0015B6
1220 0015B6 ;C [CHAR] -- compile character
literal
1221 0015B6 ; CHAR ['] LIT ,XT I, ; IMMEDIATE
1222 0015B6 IMMED BRACCHAR,6,'[CHAR]',DOCOLON
1222.1 000000 PUBLIC BRACCHAR
1222.2 0015B6 .... DW link
1222.3 0015B8 FE DB 0FEh // ; immediate
(LSB=0)
1222.4 0015B9 link SET $
1222.5 0015B9 06 DB 6
1222.6 0015BA 5B434841525D DB '[CHAR]'
1222.7 0015C0 EVEN
1222.8 0015C0 IF 'DOCOLON'='DOCODE'
1222.9 0015C0 BRACCHAR: DW $+2
1222.10 0015C0 ELSE
1222.11 0015C0 .... BRACCHAR: DW DOCOLON
1222.12 0015C2 ENDIF
1222.13 0015C2 ENDM
1223 0015C2 .... DW CHARR
1224 0015C4 ............ DW lit,lit,COMMAXT
1225 0015CA ........ DW ICOMMA,EXIT
1226 0015CE
1227 0015CE ;C ( -- skip input until
)
1228 0015CE ; [ HEX ] 29 PARSE 2DROP ; IMMEDIATE
1229 0015CE IMMED PAREN,1,'(',DOCOLON
1229.1 000000 PUBLIC PAREN
1229.2 0015CE .... DW link
1229.3 0015D0 FE DB 0FEh // ; immediate
(LSB=0)
1229.4 0015D1 link SET $
1229.5 0015D1 01 DB 1
1229.6 0015D2 28 DB '('
1229.7 0015D3 00 EVEN
1229.8 0015D4 IF 'DOCOLON'='DOCODE'
1229.9 0015D4 PAREN: DW $+2
1229.10 0015D4 ELSE
1229.11 0015D4 .... PAREN: DW DOCOLON
1229.12 0015D6 ENDIF
1229.13 0015D6 ENDM
1230 0015D6 ....2900....* DW lit,29H,PARSE,TWODROP,EXIT
1231 0015E0
1232 0015E0 ; COMPILER =====================================
=
1233 0015E0
1234 0015E0 ;Z HEADER -- create a Forth word
header
1235 0015E0 ; LATEST @ H, 0FF HC, link & IMMED
field
1236 0015E0 ; HHERE LATEST ! new "latest"
link
1237 0015E0 ; BL HWORD HC@ 1+ HALLOT name field
1238 0015E0 ; ALIGN ;
1239 0015E0 ; Separate headers model.
1240 0015E0 HEADER HEADR,6,'HEADER',DOCOLON
1240.1 000000 PUBLIC HEADR
1240.2 0015E0 .... DW link
1240.3 0015E2 FF DB 0FFh ; not immediate
1240.4 0015E3 link SET $
1240.5 0015E3 06 DB 6
1240.6 0015E4 484541444552 DB 'HEADER'
1240.7 0015EA EVEN
1240.8 0015EA IF 'DOCOLON'='DOCODE'
1240.9 0015EA HEADR: DW $+2
1240.10 0015EA ELSE
1240.11 0015EA .... HEADR: DW DOCOLON
1240.12 0015EC ENDIF
1240.13 0015EC ENDM
1241 0015EC ............ DW LATEST,FETCH,HCOMMA ; link
1242 0015F2 ....FF00.... DW lit,0FFh,HCCOMMA ; immediate
flag - see
note
below
1243 0015F8 ............ DW HHERE,LATEST,STORE
1244 0015FE ............* DW BLANK,HWORD,HCFETCH,ONEPLUS,HALLOT
- 4e-core430G2553 - Page 115
1245 001608 ........ DW ALIGNN,EXIT ; MSP430: headers in I
space must be
aligned
1246 00160C ; Note for Flashable MSP430: when compiling to
RAM, we need to set
1247 00160C ; the immediate byte to 0FFH. When compiling to
Flash, the word IC!
1248 00160C ; will not write 0FFH to erased Flash (because
the byte is already 0FFH).
1249 00160C ; Thus we can write this byte at a later time
(with IMMEDIATE).
1250 00160C
1251 00160C ;Z ) -- run-time action of
DOES>
1268 00163E ; R> adrs of headless DOES>
def'n
1269 00163E ; LATEST @ NFA>CFA code field to fix
up
1270 00163E ; !CF ;
1271 00163E HEADER XDOES,7,'(DOES>)',DOCOLON
1271.1 000000 PUBLIC XDOES
1271.2 00163E .... DW link
1271.3 001640 FF DB 0FFh ; not immediate
1271.4 001641 link SET $
1271.5 001641 07 DB 7
1271.6 001642 28444F45533E* DB '(DOES>)'
1271.7 001649 00 EVEN
1271.8 00164A IF 'DOCOLON'='DOCODE'
1271.9 00164A XDOES: DW $+2
1271.10 00164A ELSE
1271.11 00164A .... XDOES: DW DOCOLON
- 4e-core430G2553 - Page 116
1271.12 00164C ENDIF
1271.13 00164C ENDM
1272 00164C ............* DW RFROM,LATEST,FETCH,NFATOCFA,STORECF
1273 001656 .... DW EXIT
1274 001658
1275 001658 ;C DOES> -- change action of latest
def'n
1276 001658 ; COMPILE (DOES>)
1277 001658 ; dodoes ,JMP ; IMMEDIATE
1278 001658 ; Note that MSP430 uses a JMP, not a CALL, to
DODOES.
1279 001658 IMMED DOES,5,'DOES>',DOCOLON
1279.1 000000 PUBLIC DOES
1279.2 001658 .... DW link
1279.3 00165A FE DB 0FEh // ; immediate
(LSB=0)
1279.4 00165B link SET $
1279.5 00165B 05 DB 5
1279.6 00165C 444F45533E DB 'DOES>'
1279.7 001661 00 EVEN
1279.8 001662 IF 'DOCOLON'='DOCODE'
1279.9 001662 DOES: DW $+2
1279.10 001662 ELSE
1279.11 001662 .... DOES: DW DOCOLON
1279.12 001664 ENDIF
1279.13 001664 ENDM
1280 001664 ............ DW lit,XDOES,COMMAXT
1281 00166A ............* DW lit,dodoes,COMMAJMP,EXIT
1282 001672
1283 001672 ;C RECURSE -- recurse current definition
1284 001672 ; LATEST @ NFA>CFA ,XT ; IMMEDIATE
1285 001672 ; NEWEST @ NFA>CFA ,XT ; IMMEDIATE
Flashable
1286 001672 IMMED RECURSE,7,'RECURSE',DOCOLON
1286.1 000000 PUBLIC RECURSE
1286.2 001672 .... DW link
1286.3 001674 FE DB 0FEh // ; immediate
(LSB=0)
1286.4 001675 link SET $
1286.5 001675 07 DB 7
1286.6 001676 524543555253* DB 'RECURSE'
1286.7 00167D 00 EVEN
1286.8 00167E IF 'DOCOLON'='DOCODE'
1286.9 00167E RECURSE: DW $+2
1286.10 00167E ELSE
1286.11 00167E .... RECURSE: DW DOCOLON
1286.12 001680 ENDIF
1286.13 001680 ENDM
1287 001680 ............* DW NEWEST,FETCH,NFATOCFA,COMMAXT,EXIT
1288 00168A
1289 00168A ;C [ -- enter interpretive
state
1290 00168A ; 0 STATE ! ; IMMEDIATE
1291 00168A IMMED LEFTBRACKET,1,'[',DOCOLON
1291.1 000000 PUBLIC LEFTBRACKET
1291.2 00168A .... DW link
1291.3 00168C FE DB 0FEh // ; immediate
(LSB=0)
1291.4 00168D link SET $
1291.5 00168D 01 DB 1
1291.6 00168E 5B DB '['
1291.7 00168F 00 EVEN
1291.8 001690 IF 'DOCOLON'='DOCODE'
1291.9 001690 LEFTBRACKET: DW $+2
1291.10 001690 ELSE
1291.11 001690 .... LEFTBRACKET: DW DOCOLON
1291.12 001692 ENDIF
1291.13 001692 ENDM
1292 001692 ............* DW ZERO,STATE,STORE,EXIT
1293 00169A
1294 00169A ;C ] -- enter compiling state
1295 00169A ; -1 STATE ! ;
1296 00169A HEADER RIGHTBRACKET,1,']',DOCOLON
1296.1 000000 PUBLIC RIGHTBRACKET
1296.2 00169A .... DW link
1296.3 00169C FF DB 0FFh ; not immediate
1296.4 00169D link SET $
1296.5 00169D 01 DB 1
- 4e-core430G2553 - Page 117
1296.6 00169E 5D DB ']'
1296.7 00169F 00 EVEN
1296.8 0016A0 IF 'DOCOLON'='DOCODE'
1296.9 0016A0 RIGHTBRACKET: DW $+2
1296.10 0016A0 ELSE
1296.11 0016A0 .... RIGHTBRACKET: DW DOCOLON
1296.12 0016A2 ENDIF
1296.13 0016A2 ENDM
1297 0016A2 ....FFFF....* DW lit,-1,STATE,STORE,EXIT
1298 0016AC
1299 0016AC ;Z HIDE -- "hide" latest definition
Flashable
1300 0016AC ; LATEST @ DUP NEWEST ! NFA>LFA H@ LATEST !
;
1301 0016AC HEADER HIDE,4,'HIDE',DOCOLON
1301.1 000000 PUBLIC HIDE
1301.2 0016AC .... DW link
1301.3 0016AE FF DB 0FFh ; not immediate
1301.4 0016AF link SET $
1301.5 0016AF 04 DB 4
1301.6 0016B0 48494445 DB 'HIDE'
1301.7 0016B4 EVEN
1301.8 0016B4 IF 'DOCOLON'='DOCODE'
1301.9 0016B4 HIDE: DW $+2
1301.10 0016B4 ELSE
1301.11 0016B4 .... HIDE: DW DOCOLON
1301.12 0016B6 ENDIF
1301.13 0016B6 ENDM
1302 0016B6 ............* DW LATEST,FETCH,DUP,NEWEST,STORE
1303 0016C0 ............* DW NFATOLFA,HFETCH,LATEST,STORE,EXIT
1304 0016CA
1305 0016CA ;Z REVEAL -- "reveal" latest definition
Flashable
1306 0016CA ; NEWEST @ LATEST ! ;
1307 0016CA HEADER REVEAL,6,'REVEAL',DOCOLON
1307.1 000000 PUBLIC REVEAL
1307.2 0016CA .... DW link
1307.3 0016CC FF DB 0FFh ; not immediate
1307.4 0016CD link SET $
1307.5 0016CD 06 DB 6
1307.6 0016CE 52455645414C DB 'REVEAL'
1307.7 0016D4 EVEN
1307.8 0016D4 IF 'DOCOLON'='DOCODE'
1307.9 0016D4 REVEAL: DW $+2
1307.10 0016D4 ELSE
1307.11 0016D4 .... REVEAL: DW DOCOLON
1307.12 0016D6 ENDIF
1307.13 0016D6 ENDM
1308 0016D6 ............* DW NEWEST,FETCH,LATEST,STORE,EXIT
1309 0016E0
1310 0016E0 ;C IMMEDIATE -- make last def'n immediate
1311 0016E0 ; 0FE LATEST @ 1- HC! ; set Flashable
immediate flag
1312 0016E0 HEADER IMMEDIATE,9,'IMMEDIATE',DOCOLON
1312.1 000000 PUBLIC IMMEDIATE
1312.2 0016E0 .... DW link
1312.3 0016E2 FF DB 0FFh ; not immediate
1312.4 0016E3 link SET $
1312.5 0016E3 09 DB 9
1312.6 0016E4 494D4D454449* DB 'IMMEDIATE'
1312.7 0016ED 00 EVEN
1312.8 0016EE IF 'DOCOLON'='DOCODE'
1312.9 0016EE IMMEDIATE: DW $+2
1312.10 0016EE ELSE
1312.11 0016EE .... IMMEDIATE: DW DOCOLON
1312.12 0016F0 ENDIF
1312.13 0016F0 ENDM
1313 0016F0 ....FE00....* DW lit,0FEh,LATEST,FETCH,ONEMINUS,HCSTOR
E
1314 0016FC .... DW EXIT
1315 0016FE
1316 0016FE ;C : -- begin a colon definition
1317 0016FE ; DUP CELL+ >R @ ,XT ;
1364 001770 ; The phrase ['] xxx ,XT appears so often
that
1365 001770 ; this word was created to combine the
actions
1366 001770 ; of LIT and ,XT. It takes an inline literal
1367 001770 ; execution token and appends it to the
dict.
1368 001770 ; HEADER COMPILE,7,'COMPILE',DOCOLON
1369 001770 ; DW RFROM,DUP,CELLPLUS,TOR
1370 001770 ; DW FETCH,COMMAXT,EXIT
1371 001770 ; N.B.: not used in the current implementation
1372 001770
1373 001770 ; CONTROL STRUCTURES ===========================
=
1374 001770
1375 001770 ;C IF -- adrs conditional forward
branch
1376 001770 ; ['] qbran ,BRANCH IHERE ,NONE ;
Flashable
1377 001770 ; IMMEDIATE
1378 001770 IMMED IFF,2,'IF',DOCOLON
1378.1 000000 PUBLIC IFF
1378.2 001770 .... DW link
1378.3 001772 FE DB 0FEh // ; immediate
(LSB=0)
1378.4 001773 link SET $
1378.5 001773 02 DB 2
1378.6 001774 4946 DB 'IF'
1378.7 001776 EVEN
1378.8 001776 IF 'DOCOLON'='DOCODE'
1378.9 001776 IFF: DW $+2
1378.10 001776 ELSE
1378.11 001776 .... IFF: DW DOCOLON
1378.12 001778 ENDIF
1378.13 001778 ENDM
1379 001778 ............ DW lit,qbran,COMMABRANCH
- 4e-core430G2553 - Page 120
1380 00177E ............ DW IHERE,COMMANONE,EXIT
1381 001784
1382 001784 ;C THEN adrs -- resolve forward
branch
1383 001784 ; IHERE SWAP !DEST ; IMMEDIATE
1384 001784 IMMED THEN,4,'THEN',DOCOLON
1384.1 000000 PUBLIC THEN
1384.2 001784 .... DW link
1384.3 001786 FE DB 0FEh // ; immediate
(LSB=0)
1384.4 001787 link SET $
1384.5 001787 04 DB 4
1384.6 001788 5448454E DB 'THEN'
1384.7 00178C EVEN
1384.8 00178C IF 'DOCOLON'='DOCODE'
1384.9 00178C THEN: DW $+2
1384.10 00178C ELSE
1384.11 00178C .... THEN: DW DOCOLON
1384.12 00178E ENDIF
1384.13 00178E ENDM
1385 00178E ............* DW IHERE,SWAP,STOREDEST,EXIT
1386 001796
1387 001796 ;C ELSE adrs1 -- adrs2 branch for
IF..ELSE
1388 001796 ; ['] branch ,BRANCH IHERE ,NONE
Flashable
1389 001796 ; SWAP POSTPONE THEN ; IMMEDIATE
1390 001796 IMMED ELSS,4,'ELSE',DOCOLON
1390.1 000000 PUBLIC ELSS
1390.2 001796 .... DW link
1390.3 001798 FE DB 0FEh // ; immediate
(LSB=0)
1390.4 001799 link SET $
1390.5 001799 04 DB 4
1390.6 00179A 454C5345 DB 'ELSE'
1390.7 00179E EVEN
1390.8 00179E IF 'DOCOLON'='DOCODE'
1390.9 00179E ELSS: DW $+2
1390.10 00179E ELSE
1390.11 00179E .... ELSS: DW DOCOLON
1390.12 0017A0 ENDIF
1390.13 0017A0 ENDM
1391 0017A0 ............ DW lit,bran,COMMABRANCH
1392 0017A6 ........ DW IHERE,COMMANONE
1393 0017AA ............ DW SWAP,THEN,EXIT
1394 0017B0
1395 0017B0 ;C BEGIN -- adrs target for bwd.
branch
1396 0017B0 ; IHERE ; IMMEDIATE
1397 0017B0 IMMED BEGIN,5,'BEGIN',DOCOLON
1397.1 000000 PUBLIC BEGIN
1397.2 0017B0 .... DW link
1397.3 0017B2 FE DB 0FEh // ; immediate
(LSB=0)
1397.4 0017B3 link SET $
1397.5 0017B3 05 DB 5
1397.6 0017B4 424547494E DB 'BEGIN'
1397.7 0017B9 00 EVEN
1397.8 0017BA IF 'DOCOLON'='DOCODE'
1397.9 0017BA BEGIN: DW $+2
1397.10 0017BA ELSE
1397.11 0017BA .... BEGIN: DW DOCOLON
1397.12 0017BC ENDIF
1397.13 0017BC ENDM
1398 0017BC ........ DW IHERE,EXIT
1399 0017C0
1400 0017C0 ;C UNTIL adrs -- conditional backward
branch
1401 0017C0 ; ['] qbran ,BRANCH ,DEST ; IMMEDIATE
1402 0017C0 ; conditional backward branch
1403 0017C0 IMMED UNTIL,5,'UNTIL',DOCOLON
1403.1 000000 PUBLIC UNTIL
1403.2 0017C0 .... DW link
1403.3 0017C2 FE DB 0FEh // ; immediate
(LSB=0)
1403.4 0017C3 link SET $
1403.5 0017C3 05 DB 5
1403.6 0017C4 554E54494C DB 'UNTIL'
- 4e-core430G2553 - Page 121
1403.7 0017C9 00 EVEN
1403.8 0017CA IF 'DOCOLON'='DOCODE'
1403.9 0017CA UNTIL: DW $+2
1403.10 0017CA ELSE
1403.11 0017CA .... UNTIL: DW DOCOLON
1403.12 0017CC ENDIF
1403.13 0017CC ENDM
1404 0017CC ............ DW lit,qbran,COMMABRANCH
1405 0017D2 ........ DW COMMADEST,EXIT
1406 0017D6
1407 0017D6 ;X AGAIN adrs -- uncond'l backward
branch
1408 0017D6 ; ['] branch ,BRANCH ,DEST ; IMMEDIATE
1409 0017D6 ; unconditional backward branch
1410 0017D6 IMMED AGAIN,5,'AGAIN',DOCOLON
1410.1 000000 PUBLIC AGAIN
1410.2 0017D6 .... DW link
1410.3 0017D8 FE DB 0FEh // ; immediate
(LSB=0)
1410.4 0017D9 link SET $
1410.5 0017D9 05 DB 5
1410.6 0017DA 414741494E DB 'AGAIN'
1410.7 0017DF 00 EVEN
1410.8 0017E0 IF 'DOCOLON'='DOCODE'
1410.9 0017E0 AGAIN: DW $+2
1410.10 0017E0 ELSE
1410.11 0017E0 .... AGAIN: DW DOCOLON
1410.12 0017E2 ENDIF
1410.13 0017E2 ENDM
1411 0017E2 ............ DW lit,bran,COMMABRANCH
1412 0017E8 ........ DW COMMADEST,EXIT
1413 0017EC
1414 0017EC ;C WHILE adrs1 -- adrs2 adrs1
branch for WHILE loop
1415 0017EC ; POSTPONE IF SWAP ; IMMEDIATE
1416 0017EC IMMED WHILE,5,'WHILE',DOCOLON
1416.1 000000 PUBLIC WHILE
1416.2 0017EC .... DW link
1416.3 0017EE FE DB 0FEh // ; immediate
(LSB=0)
1416.4 0017EF link SET $
1416.5 0017EF 05 DB 5
1416.6 0017F0 5748494C45 DB 'WHILE'
1416.7 0017F5 00 EVEN
1416.8 0017F6 IF 'DOCOLON'='DOCODE'
1416.9 0017F6 WHILE: DW $+2
1416.10 0017F6 ELSE
1416.11 0017F6 .... WHILE: DW DOCOLON
1416.12 0017F8 ENDIF
1416.13 0017F8 ENDM
1417 0017F8 ............ DW IFF,SWAP,EXIT
1418 0017FE
1419 0017FE ;C REPEAT adrs2 adrs1 -- resolve
WHILE loop
1420 0017FE ; POSTPONE AGAIN POSTPONE THEN ; IMMEDIATE
1421 0017FE IMMED REPEAT,6,'REPEAT',DOCOLON
1421.1 000000 PUBLIC REPEAT
1421.2 0017FE .... DW link
1421.3 001800 FE DB 0FEh // ; immediate
(LSB=0)
1421.4 001801 link SET $
1421.5 001801 06 DB 6
1421.6 001802 524550454154 DB 'REPEAT'
1421.7 001808 EVEN
1421.8 001808 IF 'DOCOLON'='DOCODE'
1421.9 001808 REPEAT: DW $+2
1421.10 001808 ELSE
1421.11 001808 .... REPEAT: DW DOCOLON
1421.12 00180A ENDIF
1421.13 00180A ENDM
1422 00180A ............ DW AGAIN,THEN,EXIT
1423 001810
1424 001810 ;Z >L x -- L: -- x move to leave
stack
1425 001810 ; CELL LP +! LP @ ! ; (L stack grows
up)
1426 001810 HEADER TOL,2,'>L',DOCOLON
1426.1 000000 PUBLIC TOL
- 4e-core430G2553 - Page 122
1426.2 001810 .... DW link
1426.3 001812 FF DB 0FFh ; not immediate
1426.4 001813 link SET $
1426.5 001813 02 DB 2
1426.6 001814 3E4C DB '>L'
1426.7 001816 EVEN
1426.8 001816 IF 'DOCOLON'='DOCODE'
1426.9 001816 TOL: DW $+2
1426.10 001816 ELSE
1426.11 001816 .... TOL: DW DOCOLON
1426.12 001818 ENDIF
1426.13 001818 ENDM
1427 001818 ............* DW CELL,LP,PLUSSTORE,LP,FETCH,STORE,EXIT
1428 001826
1429 001826 ;Z L> -- x L: x -- move from leave
stack
1430 001826 ; LP @ @ CELL NEGATE LP +! ;
1431 001826 HEADER LFROM,2,'L>',DOCOLON
1431.1 000000 PUBLIC LFROM
1431.2 001826 .... DW link
1431.3 001828 FF DB 0FFh ; not immediate
1431.4 001829 link SET $
1431.5 001829 02 DB 2
1431.6 00182A 4C3E DB 'L>'
1431.7 00182C EVEN
1431.8 00182C IF 'DOCOLON'='DOCODE'
1431.9 00182C LFROM: DW $+2
1431.10 00182C ELSE
1431.11 00182C .... LFROM: DW DOCOLON
1431.12 00182E ENDIF
1431.13 00182E ENDM
1432 00182E ............ DW LP,FETCH,FETCH
1433 001834 ............* DW CELL,NEGATE,LP,PLUSSTORE,EXIT
1434 00183E
1435 00183E ;C DO -- adrs L: -- 0 start a loop
1436 00183E ; ['] xdo ,XT IHERE target for bwd
branch
1437 00183E ; 0 >L ; IMMEDIATE marker for
LEAVEs
1438 00183E IMMED DO,2,'DO',DOCOLON
1438.1 000000 PUBLIC DO
1438.2 00183E .... DW link
1438.3 001840 FE DB 0FEh // ; immediate
(LSB=0)
1438.4 001841 link SET $
1438.5 001841 02 DB 2
1438.6 001842 444F DB 'DO'
1438.7 001844 EVEN
1438.8 001844 IF 'DOCOLON'='DOCODE'
1438.9 001844 DO: DW $+2
1438.10 001844 ELSE
1438.11 001844 .... DO: DW DOCOLON
1438.12 001846 ENDIF
1438.13 001846 ENDM
1439 001846 ............* DW lit,xdo,COMMAXT,IHERE
1440 00184E ............ DW ZERO,TOL,EXIT
1441 001854
1442 001854 ;Z ENDLOOP adrs xt -- L: 0 a1 a2 .. aN --
common factor of LOOP and +LOOP
1443 001854 ; ,BRANCH ,DEST backward
loop
1444 001854 ; BEGIN L> ?DUP WHILE POSTPONE THEN REPEAT
;
1445 001854 ; resolve
LEAVEs
1446 001854 ; This is a common factor of LOOP and +LOOP.
1447 001854 HEADER ENDLOOP,7,'ENDLOOP',DOCOLON
1447.1 000000 PUBLIC ENDLOOP
1447.2 001854 .... DW link
1447.3 001856 FF DB 0FFh ; not immediate
1447.4 001857 link SET $
1447.5 001857 07 DB 7
1447.6 001858 454E444C4F4F* DB 'ENDLOOP'
1447.7 00185F 00 EVEN
1447.8 001860 IF 'DOCOLON'='DOCODE'
1447.9 001860 ENDLOOP: DW $+2
1447.10 001860 ELSE
- 4e-core430G2553 - Page 123
1447.11 001860 .... ENDLOOP: DW DOCOLON
1447.12 001862 ENDIF
1447.13 001862 ENDM
1448 001862 ........ DW COMMABRANCH,COMMADEST
1449 001866 ............ LOOP1: DW LFROM,QDUP,qbran
1450 00186C DEST LOOP2
1450.1 00186C 0800 DW LOOP2-$
1450.2 00186E ENDM
1451 00186E ........ DW THEN,bran
1452 001872 DEST LOOP1
1452.1 001872 F4FF DW LOOP1-$
1452.2 001874 ENDM
1453 001874 .... LOOP2: DW EXIT
1454 001876
1455 001876 ;C LOOP adrs -- L: 0 a1 a2 .. aN -- finish
a loop
1456 001876 ; ['] xloop ENDLOOP ; IMMEDIATE
1457 001876 IMMED LOO,4,'LOOP',DOCOLON
1457.1 000000 PUBLIC LOO
1457.2 001876 .... DW link
1457.3 001878 FE DB 0FEh // ; immediate
(LSB=0)
1457.4 001879 link SET $
1457.5 001879 04 DB 4
1457.6 00187A 4C4F4F50 DB 'LOOP'
1457.7 00187E EVEN
1457.8 00187E IF 'DOCOLON'='DOCODE'
1457.9 00187E LOO: DW $+2
1457.10 00187E ELSE
1457.11 00187E .... LOO: DW DOCOLON
1457.12 001880 ENDIF
1457.13 001880 ENDM
1458 001880 ............* DW lit,xloop,ENDLOOP,EXIT
1459 001888
1460 001888 ;C +LOOP adrs -- L: 0 a1 a2 .. aN -- finish
a loop
1461 001888 ; ['] xplusloop ENDLOOP ; IMMEDIATE
1462 001888 IMMED PLUSLOOP,5,'+LOOP',DOCOLON
1462.1 000000 PUBLIC PLUSLOOP
1462.2 001888 .... DW link
1462.3 00188A FE DB 0FEh // ; immediate
(LSB=0)
1462.4 00188B link SET $
1462.5 00188B 05 DB 5
1462.6 00188C 2B4C4F4F50 DB '+LOOP'
1462.7 001891 00 EVEN
1462.8 001892 IF 'DOCOLON'='DOCODE'
1462.9 001892 PLUSLOOP: DW $+2
1462.10 001892 ELSE
1462.11 001892 .... PLUSLOOP: DW DOCOLON
1462.12 001894 ENDIF
1462.13 001894 ENDM
1463 001894 ............* DW lit,xplusloop,ENDLOOP,EXIT
1464 00189C
1465 00189C ;C LEAVE -- L: -- adrs
1466 00189C ; ['] UNLOOP ,XT
1467 00189C ; ['] branch ,BRANCH IHERE ,NONE >L
1468 00189C ; ; IMMEDIATE unconditional forward
branch
1469 00189C IMMED LEAV,5,'LEAVE',DOCOLON
1469.1 000000 PUBLIC LEAV
1469.2 00189C .... DW link
1469.3 00189E FE DB 0FEh // ; immediate
(LSB=0)
1469.4 00189F link SET $
1469.5 00189F 05 DB 5
1469.6 0018A0 4C45415645 DB 'LEAVE'
1469.7 0018A5 00 EVEN
1469.8 0018A6 IF 'DOCOLON'='DOCODE'
1469.9 0018A6 LEAV: DW $+2
1469.10 0018A6 ELSE
1469.11 0018A6 .... LEAV: DW DOCOLON
1469.12 0018A8 ENDIF
1469.13 0018A8 ENDM
1470 0018A8 ............ DW lit,UNLOOP,COMMAXT
1471 0018AE ............ DW lit,bran,COMMABRANCH
1472 0018B4 ............* DW IHERE,COMMANONE,TOL,EXIT
1473 0018BC
- 4e-core430G2553 - Page 124
1474 0018BC ; OTHER OPERATIONS =============================
=
1475 0018BC
1476 0018BC ;X WITHIN n1|u1 n2|u2 n3|u3 -- f
n2<=n1R - R> U< ; per ANS
document
1478 0018BC HEADER WITHIN,6,'WITHIN',DOCOLON
1478.1 000000 PUBLIC WITHIN
1478.2 0018BC .... DW link
1478.3 0018BE FF DB 0FFh ; not immediate
1478.4 0018BF link SET $
1478.5 0018BF 06 DB 6
1478.6 0018C0 57495448494E DB 'WITHIN'
1478.7 0018C6 EVEN
1478.8 0018C6 IF 'DOCOLON'='DOCODE'
1478.9 0018C6 WITHIN: DW $+2
1478.10 0018C6 ELSE
1478.11 0018C6 .... WITHIN: DW DOCOLON
1478.12 0018C8 ENDIF
1478.13 0018C8 ENDM
1479 0018C8 ............* DW OVER,MINUS,TOR,MINUS,RFROM,ULESS,EXIT
1480 0018D6
1481 0018D6 ;C MOVE addr1 addr2 u -- smart move
1482 0018D6 ; VERSION FOR 1 ADDRESS UNIT = 1
CHAR
1483 0018D6 ; >R 2DUP SWAP DUP R@ + -- ... dst src
src+n
1484 0018D6 ; WITHIN IF R> CMOVE> src <= dst <
src+n
1485 0018D6 ; ELSE R> CMOVE THEN ;
otherwise
1486 0018D6 HEADER MOVE,4,'MOVE',DOCOLON
1486.1 000000 PUBLIC MOVE
1486.2 0018D6 .... DW link
1486.3 0018D8 FF DB 0FFh ; not immediate
1486.4 0018D9 link SET $
1486.5 0018D9 04 DB 4
1486.6 0018DA 4D4F5645 DB 'MOVE'
1486.7 0018DE EVEN
1486.8 0018DE IF 'DOCOLON'='DOCODE'
1486.9 0018DE MOVE: DW $+2
1486.10 0018DE ELSE
1486.11 0018DE .... MOVE: DW DOCOLON
1486.12 0018E0 ENDIF
1486.13 0018E0 ENDM
1487 0018E0 ............* DW TOR,TWODUP,SWAP,DUP,RFETCH,PLUS
1488 0018EC ........ DW WITHIN,qbran
1489 0018F0 DEST MOVE1
1489.1 0018F0 0A00 DW MOVE1-$
1489.2 0018F2 ENDM
1490 0018F2 ............ DW RFROM,CMOVEUP,bran
1491 0018F8 DEST MOVE2
1491.1 0018F8 0600 DW MOVE2-$
1491.2 0018FA ENDM
1492 0018FA ........ MOVE1: DW RFROM,CMOVE
1493 0018FE .... MOVE2: DW EXIT
1494 001900
1495 001900 ;C DEPTH -- +n number of items on
stack
1496 001900 ; SP@ S0 SWAP - 2/ ; 16-BIT VERSION!
1497 001900 HEADER DEPTH,5,'DEPTH',DOCOLON
1497.1 000000 PUBLIC DEPTH
1497.2 001900 .... DW link
1497.3 001902 FF DB 0FFh ; not immediate
1497.4 001903 link SET $
1497.5 001903 05 DB 5
1497.6 001904 4445505448 DB 'DEPTH'
1497.7 001909 00 EVEN
1497.8 00190A IF 'DOCOLON'='DOCODE'
1497.9 00190A DEPTH: DW $+2
1497.10 00190A ELSE
1497.11 00190A .... DEPTH: DW DOCOLON
1497.12 00190C ENDIF
1497.13 00190C ENDM
1498 00190C ............* DW SPFETCH,S0,SWAP,MINUS,TWOSLASH,EXIT
1499 001918
1500 001918 ;C ENVIRONMENT? c-addr u -- false system
- 4e-core430G2553 - Page 125
query
1501 001918 ; -- i*x true
1502 001918 ; 2DROP 0 ; the minimal definition!
1503 001918 HEADER ENVIRONMENTQ,12,'ENVIRONMENT?',DOCOL
ON
1503.1 000000 PUBLIC ENVIRONMENTQ
1503.2 001918 .... DW link
1503.3 00191A FF DB 0FFh ; not immediate
1503.4 00191B link SET $
1503.5 00191B 0C DB 12
1503.6 00191C 454E5649524F* DB 'ENVIRONMENT?'
1503.7 001928 EVEN
1503.8 001928 IF 'DOCOLON'='DOCODE'
1503.9 001928 ENVIRONMENTQ: DW $+2
1503.10 001928 ELSE
1503.11 001928 .... ENVIRONMENTQ: DW DOCOLON
1503.12 00192A ENDIF
1503.13 00192A ENDM
1504 00192A ............ DW TWODROP,ZERO,EXIT
1505 001930
1506 001930 ;U UTILITY WORDS =====================
1507 001930
1508 001930 ;Z NOOP -- do nothing
1509 001930 HEADER NOOP,4,'NOOP',DOCOLON
1509.1 000000 PUBLIC NOOP
1509.2 001930 .... DW link
1509.3 001932 FF DB 0FFh ; not immediate
1509.4 001933 link SET $
1509.5 001933 04 DB 4
1509.6 001934 4E4F4F50 DB 'NOOP'
1509.7 001938 EVEN
1509.8 001938 IF 'DOCOLON'='DOCODE'
1509.9 001938 NOOP: DW $+2
1509.10 001938 ELSE
1509.11 001938 .... NOOP: DW DOCOLON
1509.12 00193A ENDIF
1509.13 00193A ENDM
1510 00193A .... DW EXIT
1511 00193C
1512 00193C ;Z FLALIGNED a -- a' align IDP to flash
boundary
1513 00193C ; $200 OVER - $1FF AND + ;
1514 00193C HEADER FLALIGNED,9,'FLALIGNED',DOCOLON
1514.1 000000 PUBLIC FLALIGNED
1514.2 00193C .... DW link
1514.3 00193E FF DB 0FFh ; not immediate
1514.4 00193F link SET $
1514.5 00193F 09 DB 9
1514.6 001940 464C414C4947* DB 'FLALIGNED'
1514.7 001949 00 EVEN
1514.8 00194A IF 'DOCOLON'='DOCODE'
1514.9 00194A FLALIGNED: DW $+2
1514.10 00194A ELSE
1514.11 00194A .... FLALIGNED: DW DOCOLON
1514.12 00194C ENDIF
1514.13 00194C ENDM
1515 00194C ....0002....* DW lit,0200h,OVER,MINUS,lit,01FFh,ANDD,P
LUS,EXIT
1516 00195E
1517 00195E ;X MARKER -- create word to restore
dictionary
1518 00195E ; LATEST @ IHERE HERE
1519 00195E ; IHERE FLALIGNED IDP ! align new word to
flash boundary
1520 00195E ; DUP I@
1522 00195E ; SWAP CELL+ DUP I@
1523 00195E ; SWAP CELL+ I@ fetch saved -- dp
idp latest
1524 00195E ; OVER FLALIGNED IHERE OVER - FLERASE erase
Flash from saved to IHERE
1525 00195E ; LATEST ! IDP ! DP ! ;
1526 00195E HEADER MARKER,6,'MARKER',DOCOLON
1526.1 000000 PUBLIC MARKER
1526.2 00195E .... DW link
1526.3 001960 FF DB 0FFh ; not immediate
1526.4 001961 link SET $
1526.5 001961 06 DB 6
- 4e-core430G2553 - Page 126
1526.6 001962 4D41524B4552 DB 'MARKER'
1526.7 001968 EVEN
1526.8 001968 IF 'DOCOLON'='DOCODE'
1526.9 001968 MARKER: DW $+2
1526.10 001968 ELSE
1526.11 001968 .... MARKER: DW DOCOLON
1526.12 00196A ENDIF
1526.13 00196A ENDM
1527 00196A ............* DW LATEST,FETCH,IHERE,HERE
1528 001972 ............* DW IHERE,FLALIGNED,IDP,STORE
1529 00197A ............* DW BUILDS,ICOMMA,ICOMMA,ICOMMA,XDOES
1530 001984 3040.... MOV #dodoes,PC ; long direct jump
to DODOES
1531 001988 ........ DW DUP,IFETCH
1532 00198C ............* DW SWAP,CELLPLUS,DUP,IFETCH
1533 001994 ............ DW SWAP,CELLPLUS,IFETCH
1534 00199A ............* DW OVER,FLALIGNED,IHERE,OVER,MINUS,FLERA
SE
1535 0019A6 ............* DW LATEST,STORE,IDP,STORE,DDP,STORE,EXIT
1536 0019B4
1537 0019B4 /***
1538 0019B4 ;X WORDS -- list all words in
dict.
1539 0019B4 ; LATEST @ BEGIN
1540 0019B4 ; DUP HCOUNT 7F AND HTYPE SPACE
1541 0019B4 ; NFA>LFA H@
1542 0019B4 ; DUP 0= UNTIL
1543 0019B4 ; DROP ;
1544 0019B4 HEADER WORDS,5,'WORDS',DOCOLON
1545 0019B4 DW LATEST,FETCH
1546 0019B4 WDS1: DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE
1547 0019B4 DW NFATOLFA,HFETCH
1548 0019B4 DW DUP,ZEROEQUAL,qbran
1549 0019B4 DEST WDS1
1550 0019B4 DW DROP,EXIT
1551 0019B4 ***/
1552 0019B4
1553 0019B4 ;X WORDS -- list all words in dict.
Stop and go key version.
1554 0019B4 ; LATEST @ BEGIN
1555 0019B4 ; KEY? IF KEY DROP KEY 0x0D = IF DROP EXIT
THEN THEN
1556 0019B4 ; DUP HCOUNT 7F AND HTYPE SPACE
1557 0019B4 ; NFA>LFA H@
1558 0019B4 ; DUP 0= UNTIL
1559 0019B4 ; DROP ;
1560 0019B4 HEADER WORDS,5,'WORDS',DOCOLON
1560.1 000000 PUBLIC WORDS
1560.2 0019B4 .... DW link
1560.3 0019B6 FF DB 0FFh ; not immediate
1560.4 0019B7 link SET $
1560.5 0019B7 05 DB 5
1560.6 0019B8 574F524453 DB 'WORDS'
1560.7 0019BD 00 EVEN
1560.8 0019BE IF 'DOCOLON'='DOCODE'
1560.9 0019BE WORDS: DW $+2
1560.10 0019BE ELSE
1560.11 0019BE .... WORDS: DW DOCOLON
1560.12 0019C0 ENDIF
1560.13 0019C0 ENDM
1561 0019C0 ........ DW LATEST,FETCH
1562 0019C4 ........ WDS1: DW KEYQ,qbran
1563 0019C8 DEST WDS2
1563.1 0019C8 1000 DW WDS2-$
1563.2 0019CA ENDM
1564 0019CA ........ DW KEY,DROP ; halt
1565 0019CE ............* DW KEY,BLANK,EQUAL,qbran ; go on if
blank, else
quit
words
1566 0019D6 DEST WDS3
1566.1 0019D6 1C00 DW WDS3-$
1566.2 0019D8 ENDM
1567 0019D8 ............*WDS2: DW DUP,HCOUNT,lit,07FH,ANDD,HTYPE,SPACE
1568 0019E6 ........ DW NFATOLFA,HFETCH
1569 0019EA ............ DW DUP,ZEROEQUAL,qbran
1570 0019F0 DEST WDS1
1570.1 0019F0 D4FF DW WDS1-$
- 4e-core430G2553 - Page 127
1570.2 0019F2 ENDM
1571 0019F2 ........ WDS3: DW DROP,EXIT
1572 0019F6
1573 0019F6 ;X (U.R) u n -- xxx display u
unsigned in n width; primitiv
1574 0019F6 ; >R <# 0 #S #> R> OVER - 0 MAX (jump)
;
1575 0019F6 HEADLESS PARENUDOTR,DOCOLON
1575.1 000000 PUBLIC PARENUDOTR
1575.2 0019F6 IF 'DOCOLON'='DOCODE'
1575.3 0019F6 PARENUDOTR: DW $+2
1575.4 0019F6 ELSE
1575.5 0019F6 .... PARENUDOTR: DW DOCOLON
1575.6 0019F8 ENDIF
1575.7 0019F8 ENDM
1576 0019F8 ............* DW TOR,LESSNUM,ZERO,NUMS,NUMGREATER
1577 001A02 ............* DW RFROM,OVER,MINUS,ZERO,MAX
1578 001A0C .... DW EXIT
1579 001A0E
1580 001A0E ;X U.R u n -- display u unsigned in
n width
1581 001A0E ; >R <# 0 #S #> R> OVER - 0 MAX SPACES TYPE
;
1582 001A0E HEADER UDOTR,3,'U.R',DOCOLON
1582.1 000000 PUBLIC UDOTR
1582.2 001A0E .... DW link
1582.3 001A10 FF DB 0FFh ; not immediate
1582.4 001A11 link SET $
1582.5 001A11 03 DB 3
1582.6 001A12 552E52 DB 'U.R'
1582.7 001A15 00 EVEN
1582.8 001A16 IF 'DOCOLON'='DOCODE'
1582.9 001A16 UDOTR: DW $+2
1582.10 001A16 ELSE
1582.11 001A16 .... UDOTR: DW DOCOLON
1582.12 001A18 ENDIF
1582.13 001A18 ENDM
1583 001A18 .... DW PARENUDOTR
1584 001A1A ............ DW SPACES,TYP,EXIT
1585 001A20
1586 001A20 ;X 0U.R u n -- display u unsigned
in n width with leading zeros
1587 001A20 ; >R <# 0 #S #> R> OVER - 0 MAX SPACES TYPE
;
1588 001A20 HEADER ZEROUDOTR,4,'0U.R',DOCOLON
1588.1 000000 PUBLIC ZEROUDOTR
1588.2 001A20 .... DW link
1588.3 001A22 FF DB 0FFh ; not immediate
1588.4 001A23 link SET $
1588.5 001A23 04 DB 4
1588.6 001A24 30552E52 DB '0U.R'
1588.7 001A28 EVEN
1588.8 001A28 IF 'DOCOLON'='DOCODE'
1588.9 001A28 ZEROUDOTR: DW $+2
1588.10 001A28 ELSE
1588.11 001A28 .... ZEROUDOTR: DW DOCOLON
1588.12 001A2A ENDIF
1588.13 001A2A ENDM
1589 001A2A .... DW PARENUDOTR
1590 001A2C ............ DW ZEROS,TYP,EXIT
1591 001A32
1592 001A32 ;X ZEROS n -- output n zeros
1593 001A32 ; BEGIN DUP WHILE ZERO 1- REPEAT DROP
;
1594 001A32 HEADER ZEROS,5,'ZEROS',DOCOLON
1594.1 000000 PUBLIC ZEROS
1594.2 001A32 .... DW link
1594.3 001A34 FF DB 0FFh ; not immediate
1594.4 001A35 link SET $
1594.5 001A35 05 DB 5
1594.6 001A36 5A45524F53 DB 'ZEROS'
1594.7 001A3B 00 EVEN
1594.8 001A3C IF 'DOCOLON'='DOCODE'
1594.9 001A3C ZEROS: DW $+2
1594.10 001A3C ELSE
1594.11 001A3C .... ZEROS: DW DOCOLON
1594.12 001A3E ENDIF
1594.13 001A3E ENDM
- 4e-core430G2553 - Page 128
1595 001A3E ........ ZEROS1: DW DUP,qbran
1596 001A42 DEST ZEROS2
1596.1 001A42 0E00 DW ZEROS2-$
1596.2 001A44 ENDM
1597 001A44 ....3000....* DW lit,'0',EMIT,ONEMINUS,bran
1598 001A4E DEST ZEROS1
1598.1 001A4E F0FF DW ZEROS1-$
1598.2 001A50 ENDM
1599 001A50 ........ ZEROS2: DW DROP,EXIT
1600 001A54
1601 001A54
1602 001A54
1603 001A54 ;X DUMP adr n -- dump memory
1604 001A54 ; OVER + SWAP DO
1605 001A54 ; CR I 4 U.R SPACE SPACE
1606 001A54 ; I $10 + I DO I C@ 3 U.R LOOP SPACE
SPACE
1607 001A54 ; I $10 + I DO I C@ $7F AND $7E MIN BL MAX
EMIT LOOP
1608 001A54 ; 10 +LOOP ;
1609 001A54 HEADER DUMP,4,'DUMP',DOCOLON
1609.1 000000 PUBLIC DUMP
1609.2 001A54 .... DW link
1609.3 001A56 FF DB 0FFh ; not immediate
1609.4 001A57 link SET $
1609.5 001A57 04 DB 4
1609.6 001A58 44554D50 DB 'DUMP'
1609.7 001A5C EVEN
1609.8 001A5C IF 'DOCOLON'='DOCODE'
1609.9 001A5C DUMP: DW $+2
1609.10 001A5C ELSE
1609.11 001A5C .... DUMP: DW DOCOLON
1609.12 001A5E ENDIF
1609.13 001A5E ENDM
1610 001A5E ............* DW OVER,PLUS,SWAP,xdo
1611 001A66 ............*LDUMP1: DW CR,II,lit,4,UDOTR,SPACE,SPACE
1612 001A74 ........1000* DW II,lit,10h,PLUS,II,xdo
1613 001A80 ............*LDUMP2: DW II,CFETCH,lit,3,UDOTR,xloop
1614 001A8C DEST LDUMP2
1614.1 001A8C F4FF DW LDUMP2-$
1614.2 001A8E ENDM
1615 001A8E ........ DW SPACE,SPACE
1616 001A92 ........1000* DW II,lit,10h,PLUS,II,xdo
1617 001A9E ............*LDUMP3: DW II,CFETCH,lit,7Fh,ANDD,lit,7Eh,MIN,BL
ANK,MAX,EMIT,xloop
1618 001AB6 DEST LDUMP3
1618.1 001AB6 E8FF DW LDUMP3-$
1618.2 001AB8 ENDM
1619 001AB8 ....1000.... DW lit,10h,xplusloop
1620 001ABE DEST LDUMP1
1620.1 001ABE A8FF DW LDUMP1-$
1620.2 001AC0 ENDM
1621 001AC0 .... DW EXIT
1622 001AC2
1623 001AC2 ;X .S -- print stack contents
1624 001AC2 ; [char] < EMIT DEPTH . BS [char] > EMIT
1625 001AC2 ; SP@ S0 < IF
1626 001AC2 ; SP@ S0 2 - DO I @ U. -2 +LOOP
1627 001AC2 ; THEN ;
1628 001AC2 HEADER DOTS,2,'.S',DOCOLON
1628.1 000000 PUBLIC DOTS
1628.2 001AC2 .... DW link
1628.3 001AC4 FF DB 0FFh ; not immediate
1628.4 001AC5 link SET $
1628.5 001AC5 02 DB 2
1628.6 001AC6 2E53 DB '.S'
1628.7 001AC8 EVEN
1628.8 001AC8 IF 'DOCOLON'='DOCODE'
1628.9 001AC8 DOTS: DW $+2
1628.10 001AC8 ELSE
1628.11 001AC8 .... DOTS: DW DOCOLON
1628.12 001ACA ENDIF
1628.13 001ACA ENDM
1629 001ACA ;mk gforth style
1630 001ACA ....3C00.... DW lit,$3C,EMIT
1631 001AD0 ........ DW DEPTH,DOT
1632 001AD4 ....0800....* DW lit,$08,EMIT,lit,$3E,EMIT,SPACE
- 4e-core430G2553 - Page 129
1633 001AE2 ;/mk
1634 001AE2 ............* DW SPFETCH,S0,LESS,qbran
1635 001AEA DEST DOTS2
1635.1 001AEA 1C00 DW DOTS2-$
1635.2 001AEC ENDM
1636 001AEC ............* DW SPFETCH,S0,lit,2,MINUS
1637 001AF6 ; DW TWODUP,TOR,TOR,
1638 001AF6 .... DW xdo
1639 001AF8 ............*DOTS1: DW II,FETCH,UDOT,lit,-2,xplusloop
1640 001B04 DEST DOTS1
1640.1 001B04 F4FF DW DOTS1-$
1640.2 001B06 ENDM
1641 001B06 ; DW lit,'|',EMIT,RFROM,RFROM
1642 001B06 ; DW xdo
1643 001B06 ;DOTS11: DW II,FETCH,UDOT,lit,-2,xplusloop
1644 001B06 ; DEST DOTS11
1645 001B06 .... DOTS2: DW EXIT
1646 001B08
1647 001B08
1648 001B08 ;U ccrc n c -- n' crc process
byte
1649 001B08 ; 8 LSHIFT XOR
1650 001B08 ; 8 0 DO ( n' )
1651 001B08 ; DUP 1 LSHIFT SWAP 8000 AND 0= INVERT 1021
( CRC-16 ) AND XOR
1652 001B08 ; LOOP
1653 001B08 ; FFFF AND ;
1654 001B08 ; HEADER CCRC,4,'ccrc',DOCODE
1655 001B08 HEADLESS CCRC,DOCODE
1655.1 000000 PUBLIC CCRC
1655.2 001B08 IF 'DOCODE'='DOCODE'
1655.3 001B08 .... CCRC: DW $+2
1655.4 001B0A ELSE
1655.5 001B0A CCRC: DW DOCODE
1655.6 001B0A ENDIF
1655.7 001B0A ENDM
1656 001B0A 37F0FF00 AND #00FFh,TOS
1657 001B0E 8710 SWPB TOS
1658 001B10 37E4 XOR @PSP+,TOS
1659 001B12 3642 MOV #8,W
1660 001B14 0757 ccrc1: RLA TOS
1661 001B16 0228 JNC ccrc2
1662 001B18 37E02110 XOR #01021h,TOS
1663 001B1C 1683 ccrc2: DEC W
1664 001B1E FA23 JNZ ccrc1
1665 001B20 NEXT
1665.1 001B20 3645 MOV @IP+,W // ; fetch word address
into W
1665.2 001B22 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1665.3 001B24 ENDM
1666 001B24
1667 001B24 ;U crc n addr len -- n' crc process
string
1668 001B24 ; dup IF over + swap DO ( n ) I C@ ccrc LOOP
ELSE 2drop THEN ;
1669 001B24 HEADER CRC,3,'CRC',DOCOLON
1669.1 000000 PUBLIC CRC
1669.2 001B24 .... DW link
1669.3 001B26 FF DB 0FFh ; not immediate
1669.4 001B27 link SET $
1669.5 001B27 03 DB 3
1669.6 001B28 435243 DB 'CRC'
1669.7 001B2B 00 EVEN
1669.8 001B2C IF 'DOCOLON'='DOCODE'
1669.9 001B2C CRC: DW $+2
1669.10 001B2C ELSE
1669.11 001B2C .... CRC: DW DOCOLON
1669.12 001B2E ENDIF
1669.13 001B2E ENDM
1670 001B2E ........ DW DUP,qbran
1671 001B32 DEST pcrc2
1671.1 001B32 1800 DW pcrc2-$
1671.2 001B34 ENDM
1672 001B34 ............* DW OVER,PLUS,SWAP,xdo
1673 001B3C ............*pcrc1: DW II,CFETCH,CCRC, xloop
1674 001B44 DEST pcrc1
- 4e-core430G2553 - Page 130
1674.1 001B44 F8FF DW pcrc1-$
1674.2 001B46 ENDM
1675 001B46 .... DW bran
1676 001B48 DEST pcrc3
1676.1 001B48 0400 DW pcrc3-$
1676.2 001B4A ENDM
1677 001B4A .... pcrc2: DW TWODROP
1678 001B4C .... pcrc3: DW EXIT
1679 001B4E
1680 001B4E
1681 001B4E
1682 001B4E ;U MISC ========================================
================================
1683 001B4E
1684 001B4E ;C 2CONSTANT w1 w2 -- define a
Forth double constant
1685 001B4E ; (machine code fragment)
1687 001B4E ; Note that the constant is stored in Code
space.
1688 001B4E HEADER TWOCONSTANT,9,'2CONSTANT',DOCOLON
1688.1 000000 PUBLIC TWOCONSTANT
1688.2 001B4E .... DW link
1688.3 001B50 FF DB 0FFh ; not immediate
1688.4 001B51 link SET $
1688.5 001B51 09 DB 9
1688.6 001B52 32434F4E5354* DB '2CONSTANT'
1688.7 001B5B 00 EVEN
1688.8 001B5C IF 'DOCOLON'='DOCODE'
1688.9 001B5C TWOCONSTANT: DW $+2
1688.10 001B5C ELSE
1688.11 001B5C .... TWOCONSTANT: DW DOCOLON
1688.12 001B5E ENDIF
1688.13 001B5E ENDM
1689 001B5E ............* DW BUILDS,ICOMMA,ICOMMA,XDOES
1690 000000 PUBLIC DOTWOCON
1691 001B66 DOTWOCON: ; ( -- w1 w2 )
1692 001B66 2482 SUB #4,PSP ; make room on stack
1693 001B68 84470200 MOV TOS,2(PSP)
1694 001B6C 3746 MOV @W+,TOS ; fetch from parameter
field to TOS
1695 001B6E A4460000 MOV @W,0(PSP) ; fetch secon word from
parameter field to
NOS
1696 001B72 NEXT
1696.1 001B72 3645 MOV @IP+,W // ; fetch word address
into W
1696.2 001B74 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1696.3 001B76 ENDM
1697 001B76
1698 001B76 ;U \ -- backslash
1699 001B76 ; everything up to the end of the current line
is a comment.
1700 001B76 ; SOURCE >IN ! DROP ;
1701 001B76 IMMED BACKSLASH,1,'\\',DOCOLON
1701.1 000000 PUBLIC BACKSLASH
1701.2 001B76 .... DW link
1701.3 001B78 FE DB 0FEh // ; immediate
(LSB=0)
1701.4 001B79 link SET $
1701.5 001B79 01 DB 1
1701.6 001B7A 5C DB '\\'
1701.7 001B7B 00 EVEN
1701.8 001B7C IF 'DOCOLON'='DOCODE'
1701.9 001B7C BACKSLASH: DW $+2
1701.10 001B7C ELSE
1701.11 001B7C .... BACKSLASH: DW DOCOLON
1701.12 001B7E ENDIF
1701.13 001B7E ENDM
1702 001B7E ............* DW SOURCE,TOIN,STORE,DROP,EXIT
1703 001B88
1704 001B88 ;Z .VER -- type message
1705 001B88 HEADER DOTVER,4,'.VER',DOCOLON
1705.1 000000 PUBLIC DOTVER
- 4e-core430G2553 - Page 131
1705.2 001B88 .... DW link
1705.3 001B8A FF DB 0FFh ; not immediate
1705.4 001B8B link SET $
1705.5 001B8B 04 DB 4
1705.6 001B8C 2E564552 DB '.VER'
1705.7 001B90 EVEN
1705.8 001B90 IF 'DOCOLON'='DOCODE'
1705.9 001B90 DOTVER: DW $+2
1705.10 001B90 ELSE
1705.11 001B90 .... DOTVER: DW DOCOLON
1705.12 001B92 ENDIF
1705.13 001B92 ENDM
1706 001B92 ............* DW lit,version,COUNT,ITYPE ; # of
version
1707 001B9A ............* DW lit,stamp,COUNT,ONEMINUS,ITYPE ; time
stamp of version
1708 001BA4 .... DW DOTBOOTVERSION
1709 001BA6 .... DW SPACE
1710 001BA8 ............ DW BASE,FETCH,BIN
1711 001BAE ............* DW COR,FETCH,lit,16,ZEROUDOTR ; flags
indicating reset procedure.
1712 001BB8 ........ DW BASE,STORE
1713 001BBC .... DW EXIT
1714 001BBE
1715 001BBE ;U BELL -- send $07 to
Terminal
1716 001BBE HEADER BELL,4,'BELL',DOCOLON
1716.1 000000 PUBLIC BELL
1716.2 001BBE .... DW link
1716.3 001BC0 FF DB 0FFh ; not immediate
1716.4 001BC1 link SET $
1716.5 001BC1 04 DB 4
1716.6 001BC2 42454C4C DB 'BELL'
1716.7 001BC6 EVEN
1716.8 001BC6 IF 'DOCOLON'='DOCODE'
1716.9 001BC6 BELL: DW $+2
1716.10 001BC6 ELSE
1716.11 001BC6 .... BELL: DW DOCOLON
1716.12 001BC8 ENDIF
1716.13 001BC8 ENDM
1717 001BC8 ....0700....* DW lit,7,EMIT,EXIT
1718 001BD0
1719 001BD0 ;U ESC[ -- start esc-sequence
1720 001BD0 ; 27 emit 91 emit ;
1721 001BD0 HEADERLESS ESCPAR,4,'ESC[',DOCOLON
1721.1 000000 PUBLIC ESCPAR
1721.2 001BD0 IF 'DOCOLON'='DOCODE'
1721.3 001BD0 ESCPAR: DW $+2
1721.4 001BD0 ELSE
1721.5 001BD0 .... ESCPAR: DW DOCOLON
1721.6 001BD2 ENDIF
1721.7 001BD2 ENDM
1722 001BD2 ....1B00....* DW lit,27,EMIT, lit,91,EMIT
1723 001BDE .... DW EXIT
1724 001BE0
1725 001BE0 ;U PN -- send parameter of
esc-sequence
1726 001BE0 ; base @ swap decimal 0 u.r base ! ;
1727 001BE0 HEADERLESS PN,2,'PN',DOCOLON
1727.1 000000 PUBLIC PN
1727.2 001BE0 IF 'DOCOLON'='DOCODE'
1727.3 001BE0 PN: DW $+2
1727.4 001BE0 ELSE
1727.5 001BE0 .... PN: DW DOCOLON
1727.6 001BE2 ENDIF
1727.7 001BE2 ENDM
1728 001BE2 ........ DW BASE,FETCH
1729 001BE6 ............* DW SWAP,DECIMAL,ZERO,UDOTR
1730 001BEE ........ DW BASE,STORE
1731 001BF2 .... DW EXIT
1732 001BF4
1733 001BF4 ;U ;PN -- send delimiter ;
followed by parameter
1734 001BF4 ; 59 emit pn ;
1735 001BF4 HEADERLESS SEMIPN,3,';PN',DOCOLON
- 4e-core430G2553 - Page 132
1735.1 000000 PUBLIC SEMIPN
1735.2 001BF4 IF 'DOCOLON'='DOCODE'
1735.3 001BF4 SEMIPN: DW $+2
1735.4 001BF4 ELSE
1735.5 001BF4 .... SEMIPN: DW DOCOLON
1735.6 001BF6 ENDIF
1735.7 001BF6 ENDM
1736 001BF6 ....3B00....* DW lit,59,EMIT,PN
1737 001BFE .... DW EXIT
1738 001C00
1739 001C00 ;U AT-XY x y -- send esc-sequence to
terminal
1740 001C00 ; 1+ swap 1+ swap ESC[ pn ;pn 72 emit ;
1741 001C00 HEADER ATXY,5,'AT-XY',DOCOLON
1741.1 000000 PUBLIC ATXY
1741.2 001C00 .... DW link
1741.3 001C02 FF DB 0FFh ; not immediate
1741.4 001C03 link SET $
1741.5 001C03 05 DB 5
1741.6 001C04 41542D5859 DB 'AT-XY'
1741.7 001C09 00 EVEN
1741.8 001C0A IF 'DOCOLON'='DOCODE'
1741.9 001C0A ATXY: DW $+2
1741.10 001C0A ELSE
1741.11 001C0A .... ATXY: DW DOCOLON
1741.12 001C0C ENDIF
1741.13 001C0C ENDM
1742 001C0C ............* DW ONEPLUS,SWAP,ONEPLUS,SWAP
1743 001C14 ........ DW ESCPAR,PN
1744 001C18 ........4800* DW SEMIPN, lit,72,EMIT
1745 001C20 .... DW EXIT
1746 001C22
1747 001C22 ;U PAGE -- send "page" command
to terminal to clear screen.
1748 001C22 ; esc[ ." 2J" 0 0 at-xy ;
1749 001C22 HEADER PAGEE,4,'PAGE',DOCOLON
1749.1 000000 PUBLIC PAGEE
1749.2 001C22 .... DW link
1749.3 001C24 FF DB 0FFh ; not immediate
1749.4 001C25 link SET $
1749.5 001C25 04 DB 4
1749.6 001C26 50414745 DB 'PAGE'
1749.7 001C2A EVEN
1749.8 001C2A IF 'DOCOLON'='DOCODE'
1749.9 001C2A PAGEE: DW $+2
1749.10 001C2A ELSE
1749.11 001C2A .... PAGEE: DW DOCOLON
1749.12 001C2C ENDIF
1749.13 001C2C ENDM
1750 001C2C .... DW ESCPAR
1751 001C2E .... DW XISQUOTE
1752 001C30 03 DB (ESC1-ESC0)
1753 001C31 324A ESC0: DB '2J'
1754 001C33 00 EVEN
1755 001C34 .... ESC1: DW ITYPE
1756 001C36 ............ DW ZERO,ZERO,ATXY
1757 001C3C .... DW EXIT
1758 001C3E
1759 001C3E ;U BIN -- set number base to
binary
1760 001C3E HEADER BIN,3,'BIN',DOCOLON
1760.1 000000 PUBLIC BIN
1760.2 001C3E .... DW link
1760.3 001C40 FF DB 0FFh ; not immediate
1760.4 001C41 link SET $
1760.5 001C41 03 DB 3
1760.6 001C42 42494E DB 'BIN'
1760.7 001C45 00 EVEN
1760.8 001C46 IF 'DOCOLON'='DOCODE'
1760.9 001C46 BIN: DW $+2
1760.10 001C46 ELSE
1760.11 001C46 .... BIN: DW DOCOLON
1760.12 001C48 ENDIF
1760.13 001C48 ENDM
1761 001C48 ....0200....* DW lit,2,BASE,STORE,EXIT
1762 001C52
1763 001C52 ; ommitted, MSP430G2553 RAM is too smal.
- 4e-core430G2553 - Page 133
1764 001C52 ;U RAM -- compile into RAM.
SAVE your system befor using RAM.
1765 001C52 ; here unused 10 - allot idp ! ; Use COLD to
swich back to flash.
1766 001C52 ; HEADER RAM,3,'RAM',DOCOLON
1767 001C52 ; DW HERE,UNUSED,lit,0x10,MINUS,ALLOT,ID
P,STORE,EXIT
1768 001C52
1769 001C52 ;U TRUE -- f true flag
1770 001C52 HEADER TRUE,4,'TRUE',DOCON
1770.1 000000 PUBLIC TRUE
1770.2 001C52 .... DW link
1770.3 001C54 FF DB 0FFh ; not immediate
1770.4 001C55 link SET $
1770.5 001C55 04 DB 4
1770.6 001C56 54525545 DB 'TRUE'
1770.7 001C5A EVEN
1770.8 001C5A IF 'DOCON'='DOCODE'
1770.9 001C5A TRUE: DW $+2
1770.10 001C5A ELSE
1770.11 001C5A .... TRUE: DW DOCON
1770.12 001C5C ENDIF
1770.13 001C5C ENDM
1771 001C5C FFFF DW 0xFFFF
1772 001C5E
1773 001C5E ;U FALSE -- f false flag
1774 001C5E HEADER FALSE,5,'FALSE',DOCON
1774.1 000000 PUBLIC FALSE
1774.2 001C5E .... DW link
1774.3 001C60 FF DB 0FFh ; not immediate
1774.4 001C61 link SET $
1774.5 001C61 05 DB 5
1774.6 001C62 46414C5345 DB 'FALSE'
1774.7 001C67 00 EVEN
1774.8 001C68 IF 'DOCON'='DOCODE'
1774.9 001C68 FALSE: DW $+2
1774.10 001C68 ELSE
1774.11 001C68 .... FALSE: DW DOCON
1774.12 001C6A ENDIF
1774.13 001C6A ENDM
1775 001C6A 0000 DW 0x0
1776 001C6C
1777 001C6C ;C TABLE -- create an empty definition
pointing to FLASH
1778 001C6C ; HEADER
1779 001C6C ; docreate ,CF code field
1780 001C6C ; IHERE I, ; store data adr
(Harvard)
1781 001C6C ; Harvard model, separate Code and Data
spaces.
1782 001C6C ; Separate headers model.
1783 001C6C ; or do this (4e4th):
1784 001C6C ; : TABLE @
;
1785 001C6C HEADER TABLE,5,'TABLE',DOCOLON
1785.1 000000 PUBLIC TABLE
1785.2 001C6C .... DW link
1785.3 001C6E FF DB 0FFh ; not immediate
1785.4 001C6F link SET $
1785.5 001C6F 05 DB 5
1785.6 001C70 5441424C45 DB 'TABLE'
1785.7 001C75 00 EVEN
1785.8 001C76 IF 'DOCOLON'='DOCODE'
1785.9 001C76 TABLE: DW $+2
1785.10 001C76 ELSE
1785.11 001C76 .... TABLE: DW DOCOLON
1785.12 001C78 ENDIF
1785.13 001C78 ENDM
1786 001C78 .... DW HEADR
1787 001C7A ............ DW lit,docreate,COMMACF
1788 001C80 ............* DW IHERE,CELL,PLUS,ICOMMA,EXIT
1789 001C8A
1790 001C8A
1791 001C8A
1792 001C8A ;U MCU specific words ==========================
================================
1793 001C8A
1794 001C8A /*
- 4e-core430G2553 - Page 134
1795 001C8A ; .ID -- Print MCU identifier.
1796 001C8A HEADER DOTID,3,'.ID',DOCOLON
1797 001C8A DW lit,id,COUNT,ITYPE
1798 001C8A DW EXIT
1799 001C8A */
1800 001C8A
1801 001C8A ;U 1MS -- wait about 1 millisecond
1802 001C8A ; xx 0 DO yy 0 DO LOOP LOOP ; adjust xx and yy
to get a msec.
1803 001C8A HEADER ONEMS,3,'1MS',DOCOLON
1803.1 000000 PUBLIC ONEMS
1803.2 001C8A .... DW link
1803.3 001C8C FF DB 0FFh ; not immediate
1803.4 001C8D link SET $
1803.5 001C8D 03 DB 3
1803.6 001C8E 314D53 DB '1MS'
1803.7 001C91 00 EVEN
1803.8 001C92 IF 'DOCOLON'='DOCODE'
1803.9 001C92 ONEMS: DW $+2
1803.10 001C92 ELSE
1803.11 001C92 .... ONEMS: DW DOCOLON
1803.12 001C94 ENDIF
1803.13 001C94 ENDM
1804 001C94 ....2900....* DW lit,41,ZERO,xdo
1805 001C9C ....0B00....*onems1: DW lit,11,ZERO,xdo
1806 001CA4 .... onems2: DW xloop
1807 001CA6 DEST onems2
1807.1 001CA6 FEFF DW onems2-$
1807.2 001CA8 ENDM
1808 001CA8 .... DW xloop
1809 001CAA DEST onems1
1809.1 001CAA F2FF DW onems1-$
1809.2 001CAC ENDM
1810 001CAC .... DW EXIT
1811 001CAE
1812 001CAE ;U MS n -- wait about n
milliseconds
1813 001CAE ; 0 DO 1MS LOOP ;
1814 001CAE HEADER MS,2,'MS',DOCOLON
1814.1 000000 PUBLIC MS
1814.2 001CAE .... DW link
1814.3 001CB0 FF DB 0FFh ; not immediate
1814.4 001CB1 link SET $
1814.5 001CB1 02 DB 2
1814.6 001CB2 4D53 DB 'MS'
1814.7 001CB4 EVEN
1814.8 001CB4 IF 'DOCOLON'='DOCODE'
1814.9 001CB4 MS: DW $+2
1814.10 001CB4 ELSE
1814.11 001CB4 .... MS: DW DOCOLON
1814.12 001CB6 ENDIF
1814.13 001CB6 ENDM
1815 001CB6 ........ DW ZERO,xdo
1816 001CBA ........ ms1: DW ONEMS,xloop
1817 001CBE DEST ms1
1817.1 001CBE FCFF DW ms1-$
1817.2 001CC0 ENDM
1818 001CC0 .... DW EXIT
1819 001CC2
1820 001CC2
1821 001CC2 ;U Bit manipulation words ----------------------
--------------------------------
1822 001CC2 ; based on http://www.forth.org/svfig/Len/bits.
htm
1823 001CC2
1824 001CC2 ;U SET mask addr -- set bit from mask in
addr (cell); use even adr!
1825 001CC2 HEADER wset,3,'SET',DOCODE
1825.1 000000 PUBLIC wset
1825.2 001CC2 .... DW link
1825.3 001CC4 FF DB 0FFh ; not immediate
1825.4 001CC5 link SET $
1825.5 001CC5 03 DB 3
1825.6 001CC6 534554 DB 'SET'
1825.7 001CC9 00 EVEN
1825.8 001CCA IF 'DOCODE'='DOCODE'
1825.9 001CCA .... wset: DW $+2
- 4e-core430G2553 - Page 135
1825.10 001CCC ELSE
1825.11 001CCC wset: DW DOCODE
1825.12 001CCC ENDIF
1825.13 001CCC ENDM
1826 001CCC A7D40000 BIS @PSP,0(TOS)
1827 001CD0 2453 ADD #2,PSP
1828 001CD2 3744 MOV @PSP+,TOS
1829 001CD4 NEXT
1829.1 001CD4 3645 MOV @IP+,W // ; fetch word address
into W
1829.2 001CD6 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1829.3 001CD8 ENDM
1830 001CD8
1831 001CD8 ;U CSET mask addr -- set bit from mask
in addr (byte)
1832 001CD8 HEADER cset,4,'CSET',DOCODE
1832.1 000000 PUBLIC cset
1832.2 001CD8 .... DW link
1832.3 001CDA FF DB 0FFh ; not immediate
1832.4 001CDB link SET $
1832.5 001CDB 04 DB 4
1832.6 001CDC 43534554 DB 'CSET'
1832.7 001CE0 EVEN
1832.8 001CE0 IF 'DOCODE'='DOCODE'
1832.9 001CE0 .... cset: DW $+2
1832.10 001CE2 ELSE
1832.11 001CE2 cset: DW DOCODE
1832.12 001CE2 ENDIF
1832.13 001CE2 ENDM
1833 001CE2 E7D40000 BIS.B @PSP,0(TOS)
1834 001CE6 2453 ADD #2,PSP
1835 001CE8 3744 MOV @PSP+,TOS
1836 001CEA NEXT
1836.1 001CEA 3645 MOV @IP+,W // ; fetch word address
into W
1836.2 001CEC 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1836.3 001CEE ENDM
1837 001CEE
1838 001CEE ;U CLR mask addr -- reset bit from mask in
addr (cell); use even adr!
1839 001CEE HEADER wclr,3,'CLR',DOCODE
1839.1 000000 PUBLIC wclr
1839.2 001CEE .... DW link
1839.3 001CF0 FF DB 0FFh ; not immediate
1839.4 001CF1 link SET $
1839.5 001CF1 03 DB 3
1839.6 001CF2 434C52 DB 'CLR'
1839.7 001CF5 00 EVEN
1839.8 001CF6 IF 'DOCODE'='DOCODE'
1839.9 001CF6 .... wclr: DW $+2
1839.10 001CF8 ELSE
1839.11 001CF8 wclr: DW DOCODE
1839.12 001CF8 ENDIF
1839.13 001CF8 ENDM
1840 001CF8 A7C40000 BIC @PSP,0(TOS)
1841 001CFC 2453 ADD #2,PSP
1842 001CFE 3744 MOV @PSP+,TOS
1843 001D00 NEXT
1843.1 001D00 3645 MOV @IP+,W // ; fetch word address
into W
1843.2 001D02 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1843.3 001D04 ENDM
1844 001D04
1845 001D04 ;U CCLR mask addr -- reset bit from mask
in addr (byte)
1846 001D04 HEADER cclr,4,'CCLR',DOCODE
1846.1 000000 PUBLIC cclr
1846.2 001D04 .... DW link
1846.3 001D06 FF DB 0FFh ; not immediate
1846.4 001D07 link SET $
1846.5 001D07 04 DB 4
1846.6 001D08 43434C52 DB 'CCLR'
1846.7 001D0C EVEN
1846.8 001D0C IF 'DOCODE'='DOCODE'
1846.9 001D0C .... cclr: DW $+2
- 4e-core430G2553 - Page 136
1846.10 001D0E ELSE
1846.11 001D0E cclr: DW DOCODE
1846.12 001D0E ENDIF
1846.13 001D0E ENDM
1847 001D0E E7C40000 BIC.B @PSP,0(TOS)
1848 001D12 2453 ADD #2,PSP
1849 001D14 3744 MOV @PSP+,TOS
1850 001D16 NEXT
1850.1 001D16 3645 MOV @IP+,W // ; fetch word address
into W
1850.2 001D18 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1850.3 001D1A ENDM
1851 001D1A
1852 001D1A ;U CTOGGLE mask addr -- flip bit from
mask in addr (byte)
1853 001D1A HEADER ctoggle,7,'CTOGGLE',DOCODE
1853.1 000000 PUBLIC ctoggle
1853.2 001D1A .... DW link
1853.3 001D1C FF DB 0FFh ; not immediate
1853.4 001D1D link SET $
1853.5 001D1D 07 DB 7
1853.6 001D1E 43544F47474C* DB 'CTOGGLE'
1853.7 001D25 00 EVEN
1853.8 001D26 IF 'DOCODE'='DOCODE'
1853.9 001D26 .... ctoggle: DW $+2
1853.10 001D28 ELSE
1853.11 001D28 ctoggle: DW DOCODE
1853.12 001D28 ENDIF
1853.13 001D28 ENDM
1854 001D28 E7E40000 XOR.B @PSP,0(TOS)
1855 001D2C 2453 ADD #2,PSP
1856 001D2E 3744 MOV @PSP+,TOS
1857 001D30 NEXT
1857.1 001D30 3645 MOV @IP+,W // ; fetch word address
into W
1857.2 001D32 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1857.3 001D34 ENDM
1858 001D34
1859 001D34 ;U CGET mask addr -- flag test bit from
mask in addr (byte)
1860 001D34 HEADER cget,4,'CGET',DOCODE
1860.1 000000 PUBLIC cget
1860.2 001D34 .... DW link
1860.3 001D36 FF DB 0FFh ; not immediate
1860.4 001D37 link SET $
1860.5 001D37 04 DB 4
1860.6 001D38 43474554 DB 'CGET'
1860.7 001D3C EVEN
1860.8 001D3C IF 'DOCODE'='DOCODE'
1860.9 001D3C .... cget: DW $+2
1860.10 001D3E ELSE
1860.11 001D3E cget: DW DOCODE
1860.12 001D3E ENDIF
1860.13 001D3E ENDM
1861 001D3E E7B40000 BIT.B @PSP,0(TOS)
1862 001D42 0224 JZ cget1
1863 001D44 3743 MOV #-1,TOS
1864 001D46 013C JMP cget2
1865 001D48 0743 cget1:MOV #0, TOS
1866 001D4A 2453 cget2:ADD #2,PSP
1867 001D4C NEXT
1867.1 001D4C 3645 MOV @IP+,W // ; fetch word address
into W
1867.2 001D4E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1867.3 001D50 ENDM
1868 001D50
1869 001D50
1870 001D50 ;U Memory info ---------------------------------
--------------------------------
1871 001D50
1872 001D50 /* see also: XLINK configuration file for
MSP430G2553
1873 001D50 ram =: 0200-03FF
1874 001D50 0200-03C9 forth system; userarea, stacks,
tib, pad ...
- 4e-core430G2553 - Page 137
1875 001D50 03CA-03FF VARAREA for forth variables;
check UNUSED ram.
1876 001D50
1877 001D50 flash =: C000-FFFF
1878 001D50 C000-D7FF MEMBOT to MEMTOP is user flash.
Check unsused MEM.
1879 001D50 D800-FDFF kernel
1880 001D50 FE00-FFFF INTSEG
1881 001D50 FFE0-FFFF INTVEC
1882 001D50 FFFE-FFFF RESET
1883 001D50 */
1884 001D50
1885 001D50 ;Z RESETADR -- adr reset vector
address
1886 001D50 HEADER RESETADR,8,'RESETADR',DOCON
1886.1 000000 PUBLIC RESETADR
1886.2 001D50 .... DW link
1886.3 001D52 FF DB 0FFh ; not immediate
1886.4 001D53 link SET $
1886.5 001D53 08 DB 8
1886.6 001D54 524553455441* DB 'RESETADR'
1886.7 001D5C EVEN
1886.8 001D5C IF 'DOCON'='DOCODE'
1886.9 001D5C RESETADR: DW $+2
1886.10 001D5C ELSE
1886.11 001D5C .... RESETADR: DW DOCON
1886.12 001D5E ENDIF
1886.13 001D5E ENDM
1887 001D5E .... DW resetvec
1888 001D60
1889 001D60 ;Z MEMBOT -- adr begining of USERflash
1890 001D60 HEADER MEMBOT,6,'MEMBOT',DOCON
1890.1 000000 PUBLIC MEMBOT
1890.2 001D60 .... DW link
1890.3 001D62 FF DB 0FFh ; not immediate
1890.4 001D63 link SET $
1890.5 001D63 06 DB 6
1890.6 001D64 4D454D424F54 DB 'MEMBOT'
1890.7 001D6A EVEN
1890.8 001D6A IF 'DOCON'='DOCODE'
1890.9 001D6A MEMBOT: DW $+2
1890.10 001D6A ELSE
1890.11 001D6A .... MEMBOT: DW DOCON
1890.12 001D6C ENDIF
1890.13 001D6C ENDM
1891 001D6C 00C0 DW USERFLASHSTART
1892 001D6E
1893 001D6E ;Z MEMTOP -- adr end of USERflash
1894 001D6E HEADER MEMTOP,6,'MEMTOP',DOCON
1894.1 000000 PUBLIC MEMTOP
1894.2 001D6E .... DW link
1894.3 001D70 FF DB 0FFh ; not immediate
1894.4 001D71 link SET $
1894.5 001D71 06 DB 6
1894.6 001D72 4D454D544F50 DB 'MEMTOP'
1894.7 001D78 EVEN
1894.8 001D78 IF 'DOCON'='DOCODE'
1894.9 001D78 MEMTOP: DW $+2
1894.10 001D78 ELSE
1894.11 001D78 .... MEMTOP: DW DOCON
1894.12 001D7A ENDIF
1894.13 001D7A ENDM
1895 001D7A FFD7 DW USERFLASHEND
1896 001D7C
1897 001D7C ;U MEM -- u bytes left in flash
1898 001D7C ; memtop ihere - ;
1899 001D7C HEADER MEM,3,'MEM',DOCOLON
1899.1 000000 PUBLIC MEM
1899.2 001D7C .... DW link
1899.3 001D7E FF DB 0FFh ; not immediate
1899.4 001D7F link SET $
1899.5 001D7F 03 DB 3
1899.6 001D80 4D454D DB 'MEM'
1899.7 001D83 00 EVEN
1899.8 001D84 IF 'DOCOLON'='DOCODE'
1899.9 001D84 MEM: DW $+2
- 4e-core430G2553 - Page 138
1899.10 001D84 ELSE
1899.11 001D84 .... MEM: DW DOCOLON
1899.12 001D86 ENDIF
1899.13 001D86 ENDM
1900 001D86 ............ DW MEMTOP,IHERE,MINUS
1901 001D8C .... DW EXIT
1902 001D8E
1903 001D8E ;U UNUSED -- u bytes left in RAM
1904 001D8E HEADER UNUSED,6,'UNUSED',DOCOLON
1904.1 000000 PUBLIC UNUSED
1904.2 001D8E .... DW link
1904.3 001D90 FF DB 0FFh ; not immediate
1904.4 001D91 link SET $
1904.5 001D91 06 DB 6
1904.6 001D92 554E55534544 DB 'UNUSED'
1904.7 001D98 EVEN
1904.8 001D98 IF 'DOCOLON'='DOCODE'
1904.9 001D98 UNUSED: DW $+2
1904.10 001D98 ELSE
1904.11 001D98 .... UNUSED: DW DOCOLON
1904.12 001D9A ENDIF
1904.13 001D9A ENDM
1905 001D9A ....0004....* DW lit,RAMEND,HERE,MINUS
1906 001DA2 .... DW EXIT
1907 001DA4
1908 001DA4 ;Z VARBOT -- a-addr bottom of Variable
Area
1909 001DA4 HEADER VARBOT,6,'VARBOT',DOCON
1909.1 000000 PUBLIC VARBOT
1909.2 001DA4 .... DW link
1909.3 001DA6 FF DB 0FFh ; not immediate
1909.4 001DA7 link SET $
1909.5 001DA7 06 DB 6
1909.6 001DA8 564152424F54 DB 'VARBOT'
1909.7 001DAE EVEN
1909.8 001DAE IF 'DOCON'='DOCODE'
1909.9 001DAE VARBOT: DW $+2
1909.10 001DAE ELSE
1909.11 001DAE .... VARBOT: DW DOCON
1909.12 001DB0 ENDIF
1909.13 001DB0 ENDM
1910 001DB0 .... DW VARAREA
1911 001DB2
1912 000000 EXTERN intseg,intvecs
1913 001DB2 ;Z TOPSEG -- a-addr bottom of top most
segment
1914 001DB2 HEADER TOPSEG,6,'TOPSEG',DOCON
1914.1 000000 PUBLIC TOPSEG
1914.2 001DB2 .... DW link
1914.3 001DB4 FF DB 0FFh ; not immediate
1914.4 001DB5 link SET $
1914.5 001DB5 06 DB 6
1914.6 001DB6 544F50534547 DB 'TOPSEG'
1914.7 001DBC EVEN
1914.8 001DBC IF 'DOCON'='DOCODE'
1914.9 001DBC TOPSEG: DW $+2
1914.10 001DBC ELSE
1914.11 001DBC .... TOPSEG: DW DOCON
1914.12 001DBE ENDIF
1914.13 001DBE ENDM
1915 001DBE .... DW intseg
1916 001DC0
1917 001DC0 ;Z VECBOT -- a-addr begining of vector
segment
1918 001DC0 HEADER VECBOT,6,'VECBOT',DOCON
1918.1 000000 PUBLIC VECBOT
1918.2 001DC0 .... DW link
1918.3 001DC2 FF DB 0FFh ; not immediate
1918.4 001DC3 link SET $
1918.5 001DC3 06 DB 6
1918.6 001DC4 564543424F54 DB 'VECBOT'
1918.7 001DCA EVEN
1918.8 001DCA IF 'DOCON'='DOCODE'
1918.9 001DCA VECBOT: DW $+2
1918.10 001DCA ELSE
1918.11 001DCA .... VECBOT: DW DOCON
1918.12 001DCC ENDIF
1918.13 001DCC ENDM
- 4e-core430G2553 - Page 139
1919 001DCC .... DW intvecs
1920 001DCE
1921 001DCE
1922 001DCE ;U ? adr -- u display content of
variable
1923 001DCE ; @ u. ;
1924 001DCE HEADER QQ,1,'?',DOCOLON
1924.1 000000 PUBLIC QQ
1924.2 001DCE .... DW link
1924.3 001DD0 FF DB 0FFh ; not immediate
1924.4 001DD1 link SET $
1924.5 001DD1 01 DB 1
1924.6 001DD2 3F DB '?'
1924.7 001DD3 00 EVEN
1924.8 001DD4 IF 'DOCOLON'='DOCODE'
1924.9 001DD4 QQ: DW $+2
1924.10 001DD4 ELSE
1924.11 001DD4 .... QQ: DW DOCOLON
1924.12 001DD6 ENDIF
1924.13 001DD6 ENDM
1925 001DD6 ........ DW FETCH,UDOT
1926 001DDA .... DW EXIT
1927 001DDC
1928 001DDC
1929 001DDC ;U MCU Peripherie ------------------------------
--------------------------------
1930 001DDC
1931 001DDC ;Z P1 -- adr address of port1 output
register
1932 001DDC HEADER P1,2,'P1',DOCON
1932.1 000000 PUBLIC P1
1932.2 001DDC .... DW link
1932.3 001DDE FF DB 0FFh ; not immediate
1932.4 001DDF link SET $
1932.5 001DDF 02 DB 2
1932.6 001DE0 5031 DB 'P1'
1932.7 001DE2 EVEN
1932.8 001DE2 IF 'DOCON'='DOCODE'
1932.9 001DE2 P1: DW $+2
1932.10 001DE2 ELSE
1932.11 001DE2 .... P1: DW DOCON
1932.12 001DE4 ENDIF
1932.13 001DE4 ENDM
1933 001DE4 2100 DW P1OUT
1934 001DE6
1935 001DE6 ;Z P2 -- adr address of port2 output
register
1936 001DE6 HEADER P2,2,'P2',DOCON
1936.1 000000 PUBLIC P2
1936.2 001DE6 .... DW link
1936.3 001DE8 FF DB 0FFh ; not immediate
1936.4 001DE9 link SET $
1936.5 001DE9 02 DB 2
1936.6 001DEA 5032 DB 'P2'
1936.7 001DEC EVEN
1936.8 001DEC IF 'DOCON'='DOCODE'
1936.9 001DEC P2: DW $+2
1936.10 001DEC ELSE
1936.11 001DEC .... P2: DW DOCON
1936.12 001DEE ENDIF
1936.13 001DEE ENDM
1937 001DEE 2900 DW P2OUT
1938 001DF0
1939 001DF0 ;Z P3 -- adr address of port2 output
register
1940 001DF0 HEADER P3,2,'P3',DOCON
1940.1 000000 PUBLIC P3
1940.2 001DF0 .... DW link
1940.3 001DF2 FF DB 0FFh ; not immediate
1940.4 001DF3 link SET $
1940.5 001DF3 02 DB 2
1940.6 001DF4 5033 DB 'P3'
1940.7 001DF6 EVEN
1940.8 001DF6 IF 'DOCON'='DOCODE'
1940.9 001DF6 P3: DW $+2
1940.10 001DF6 ELSE
1940.11 001DF6 .... P3: DW DOCON
1940.12 001DF8 ENDIF
- 4e-core430G2553 - Page 140
1940.13 001DF8 ENDM
1941 001DF8 1900 DW P3OUT
1942 001DFA
1943 001DFA ; Note: the first character sent from the MSP430
seems to get
1944 001DFA ; scrambled. I conjecture this is because the
baud rate generator
1945 001DFA ; has not reset to the new rate when we attempt
to send a character.
1946 001DFA ; See init430f1611.s43 for delay after
initialization.
1947 001DFA
1948 001DFA
1949 001DFA ;U Basics for an extern cross assembler
----------------------------------------
1950 001DFA ; Usage of CODE and NEXT see top of file.
1951 001DFA
1952 001DFA ;U CODE -- build header for
assembler word,
1953 001DFA ; execute code at
runtime.
1954 001DFA ; -- build constant
1960 001E14 ; -- adr at runtime put address
of next cell on stack,
1961 001E14 ; thats where your code
starts.
1962 001E14 ; ;
1963 001E14 HEADER CODEADR,7,'CODEADR',DOCOLON
1963.1 000000 PUBLIC CODEADR
1963.2 001E14 .... DW link
1963.3 001E16 FF DB 0FFh ; not immediate
1963.4 001E17 link SET $
1963.5 001E17 07 DB 7
1963.6 001E18 434F44454144* DB 'CODEADR'
1963.7 001E1F 00 EVEN
1963.8 001E20 IF 'DOCOLON'='DOCODE'
1963.9 001E20 CODEADR: DW $+2
1963.10 001E20 ELSE
1963.11 001E20 .... CODEADR: DW DOCOLON
1963.12 001E22 ENDIF
1963.13 001E22 ENDM
1964 001E22 ........ DW BUILDS,XDOES ; build forth word
1965 001E26 3040.... MOV #DOROM,PC ; push ihere to TOS
1966 001E2A
1967 001E2A ;U CALL adr -- run a code subroutine
starting at address.
1968 001E2A HEADER CALLL,4,'CALL',DOCODE
1968.1 000000 PUBLIC CALLL
1968.2 001E2A .... DW link
1968.3 001E2C FF DB 0FFh ; not immediate
1968.4 001E2D link SET $
1968.5 001E2D 04 DB 4
1968.6 001E2E 43414C4C DB 'CALL'
1968.7 001E32 EVEN
1968.8 001E32 IF 'DOCODE'='DOCODE'
1968.9 001E32 .... CALLL: DW $+2
1968.10 001E34 ELSE
1968.11 001E34 CALLL: DW DOCODE
- 4e-core430G2553 - Page 141
1968.12 001E34 ENDIF
1968.13 001E34 ENDM
1969 001E34 8712 CALL TOS
1970 001E36 next
1970.1 001E36 3645 MOV @IP+,W // ; fetch word address
into W
1970.2 001E38 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
1970.3 001E3A ENDM
1971 001E3A
1972 001E3A /*
1973 001E3A ;U NEXT, -- Macro; compiles jump to
high level forth
1974 001E3A ; hex : next 4536 i, 4630 i, ;
1975 001E3A HEADER NEXTCOMA,5,'NEXT,',DOCOLON
1976 001E3A DW lit,4536h,ICOMMA,lit,4630h,ICOMMA
1977 001E3A DW EXIT
1978 001E3A */
1979 001E3A
1980 001E3A ;U END-CODE -- mark end of code
section
1981 001E3A ; ;
1982 001E3A HEADER ENDCODE,8,'END-CODE',DOCOLON
1982.1 000000 PUBLIC ENDCODE
1982.2 001E3A .... DW link
1982.3 001E3C FF DB 0FFh ; not immediate
1982.4 001E3D link SET $
1982.5 001E3D 08 DB 8
1982.6 001E3E 454E442D434F* DB 'END-CODE'
1982.7 001E46 EVEN
1982.8 001E46 IF 'DOCOLON'='DOCODE'
1982.9 001E46 ENDCODE: DW $+2
1982.10 001E46 ELSE
1982.11 001E46 .... ENDCODE: DW DOCOLON
1982.12 001E48 ENDIF
1982.13 001E48 ENDM
1983 001E48 .... DW EXIT ; dummy - used as delimiter in
4e4th-IDE to generate code
1984 001E4A
1985 001E4A
1986 001E4A /***********************************************
********************************
1987 001E4A ; copy&paste to 4e4th:
1988 001E4A
1989 001E4A \ Code example:
1990 001E4A hex
1991 001E4A CODE REDOFF C3D2 I, 0021 I, NEXT,
END-CODE
1992 001E4A CODE REDON D3D2 I, 0021 I, NEXT,
END-CODE
1993 001E4A
1994 001E4A \ now run your words:
1995 001E4A REDOFF 1000 ms REDON
1996 001E4A
1997 001E4A ************************************************
*******************************/
1998 001E4A
1999 001E4A ; EOF
987 001E4A #include "4e-startup.s43"
1 001E4A ;U STARTUP WORDS ===============================
================================
2 001E4A
3 001E4A ;U .BOOTVERSION -- print boot version
4 001E4A HEADLESS DOTBOOTVERSION,DOCOLON
4.1 000000 PUBLIC DOTBOOTVERSION
4.2 001E4A IF 'DOCOLON'='DOCODE'
4.3 001E4A DOTBOOTVERSION: DW $+2
4.4 001E4A ELSE
4.5 001E4A .... DOTBOOTVERSION: DW DOCOLON
4.6 001E4C ENDIF
4.7 001E4C ENDM
5 001E4C .... DW XISQUOTE
6 001E4E 07 DB (doboot1-doboot0)
7 001E4F 206465627567*doboot0: DB ' debug '
8 001E56 EVEN
9 001E56 .... doboot1: DW ITYPE
- 4e-core430G2553 - Page 142
10 001E58 .... DW EXIT
11 001E5A
12 001E5A ;Z ITHERE -- adr find first free flash
cell
13 001E5A ; MEMTOP BEGIN 1-
14 001E5A ; DUP C@ FF <>
15 001E5A ; OVER FL0 < OR UNTIL 1+ ;
16 001E5A HEADER ITHERE,6,'ITHERE',DOCOLON
16.1 000000 PUBLIC ITHERE
16.2 001E5A .... DW link
16.3 001E5C FF DB 0FFh ; not immediate
16.4 001E5D link SET $
16.5 001E5D 06 DB 6
16.6 001E5E 495448455245 DB 'ITHERE'
16.7 001E64 EVEN
16.8 001E64 IF 'DOCOLON'='DOCODE'
16.9 001E64 ITHERE: DW $+2
16.10 001E64 ELSE
16.11 001E64 .... ITHERE: DW DOCOLON
16.12 001E66 ENDIF
16.13 001E66 ENDM
17 001E66 .... DW MEMTOP
18 001E68 ............*ih1 DW ONEMINUS,DUP,CFETCH,lit,$FF,NOTEQUAL
19 001E74 ............* DW OVER,MEMBOT,LESS,ORR,qbran
20 001E7E DEST ih1
20.1 001E7E EAFF DW ih1-$
20.2 001E80 ENDM
21 001E80 ........ DW ONEPLUS,EXIT
22 001E84
23 001E84 ;U APPCRC -- crc CRC of APP-dictionary
24 001E84 ; 0 MEMBOT ITHERE OVER - (crc APPU0 #INIT
(crc ;
25 001E84 ; HEADER APPCRC,6,'APPCRC',DOCOLON
26 001E84 HEADLESS APPCRC,DOCOLON
26.1 000000 PUBLIC APPCRC
26.2 001E84 IF 'DOCOLON'='DOCODE'
26.3 001E84 APPCRC: DW $+2
26.4 001E84 ELSE
26.5 001E84 .... APPCRC: DW DOCOLON
26.6 001E86 ENDIF
26.7 001E86 ENDM
27 001E86 ....0000 DW lit,0
28 001E8A ............* DW MEMBOT,ITHERE,OVER,MINUS,CRC
29 001E94 ............* DW APPU0,NINIT,CRC,EXIT
30 001E9C
31 000000 EXTERN crcval
32 001E9C
33 001E9C ;U VALID? -- f check if user app crc
matches infoB
34 001E9C ; APPCRC crcval I@ = ;
35 001E9C ; HEADER VALIDQ,6,'VALID?',DOCOLON
36 001E9C HEADLESS VALIDQ,DOCOLON
36.1 000000 PUBLIC VALIDQ
36.2 001E9C IF 'DOCOLON'='DOCODE'
36.3 001E9C VALIDQ: DW $+2
36.4 001E9C ELSE
36.5 001E9C .... VALIDQ: DW DOCOLON
36.6 001E9E ENDIF
36.7 001E9E ENDM
37 001E9E ............* DW APPCRC,lit,crcval,IFETCH,EQUAL,EXIT
38 001EAA
39 001EAA ;U SAVE -- save user area to infoB
40 001EAA ; InfoB [ 63 2 + ] Literal FLERASE
41 001EAA ; U0 APPU0 #INIT D->I
42 001EAA ; APPCRC [ crcval ] Literal I! ;
43 001EAA HEADER SAVE,4,'SAVE',DOCOLON
43.1 000000 PUBLIC SAVE
43.2 001EAA .... DW link
43.3 001EAC FF DB 0FFh ; not immediate
43.4 001EAD link SET $
43.5 001EAD 04 DB 4
43.6 001EAE 53415645 DB 'SAVE'
43.7 001EB2 EVEN
43.8 001EB2 IF 'DOCOLON'='DOCODE'
43.9 001EB2 SAVE: DW $+2
43.10 001EB2 ELSE
43.11 001EB2 .... SAVE: DW DOCOLON
43.12 001EB4 ENDIF
- 4e-core430G2553 - Page 143
43.13 001EB4 ENDM
44 001EB4 ; save user area to infoB
45 001EB4 ........4100* DW INFOB,lit,63+2,FLERASE
46 001EBC ............* DW U0,APPU0,NINIT,DTOI
47 001EC4 ............* DW APPCRC,lit,crcval,ISTORE
48 001ECC ; save variable area to infoC
49 001ECC ........4100* DW INFOC,lit,63+2,FLERASE
50 001ED4 ............* DW HERE,UNUSED,ZERO,FILL
51 001EDC ............* DW VARBOT,INFOC,lit,(VAR_SIZE)*2,DTOI
52 001EE6 .... DW EXIT
53 001EE8
54 00018E CORREST EQU 018Eh
55 000186 CORPOWERON EQU 0186h
56 001EE8
57 001EE8 ;Z BOOT -- boot system
58 001EE8 HEADER BOOT,4,'BOOT',DOCOLON
58.1 000000 PUBLIC BOOT
58.2 001EE8 .... DW link
58.3 001EEA FF DB 0FFh ; not immediate
58.4 001EEB link SET $
58.5 001EEB 04 DB 4
58.6 001EEC 424F4F54 DB 'BOOT'
58.7 001EF0 EVEN
58.8 001EF0 IF 'DOCOLON'='DOCODE'
58.9 001EF0 BOOT: DW $+2
58.10 001EF0 ELSE
58.11 001EF0 .... BOOT: DW DOCOLON
58.12 001EF2 ENDIF
58.13 001EF2 ENDM
59 001EF2 ............ DW S2,cget,qbran
60 001EF8 DEST boot1
60.1 001EF8 2800 DW boot1-$
60.2 001EFA ENDM
61 001EFA ........ DW VALIDQ,qbran
62 001EFE DEST invalid
62.1 001EFE 0400 DW invalid-$
62.2 001F00 ENDM
63 001F00 .... valid: DW COLD ; valid infoB and dictionary
64 001F02 ............*invalid:DW COR,FETCH,lit,CORPOWERON,NOTEQUAL,qbr
an
65 001F0E DEST boot1
65.1 001F0E 1200 DW boot1-$
65.2 001F10 ENDM
66 001F10 reset1: ; reset and invalid infoB
67 001F10 ............* DW LATEST,FETCH,MEMBOT,ITHERE,WITHIN,qbr
an ; check RAM latest
68 001F1C DEST boot1
68.1 001F1C 0400 DW boot1-$
68.2 001F1E ENDM
69 001F1E .... DW WARM ; invalid infoB but seemingly
valid RAM
70 001F20 .... boot1: DW WIPE ; invalid infoB but power on
or RAM invalid
71 001F22
72 000000 PUBLIC BOOTIP ; used to init IP register.
73 001F22 BOOTIP equ BOOT+2
74 001F22
75 001F22 ;Z WARM -- use user area from RAM
(hopefully intact)
76 001F22 HEADER WARM,4,'WARM',DOCOLON
76.1 000000 PUBLIC WARM
76.2 001F22 .... DW link
76.3 001F24 FF DB 0FFh ; not immediate
76.4 001F25 link SET $
76.5 001F25 04 DB 4
76.6 001F26 5741524D DB 'WARM'
76.7 001F2A EVEN
76.8 001F2A IF 'DOCOLON'='DOCODE'
76.9 001F2A WARM: DW $+2
76.10 001F2A ELSE
76.11 001F2A .... WARM: DW DOCOLON
76.12 001F2C ENDIF
76.13 001F2C ENDM
77 001F2C .... DW XISQUOTE
78 001F2E 05 DB (warm1-warm0)
79 001F2F 5761726D warm0: DB 'Warm'
80 001F33 00 EVEN
- 4e-core430G2553 - Page 144
81 001F34 .... warm1: DW ITYPE
82 001F36 .... DW ABORT
83 001F38
84 001F38 ;U .COLD -- display COLD message
85 001F38 HEADLESS DOTCOLD,DOCOLON
85.1 000000 PUBLIC DOTCOLD
85.2 001F38 IF 'DOCOLON'='DOCODE'
85.3 001F38 DOTCOLD: DW $+2
85.4 001F38 ELSE
85.5 001F38 .... DOTCOLD: DW DOCOLON
85.6 001F3A ENDIF
85.7 001F3A ENDM
86 001F3A .... DW XISQUOTE
87 001F3C 05 DB (dotcold1-dotcold0)
88 001F3D 436F6C64 dotcold0:DB 'Cold'
89 001F41 00 EVEN
90 001F42 .... dotcold1:DW ITYPE
91 001F44 .... DW EXIT
92 001F46
93 001F46 PUBLIC DOTCOLD
94 001F46
95 001F46 ;Z COLD -- set user area to latest
application
96 001F46 HEADER COLD,4,'COLD',DOCOLON
96.1 000000 PUBLIC COLD
96.2 001F46 .... DW link
96.3 001F48 FF DB 0FFh ; not immediate
96.4 001F49 link SET $
96.5 001F49 04 DB 4
96.6 001F4A 434F4C44 DB 'COLD'
96.7 001F4E EVEN
96.8 001F4E IF 'DOCOLON'='DOCODE'
96.9 001F4E COLD: DW $+2
96.10 001F4E ELSE
96.11 001F4E .... COLD: DW DOCOLON
96.12 001F50 ENDIF
96.13 001F50 ENDM
97 001F50 ............* DW APPU0,U0,NINIT,ITOD ; use application
user area
98 001F58 ............* DW INFOC,VARBOT,lit,0x20,ITOD ; use
applicatio
n variable
area
99 001F62 ............ DW APP,FETCH,EXECUTE ; AUTOSTART
Application
100 001F68 .... DW ABORT
101 001F6A
102 000000 PUBLIC COLDIP ; used to init IP register while
testing.
103 001F6A COLDIP equ COLD+2
104 001F6A
105 001F6A ;Z FACTORY -- set user area to plain
kernel
106 001F6A ; UINIT U0 #INIT I->D SAVE init user
area
107 001F6A ; ABORT ;
108 001F6A HEADER FACTORY,7,'FACTORY',DOCOLON
108.1 000000 PUBLIC FACTORY
108.2 001F6A .... DW link
108.3 001F6C FF DB 0FFh ; not immediate
108.4 001F6D link SET $
108.5 001F6D 07 DB 7
108.6 001F6E 464143544F52* DB 'FACTORY'
108.7 001F75 00 EVEN
108.8 001F76 IF 'DOCOLON'='DOCODE'
108.9 001F76 FACTORY: DW $+2
108.10 001F76 ELSE
108.11 001F76 .... FACTORY: DW DOCOLON
108.12 001F78 ENDIF
108.13 001F78 ENDM
109 001F78 ............* DW UINIT,U0,NINIT,ITOD ; store kernel
user area
table to user
area
110 001F80 ............* DW VARBOT,lit,(VAR_SIZE)*2,ZERO,FILL ;
set variables to ZERO
111 001F8A .... DW SAVE
112 001F8C .... DW DOTVER
- 4e-core430G2553 - Page 145
113 001F8E .... DW EXIT
114 001F90
115 000000 PUBLIC FACTORYIP ; used to init IP register.
116 001F90 FACTORYIP equ FACTORY+2
117 001F90
118 001F90
119 001F90 ;U PROFUSE -- adr address of production
fuse.
120 001F90 ; constant PROFUSEADR
121 001F90 HEADER PROFUSEADR,7,'PROFUSE',DOCON
121.1 000000 PUBLIC PROFUSEADR
121.2 001F90 .... DW link
121.3 001F92 FF DB 0FFh ; not immediate
121.4 001F93 link SET $
121.5 001F93 07 DB 7
121.6 001F94 50524F465553* DB 'PROFUSE'
121.7 001F9B 00 EVEN
121.8 001F9C IF 'DOCON'='DOCODE'
121.9 001F9C PROFUSEADR: DW $+2
121.10 001F9C ELSE
121.11 001F9C .... PROFUSEADR: DW DOCON
121.12 001F9E ENDIF
121.13 001F9E ENDM
122 001F9E .... DW PROFUSE
123 001FA0
124 001FA0 ;U 4E4THPRO -- save app and blow
production fuse.
125 001FA0 ; SAVE ZERO PROFUSEADR VEC! ;
126 001FA0 HEADER FORTHPRO,8,'4E4THPRO',DOCOLON
126.1 000000 PUBLIC FORTHPRO
126.2 001FA0 .... DW link
126.3 001FA2 FF DB 0FFh ; not immediate
126.4 001FA3 link SET $
126.5 001FA3 08 DB 8
126.6 001FA4 344534544850* DB '4E4THPRO'
126.7 001FAC EVEN
126.8 001FAC IF 'DOCOLON'='DOCODE'
126.9 001FAC FORTHPRO: DW $+2
126.10 001FAC ELSE
126.11 001FAC .... FORTHPRO: DW DOCOLON
126.12 001FAE ENDIF
126.13 001FAE ENDM
127 001FAE ............* DW SAVE,ZERO,PROFUSEADR,VECSTORE
128 001FB6 .... DW EXIT
129 001FB8
130 001FB8 ;U WIPE -- erase flash but not
kernel, reset user area.
131 001FB8 ; PROFUSEADR @ IF WIPE ELSE COLD TEHN ;
132 001FB8 HEADER WIPE,4,'WIPE',DOCOLON
132.1 000000 PUBLIC WIPE
132.2 001FB8 .... DW link
132.3 001FBA FF DB 0FFh ; not immediate
132.4 001FBB link SET $
132.5 001FBB 04 DB 4
132.6 001FBC 57495045 DB 'WIPE'
132.7 001FC0 EVEN
132.8 001FC0 IF 'DOCOLON'='DOCODE'
132.9 001FC0 WIPE: DW $+2
132.10 001FC0 ELSE
132.11 001FC0 .... WIPE: DW DOCOLON
132.12 001FC2 ENDIF
132.13 001FC2 ENDM
133 001FC2 ............ DW PROFUSEADR,FETCH,qbran
134 001FC8 DEST wipe1
134.1 001FC8 0400 DW wipe1-$
134.2 001FCA ENDM
135 001FCA .... DW PARENWIPE
136 001FCC .... wipe1: DW COLD
137 001FCE
138 001FCE ;U (WIPE) -- erase flash but not kernel,
reset user area.
139 001FCE ; MEMBOT USERMEM FLERASE
140 001FCE ; FACTORY ." Wiped" ABORT ;
141 001FCE HEADER PARENWIPE,6,'(WIPE)',DOCOLON
141.1 000000 PUBLIC PARENWIPE
141.2 001FCE .... DW link
141.3 001FD0 FF DB 0FFh ; not immediate
141.4 001FD1 link SET $
- 4e-core430G2553 - Page 146
141.5 001FD1 06 DB 6
141.6 001FD2 285749504529 DB '(WIPE)'
141.7 001FD8 EVEN
141.8 001FD8 IF 'DOCOLON'='DOCODE'
141.9 001FD8 PARENWIPE: DW $+2
141.10 001FD8 ELSE
141.11 001FD8 .... PARENWIPE: DW DOCOLON
141.12 001FDA ENDIF
141.13 001FDA ENDM
142 001FDA ........0018* DW MEMBOT,lit,USERFLASHEND-USERFLASHSTAR
T+1,FLERASE
143 001FE2 .... DW FACTORY
144 001FE4 .... DW XISQUOTE
145 001FE6 07 DB (wipmsg1-wipmsg0)
146 001FE7 205769706564 wipmsg0:DB ' Wiped'
147 001FED 00 EVEN
148 001FEE .... wipmsg1:DW ITYPE
149 001FF0 .... DW ABORT ; ABORT never returns
150 001FF2
988 001FF2 #include "4e-vecarea.s43"
1 001FF2 ; write vector area ============================
=======================
2 001FF2
3 000000 EXTERN resetvec,reset
4 001FF2
5 001FF2 ; write vector area - or any flash location. !!
dangerous!!
6 001FF2 ;Z VEC! x adr -- store x to top most
segment
7 001FF2 HEADER VECSTORE,4,'VEC!',DOCODE
7.1 000000 PUBLIC VECSTORE
7.2 001FF2 .... DW link
7.3 001FF4 FF DB 0FFh ; not immediate
7.4 001FF5 link SET $
7.5 001FF5 04 DB 4
7.6 001FF6 56454321 DB 'VEC!'
7.7 001FFA EVEN
7.8 001FFA IF 'DOCODE'='DOCODE'
7.9 001FFA .... VECSTORE: DW $+2
7.10 001FFC ELSE
7.11 001FFC VECSTORE: DW DOCODE
7.12 001FFC ENDIF
7.13 001FFC ENDM
8 001FFC 3644 MOV @PSP+,W ; get data to
write
9 001FFE 17B3 BIT #1,TOS
10 002000 1320 JNZ IST_X2 ; if not even
address, do not
write
11 002002 2697 CMP @TOS,W
12 002004 1124 JZ IST_X2 ; if memory is
desired value,
do not
write
13 002006 0212 PUSH sr
14 002008 32C2 DINT ; Disable
interrupts
15 00200A B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
16 002010 B24040A52801 MOV #FWKEY+WRT,&FCTL1 ; Enable
write
17 002016 87460000 MOV W,0(TOS) ; Write word to
flash
location
18 00201A B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
WRT.
19 002020 B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Set LOCK
20 002026 ; EINT ; Enable
interrupts
21 002026 3241 POP sr
22 002028 3744 IST_X2: MOV @PSP+,TOS ; pop new
TOS
23 00202A NEXT
23.1 00202A 3645 MOV @IP+,W // ; fetch word address
into W
23.2 00202C 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
23.3 00202E ENDM
- 4e-core430G2553 - Page 147
24 00202E
25 00202E ;U (VECWIPE) -- erase top segment in
flash
26 00202E HEADER PARENVECWIPE,9,'(VECWIPE)',DOCODE
26.1 000000 PUBLIC PARENVECWIPE
26.2 00202E .... DW link
26.3 002030 FF DB 0FFh ; not immediate
26.4 002031 link SET $
26.5 002031 09 DB 9
26.6 002032 285645435749* DB '(VECWIPE)'
26.7 00203B 00 EVEN
26.8 00203C IF 'DOCODE'='DOCODE'
26.9 00203C .... PARENVECWIPE: DW $+2
26.10 00203E ELSE
26.11 00203E PARENVECWIPE: DW DOCODE
26.12 00203E ENDIF
26.13 00203E ENDM
27 00203E ; DW lit,intseg,lit,1,FLERASE ;geht so
nicht, ist geschützt
28 00203E ; DW EXIT
29 00203E 3640.... MOV #intseg,W
30 002042 0212 PUSH sr
31 002044 32C2 DINT ; Disable
interrupts
32 002046 B24000A52C01 MOV #FWKEY,&FCTL3 ; Clear
LOCK
33 00204C B24002A52801 MOV #FWKEY+ERASE,&FCTL1 ; Enable segment
erase
34 002052 B6430000 MOV #-1,0(W) ; Dummy write in
segment to
erase
35 002056 B24000A52801 MOV #FWKEY,&FCTL1 ; Done. Clear
erase
command.
36 00205C B24010A52C01 MOV #FWKEY+LOCK,&FCTL3 ; Done, set
LOCK
37 002062 32D2 EINT ; Enable
interrupts
38 002064 3241 POP sr
39 002066 NEXT
39.1 002066 3645 MOV @IP+,W // ; fetch word address
into W
39.2 002068 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
39.3 00206A ENDM
40 00206A
41 00206A
42 00206A ;U VECWIPE -- erase ISR flash, set reset
vector = reset to boot 4e4th.
43 00206A ; (VECWIPE) resetvector RESETADR VEC!
;
44 00206A HEADER VECWIPE,7,'VECWIPE',DOCOLON
44.1 000000 PUBLIC VECWIPE
44.2 00206A .... DW link
44.3 00206C FF DB 0FFh ; not immediate
44.4 00206D link SET $
44.5 00206D 07 DB 7
44.6 00206E 564543574950* DB 'VECWIPE'
44.7 002075 00 EVEN
44.8 002076 IF 'DOCOLON'='DOCODE'
44.9 002076 VECWIPE: DW $+2
44.10 002076 ELSE
44.11 002076 .... VECWIPE: DW DOCOLON
44.12 002078 ENDIF
44.13 002078 ENDM
45 002078 .... DW PARENVECWIPE
46 00207A ............* DW lit,reset,RESETADR,VECSTORE
47 002082 .... DW EXIT
48 002084
49 002084 ;U VECSAVE -- save all vectors to infoD
mk
50 002084 ; InfoD $40 FLERASE vecbot infoD $20 D->I
;
51 002084 HEADER VECSAVE,7,'VECSAVE',DOCOLON
51.1 000000 PUBLIC VECSAVE
51.2 002084 .... DW link
51.3 002086 FF DB 0FFh ; not immediate
51.4 002087 link SET $
- 4e-core430G2553 - Page 148
51.5 002087 07 DB 7
51.6 002088 564543534156* DB 'VECSAVE'
51.7 00208F 00 EVEN
51.8 002090 IF 'DOCOLON'='DOCODE'
51.9 002090 VECSAVE: DW $+2
51.10 002090 ELSE
51.11 002090 .... VECSAVE: DW DOCOLON
51.12 002092 ENDIF
51.13 002092 ENDM
52 002092 ........4000* DW INFOD,lit,0x40,FLERASE
53 00209A ............* DW VECBOT,INFOD,lit,0x20,DTOI
54 0020A4 .... DW EXIT
55 0020A6
56 0020A6 ;U VECRESTORE -- unconditional restore all
saved vectors.
57 0020A6 ; vecwipe infoD vecbot $32 D->I ;
58 0020A6 HEADER VECRESTORE,10,'VECRESTORE',DOCOLON
58.1 000000 PUBLIC VECRESTORE
58.2 0020A6 .... DW link
58.3 0020A8 FF DB 0FFh ; not immediate
58.4 0020A9 link SET $
58.5 0020A9 0A DB 10
58.6 0020AA 564543524553* DB 'VECRESTORE'
58.7 0020B4 EVEN
58.8 0020B4 IF 'DOCOLON'='DOCODE'
58.9 0020B4 VECRESTORE: DW $+2
58.10 0020B4 ELSE
58.11 0020B4 .... VECRESTORE: DW DOCOLON
58.12 0020B6 ENDIF
58.13 0020B6 ENDM
59 0020B6 .... DW VECWIPE
60 0020B8 ............* DW INFOD,VECBOT,lit,0x1E,DTOI ; dont
touch reset vector.
61 0020C2 .... DW EXIT
62 0020C4
63 0020C4 /*
64 0020C4 ;U VECBACK -- write back of vectors:
dont overwrite newer ones.
65 0020C4 ; $20 0 DO infoD i + @ vecbot i + @ $FFFF
=
66 0020C4 ; IF vecbot i + vec! ELSE drop THEN 2 +LOOP
;
67 0020C4 HEADER VECBACK,7,'VECBACK',DOCOLON
68 0020C4 DW lit,0x20,ZERO,xdo
69 0020C4 vback1: DW INFOD,II,PLUS,FETCH
70 0020C4 DW VECBOT,II,PLUS,FETCH,lit,0xFFFF,EQUAL
71 0020C4 DW qbran
72 0020C4 DEST vback2
73 0020C4 DW VECBOT,II,PLUS,VECSTORE
74 0020C4 DW bran
75 0020C4 DEST vback3
76 0020C4 vback2: DW DROP
77 0020C4 vback3: DW lit,2,xplusloop
78 0020C4 DEST vback1
79 0020C4 DW EXIT
80 0020C4 */
81 0020C4
82 0020C4 ;U VECBACK -- write back of vectors:
dont overwrite newer ones.
83 0020C4 ; $20 0 DO vecbot i + @ FFFF =
84 0020C4 ; IF infoD i + @ vecbot i + vec! THEN 2
+LOOP ;
85 0020C4 HEADER VECBACK,7,'VECBACK',DOCOLON
85.1 000000 PUBLIC VECBACK
85.2 0020C4 .... DW link
85.3 0020C6 FF DB 0FFh ; not immediate
85.4 0020C7 link SET $
85.5 0020C7 07 DB 7
85.6 0020C8 564543424143* DB 'VECBACK'
85.7 0020CF 00 EVEN
85.8 0020D0 IF 'DOCOLON'='DOCODE'
85.9 0020D0 VECBACK: DW $+2
85.10 0020D0 ELSE
85.11 0020D0 .... VECBACK: DW DOCOLON
85.12 0020D2 ENDIF
85.13 0020D2 ENDM
86 0020D2 ....2000....* DW lit,0x20,ZERO,xdo
87 0020DA ............*vback1: DW VECBOT,II,PLUS,FETCH,lit,0xFFFF,EQUAL
- 4e-core430G2553 - Page 149
88 0020E8 .... DW qbran
89 0020EA DEST vback2
89.1 0020EA 1200 DW vback2-$
89.2 0020EC ENDM
90 0020EC ............* DW INFOD,II,PLUS,FETCH
91 0020F4 ............* DW VECBOT,II,PLUS,VECSTORE
92 0020FC ....0200.... vback2: DW lit,2,xplusloop
93 002102 DEST vback1
93.1 002102 D8FF DW vback1-$
93.2 002104 ENDM
94 002104 .... DW EXIT
95 002106
96 002106 ;U INTERRUPT isr iv -- store ISR address
to interrupt vector address
97 002106 /* Store address of interrupt service routine to
interrupt vector address,
98 002106 keep all other vectors. ´This is a slow flash
operation.
99 002106 Saves all vectors to infoD, wipes vectors to
FFFF,
100 002106 writes iv and then writes back the other vector
values. */
101 002106 ; vecsave vecwipe vec! vecback ;
102 002106 HEADER INTERRUPT,9,'INTERRUPT',DOCOLON
102.1 000000 PUBLIC INTERRUPT
102.2 002106 .... DW link
102.3 002108 FF DB 0FFh ; not immediate
102.4 002109 link SET $
102.5 002109 09 DB 9
102.6 00210A 494E54455252* DB 'INTERRUPT'
102.7 002113 00 EVEN
102.8 002114 IF 'DOCOLON'='DOCODE'
102.9 002114 INTERRUPT: DW $+2
102.10 002114 ELSE
102.11 002114 .... INTERRUPT: DW DOCOLON
102.12 002116 ENDIF
102.13 002116 ENDM
103 002116 ............* DW VECSAVE,VECWIPE,VECSTORE,VECBACK
104 00211E .... DW EXIT
105 002120
106 002120
107 002120 ; finis
989 002120 #include "4e-LaunchPad.s43"
1 002120 ; ----------------------------------------------
------------------------
2 002120 ; 4e4th is a Forth based on CamelForth
3 002120 ; for the Texas Instruments MSP430
4 002120 ;
5 002120 ; This program is free software; you can
redistribute it and/or modify
6 002120 ; it under the terms of the GNU General Public
License as published by
7 002120 ; the Free Software Foundation; either version 3
of the License, or
8 002120 ; (at your option) any later version.
9 002120 ;
10 002120 ; This program is distributed in the hope that
it will be useful,
11 002120 ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
12 002120 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
13 002120 ; GNU General Public License for more details.
14 002120 ;
15 002120 ; You should have received a copy of the GNU
General Public License
16 002120 ; along with this program. If not, see
.
17 002120 ;
18 002120 ; See LICENSE TERMS in Brads file readme.txt as
well.
19 002120
20 002120 ; ----------------------------------------------
------------------------
21 002120 ; 4e-LaunchPad.s43 - LaunchPad Suporting Words -
MSP430G2553
22 002120 ; ----------------------------------------------
- 4e-core430G2553 - Page 150
------------------------
23 002120
24 002120
25 002120 ;U PORTS ---------------------------------------
------------------------
26 002120
27 002120 ; TI document SLAU144I - December 2004 - Revised
January 2012
28 002120 ; The digital I/O registers are listed in Table
8-2.
29 002120
30 002120 ;U \ P1in = $20
31 002120 ;U \ P1out = $21
32 002120 ;U \ P1dir = $22
33 002120
34 002120 ;U \ P2in = $28
35 002120 ;U \ P2out = $29
36 002120 ;U \ P2dir = $2A
37 002120
38 002120 ;U \ LED - portpinX->---resistor---LED---GND
39 002120 ;U \ P1.0 - red LED
40 002120 ;U \ P1.6 - green LED
41 002120
42 002120 ;U RED -- mask port red LED mask
and port address
43 002120 HEADER red,3,'RED',DOTWOCON
43.1 000000 PUBLIC red
43.2 002120 .... DW link
43.3 002122 FF DB 0FFh ; not immediate
43.4 002123 link SET $
43.5 002123 03 DB 3
43.6 002124 524544 DB 'RED'
43.7 002127 00 EVEN
43.8 002128 IF 'DOTWOCON'='DOCODE'
43.9 002128 red: DW $+2
43.10 002128 ELSE
43.11 002128 .... red: DW DOTWOCON
43.12 00212A ENDIF
43.13 00212A ENDM
44 00212A 2100 DW P1OUT
45 00212C 0100 DW 00000001b
46 00212E
47 00212E ;U GREEN -- mask port green LED mask
and port address
48 00212E HEADER green,5,'GREEN',DOTWOCON
48.1 000000 PUBLIC green
48.2 00212E .... DW link
48.3 002130 FF DB 0FFh ; not immediate
48.4 002131 link SET $
48.5 002131 05 DB 5
48.6 002132 475245454E DB 'GREEN'
48.7 002137 00 EVEN
48.8 002138 IF 'DOTWOCON'='DOCODE'
48.9 002138 green: DW $+2
48.10 002138 ELSE
48.11 002138 .... green: DW DOTWOCON
48.12 00213A ENDIF
48.13 00213A ENDM
49 00213A 2100 DW P1OUT
50 00213C 4000 DW 01000000b
51 00213E
52 00213E ;U \ Switch S2
53 00213E ;U portpin P1.3 --->0_0----GND
54 00213E ;U S2 -- mask port second button
mask and port address
55 00213E HEADER S2,2,'S2',DOTWOCON
55.1 000000 PUBLIC S2
55.2 00213E .... DW link
55.3 002140 FF DB 0FFh ; not immediate
55.4 002141 link SET $
55.5 002141 02 DB 2
55.6 002142 5332 DB 'S2'
55.7 002144 EVEN
55.8 002144 IF 'DOTWOCON'='DOCODE'
55.9 002144 S2: DW $+2
55.10 002144 ELSE
55.11 002144 .... S2: DW DOTWOCON
55.12 002146 ENDIF
- 4e-core430G2553 - Page 151
55.13 002146 ENDM
56 002146 2000 DW P1IN
57 002148 0800 DW 00001000b
58 00214A
59 00214A ;U S2? -- f test button S2, true is
pressed
60 00214A HEADER SQEST,3,'S2?',DOCOLON
60.1 000000 PUBLIC SQEST
60.2 00214A .... DW link
60.3 00214C FF DB 0FFh ; not immediate
60.4 00214D link SET $
60.5 00214D 03 DB 3
60.6 00214E 53323F DB 'S2?'
60.7 002151 00 EVEN
60.8 002152 IF 'DOCOLON'='DOCODE'
60.9 002152 SQEST: DW $+2
60.10 002152 ELSE
60.11 002152 .... SQEST: DW DOCOLON
60.12 002154 ENDIF
60.13 002154 ENDM
61 002154 ............* DW S2, cget, ZEROEQUAL, EXIT
62 00215C
63 00215C ; ----------------------------------------------
------------------------
990 00215C #include "4e-onewire.s43"
1 00215C ;****h* 4e4th/4e-onewire
2 00215C ; NAME
3 00215C ; 4e-onewire
4 00215C ; SYNOPSIS
5 00215C ; Dallas 1-wire drivers for 4e4th/CamelForth.
6 00215C ; DESCRIPTION
7 00215C ; These are "bit-banging" 1-wire drivers for
the MSP430G2553
8 00215C ; MCU installed on a TI Launchpad board.
9 00215C ; Currently configured to use P2.3, with
MCLK=8 MHz.
10 00215C ; NOTES
11 00215C ; 4e4th configures MCLK = DCOCLK = 8 MHz (see
4e-init430G2553.s43).
12 00215C ; Launchpad I/O pin usage:
13 00215C ; P1.0 - LED1 output
14 00215C ; P1.1 - UART
15 00215C ; P1.2 - UART
16 00215C ; P1.3 - SW2 input (internal pullup
enabled)
17 00215C ; P1.4 - output (configured by 4e4th)
18 00215C ; P1.5 - output (configured by 4e4th)
19 00215C ; P2.0
20 00215C ; P2.1
21 00215C ; P2.2
22 00215C ; P2.3 - 1-wire I/O
23 00215C ; P2.4
24 00215C ; P2.5
25 00215C ; P1.6 - LED2 output
26 00215C ; P1.7
27 00215C ; MSP430G2553 pins are capable of sourcing or
sinking 6 mA.
28 00215C ; Internal pullup resistor is 20-50 Kohm, typ.
35 Kohm, which
29 00215C ; is too high, so an external pullup resistor
is required.
30 00215C ; Dallas DS18B20 data sheet suggests 4.7 Kohm
pullup resistor.
31 00215C ; Dallas App Note 132 suggests 1.1 Kohm pullup
resistor.
32 00215C ; Either external pullup is within limits for
drive current.
33 00215C ;
34 00215C ; Note that the MSP430 does not have
open-drain outputs.
35 00215C ; To simulate open-drain, a "0" is written to
the pin's output
36 00215C ; register. When a "1" is written to the
pin's direction register,
37 00215C ; the output is enabled and "0" is output.
When a "0" is written
38 00215C ; to the direction register, the input is
enabled and the pin is
- 4e-core430G2553 - Page 152
39 00215C ; Hi-Z (equivalent to an open-drain "1"
output).
40 00215C ; HISTORY
41 00215C ; 23 nov 12 bjr - Changed to use P2.3 for
1-wire I/O.
42 00215C ; 19 nov 12 bjr - Refactored code to make
OWSLOT primitive instead
43 00215C ; of OWTOUCH.
44 00215C ; 23 oct 12 bjr - Created.
45 00215C ; AUTHOR
46 00215C ; B. J. Rodriguez
47 00215C ; COPYRIGHT
48 00215C ; (c) 2012 Bradford J. Rodriguez.
49 00215C ;
50 00215C ; This program is free software; you can
redistribute it and/or modify
51 00215C ; it under the terms of the GNU General Public
License as published by
52 00215C ; the Free Software Foundation; either version
3 of the License, or
53 00215C ; (at your option) any later version.
54 00215C ;
55 00215C ; This program is distributed in the hope that
it will be useful,
56 00215C ; but WITHOUT ANY WARRANTY; without even the
implied warranty of
57 00215C ; MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the
58 00215C ; GNU General Public License for more
details.
59 00215C ;
60 00215C ; You should have received a copy of the GNU
General Public License
61 00215C ; along with this program. If not, see
.
62 00215C ;
63 00215C ; Commercial inquiries should be directed to
the author at
64 00215C ; 115 First St., #105, Collingwood, Ontario
L9Y 4W3 Canada
65 00215C ; or via email to bj@camelforth.com
66 00215C ;******
67 00215C
68 00215C ; define port registers and pin to be used for
1-wire (P2.3)
69 00215C #define OWIN P2IN
70 00215C #define OWOUT P2OUT
71 00215C #define OWDIR P2DIR
72 00215C #define OWREN P2REN
73 00215C #define OWBIT BIT3
74 00215C
75 00215C ; define MCLK frequency in MHz.
76 000008 MCLK EQU 8
77 00215C
78 00215C ; Define a software delay of N usec for our MCLK
freq (8 MHz)
79 00215C ; Uses scratch register X.
80 00215C ; Note that due to truncation, may delay as many
as 2 MCLK cycles
81 00215C ; short of the specified period. For 1-wire
code this is ok,
82 00215C ; since we always have other instructions using
at least 2 cycles.
83 00215C
90 00215C
91 00215C
92 00215C ;****f* 4e-onewire/OWRESET
93 00215C ; NAME
94 00215C ; OWRESET
95 00215C ; SYNOPSIS
96 00215C ; OWRESET ( -- f ) Initialize 1-wire devices;
return true if present
97 00215C ; DESCRIPTION
98 00215C ; This configures the port pin used by the
1-wire interface, and then
99 00215C ; sends an "initialize" sequence to the 1-wire
devices. If any device
100 00215C ; is present, it will be detected.
- 4e-core430G2553 - Page 153
101 00215C ;
102 00215C ; Timing, per DS18B20 data sheet:
103 00215C ; a) Output "0" (drive output low) for >480
usec.
104 00215C ; b) Output "1" (let output float).
105 00215C ; c) After 15 to 60 usec, device will drive
pin low for 60 to 240 usec.
106 00215C ; So, wait 75 usec and sample input.
107 00215C ; d) Leave output high (floating) for at least
480 usec.
108 00215C ;******
109 00215C
110 00215C HEADER OWRESET,7,'OWRESET',DOCODE
110.1 000000 PUBLIC OWRESET
110.2 00215C .... DW link
110.3 00215E FF DB 0FFh ; not immediate
110.4 00215F link SET $
110.5 00215F 07 DB 7
110.6 002160 4F5752455345* DB 'OWRESET'
110.7 002167 00 EVEN
110.8 002168 IF 'DOCODE'='DOCODE'
110.9 002168 .... OWRESET: DW $+2
110.10 00216A ELSE
110.11 00216A OWRESET: DW DOCODE
110.12 00216A ENDIF
110.13 00216A ENDM
111 00216A
112 00216A ; push old TOS onto stack
113 00216A 2483 SUB #2,PSP ; 1
114 00216C 84470000 MOV TOS,0(PSP) ; 4
115 002170
116 002170 ; preclear result in TOS
117 002170 0743 MOV #0,TOS
118 002172
119 002172 ; initialize the pin used for the
1-wire.
120 002172 F0C2.... BIC.B #OWBIT,OWDIR ; make pin an
input
121 002176 F0C2.... BIC.B #OWBIT,OWOUT ; make output
bit a
"0"
122 00217A F0C2.... BIC.B #OWBIT,OWREN ; disable
internal
pullup
123 00217E
124 00217E ; Delay >480 usec in case output pin had
been low
125 00217E DELAY 500
125.1 00217E LOCAL loop
125.2 00217E 3A403405 MOV #(((500*MCLK)-2)/3),X ;
2
125.3 002182 1A83 loop: SUB #1,X ; 1n
125.4 002184 FE23 JNZ loop ; 2n
125.5 002186 ENDM
126 002186
127 002186 ; Pull output low
128 002186 F0D2.... BIS.B #OWBIT,OWDIR ; make pin
output, sends
"0"
129 00218A
130 00218A ; Delay >480 usec
131 00218A DELAY 500
131.1 00218A LOCAL loop
131.2 00218A 3A403405 MOV #(((500*MCLK)-2)/3),X ;
2
131.3 00218E 1A83 loop: SUB #1,X ; 1n
131.4 002190 FE23 JNZ loop ; 2n
131.5 002192 ENDM
132 002192
133 002192 ; Critical timing period, disable
interrupts.
134 002192 32C2 BIC #8,SR ; clear GIE
bit
135 002194
- 4e-core430G2553 - Page 154
136 002194 ; Pull output high
137 002194 F0C2.... BIC.B #OWBIT,OWDIR ; make pin
input, sends
"1"
138 002198
139 002198 ; Delay 75 usec
140 002198 DELAY 75
140.1 002198 LOCAL loop
140.2 002198 3A40C700 MOV #(((75*MCLK)-2)/3),X ;
2
140.3 00219C 1A83 loop: SUB #1,X ; 1n
140.4 00219E FE23 JNZ loop ; 2n
140.5 0021A0 ENDM
141 0021A0
142 0021A0 ; Sample input pin, set TOS if input is
zero
143 0021A0 F0B2.... BIT.B #OWBIT,OWIN
144 0021A4 0120 JNZ OWNONE
145 0021A6 3743 MOV #-1,TOS ; if input zero,
an 1-wire is
present
146 0021A8 OWNONE:
147 0021A8 ; End critical timing period, enable
interrupts
148 0021A8 32D2 BIS #8,SR ; set GIE
bit
149 0021AA
150 0021AA ; Delay rest of 480 usec (we've already
delayed 75 usec)
151 0021AA DELAY 405
151.1 0021AA LOCAL loop
151.2 0021AA 3A403704 MOV #(((405*MCLK)-2)/3),X ;
2
151.3 0021AE 1A83 loop: SUB #1,X ; 1n
151.4 0021B0 FE23 JNZ loop ; 2n
151.5 0021B2 ENDM
152 0021B2
153 0021B2 ; we now have the result flag in TOS
154 0021B2 NEXT
154.1 0021B2 3645 MOV @IP+,W // ; fetch word address
into W
154.2 0021B4 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
154.3 0021B6 ENDM
155 0021B6
156 0021B6 ;****f* 4e-onewire/OWSLOT
157 0021B6 ; NAME
158 0021B6 ; OWSLOT
159 0021B6 ; SYNOPSIS
160 0021B6 ; OWSLOT ( c -- c' ) Write and read one bit
to/from 1-wire.
161 0021B6 ; DESCRIPTION
162 0021B6 ; The "touch byte" function is described in
Dallas App Note 74.
163 0021B6 ; It outputs a byte to the 1-wire pin, LSB
first, and reads back
164 0021B6 ; the state of the 1-wire pin after a suitable
delay.
165 0021B6 ; To read a byte, output $FF and read the
reply data.
166 0021B6 ; To write a byte, output that byte and
discard the reply.
167 0021B6 ;
168 0021B6 ; This function performs one bit of the
"touch" operation --
169 0021B6 ; one read/write "slot" in Dallas jargon.
Perform this eight
170 0021B6 ; times in a row to get the "touch byte"
function.
171 0021B6 ;
172 0021B6 ; PARAMETERS
173 0021B6 ; The input parameter is xxxxxxxxbbbbbbbo
where
- 4e-core430G2553 - Page 155
174 0021B6 ; 'xxxxxxxx' are don't cares,
175 0021B6 ; 'bbbbbbb' are bits to be shifted down,
and
176 0021B6 ; 'o' is the bit to be output in the slot.
This must be 1
177 0021B6 ; to create a read slot.
178 0021B6 ;
179 0021B6 ; The returned value is xxxxxxxxibbbbbbb
where
180 0021B6 ; 'xxxxxxxx' are not known (the input shifted
down 1 position),
181 0021B6 ; 'i' is the bit read during the slot. This
has no meaning
182 0021B6 ; if it was a write slot.
183 0021B6 ; 'bbbbbbb' are the 7 input bits, shifted down
one position.
184 0021B6 ;
185 0021B6 ; This peculiar parameter usage allows OWTOUCH
to be written as
186 0021B6 ; OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT OWSLOT
OWSLOT OWSLOT
187 0021B6 ;
188 0021B6 ; NOTES
189 0021B6 ; Interrupts are disabled during each
bit.
190 0021B6
191 0021B6 ; Timing, per DS18B20 data sheet:
192 0021B6 ; a) Output "0" for start period. (> 1 us, <
15 us, typ. 6 us*)
193 0021B6 ; b) Output data bit (0 or 1), open drain
194 0021B6 ; c) After MS from start of cycle, sample
input (15 to 60 us, typ. 25 us*)
195 0021B6 ; d) After write-0 period from start of cycle,
output "1" (>60 us)
196 0021B6 ; e) After recovery period, loop or return. (>
1 us)
197 0021B6 ; For writes, DS18B20 samples input 15 to 60
usec from start of cycle.
198 0021B6 ; * "Typical" values are per App Note 132 for
a 300m cable length.
199 0021B6
200 0021B6 ; --------- ---------------------------
----
201 0021B6 ; \ /
/
202 0021B6 ; -------------------------------
203 0021B6 ; a b c d
e
204 0021B6 ; | 6us | 19us | 35us |
2us |
205 0021B6 ;******
206 0021B6
207 0021B6 HEADER OWSLOT,6,'OWSLOT',DOCODE
207.1 000000 PUBLIC OWSLOT
207.2 0021B6 .... DW link
207.3 0021B8 FF DB 0FFh ; not immediate
207.4 0021B9 link SET $
207.5 0021B9 06 DB 6
207.6 0021BA 4F57534C4F54 DB 'OWSLOT'
207.7 0021C0 EVEN
207.8 0021C0 IF 'DOCODE'='DOCODE'
207.9 0021C0 .... OWSLOT: DW $+2
207.10 0021C2 ELSE
207.11 0021C2 OWSLOT: DW DOCODE
207.12 0021C2 ENDIF
207.13 0021C2 ENDM
208 0021C2
209 0021C2 37C00001 BIC #0x100,TOS ; preclear
result bit in
TOS
210 0021C6
211 0021C6 ; disable interrupts
212 0021C6 32C2 BIC #8,SR ; clear GIE
bit
213 0021C8
214 0021C8 ; output a "0"
- 4e-core430G2553 - Page 156
215 0021C8 F0D2.... BIS.B #OWBIT,OWDIR ; make pin
output, sends
"0"
216 0021CC F0C2.... BIC.B #OWBIT,OWOUT ; just in case,
ensure 0 is
output
217 0021D0
218 0021D0 ; delay 6 usec
219 0021D0 DELAY 6
219.1 0021D0 LOCAL loop
219.2 0021D0 3A400F00 MOV #(((6*MCLK)-2)/3),X ;
2
219.3 0021D4 1A83 loop: SUB #1,X ; 1n
219.4 0021D6 FE23 JNZ loop ; 2n
219.5 0021D8 ENDM
220 0021D8
221 0021D8 ; output the LSB (no action required if
LSB=0)
222 0021D8 17B3 BIT #1,TOS
223 0021DA 0224 JZ OWSEND0
224 0021DC F0C2.... BIC.B #OWBIT,OWDIR ; make pin
input, sends
"1"
225 0021E0 OWSEND0:
226 0021E0
227 0021E0 ; delay 19 usec
228 0021E0 DELAY 19
228.1 0021E0 LOCAL loop
228.2 0021E0 3A403200 MOV #(((19*MCLK)-2)/3),X ;
2
228.3 0021E4 1A83 loop: SUB #1,X ; 1n
228.4 0021E6 FE23 JNZ loop ; 2n
228.5 0021E8 ENDM
229 0021E8
230 0021E8 ; sample the input (no action required
if zero)
231 0021E8 F0B2.... BIT.B #OWBIT,OWIN
232 0021EC 0224 JZ OWRECV0
233 0021EE 37D00001 BIS #0x100,TOS ; if input=1,
store 1 in high
TOS
234 0021F2 0711 OWRECV0: RRA TOS ; shift TOS down
1 bit
235 0021F4
236 0021F4 ; delay 35 usec
237 0021F4 DELAY 35
237.1 0021F4 LOCAL loop
237.2 0021F4 3A405C00 MOV #(((35*MCLK)-2)/3),X ;
2
237.3 0021F8 1A83 loop: SUB #1,X ; 1n
237.4 0021FA FE23 JNZ loop ; 2n
237.5 0021FC ENDM
238 0021FC
239 0021FC ; output a "1"
240 0021FC F0C2.... BIC.B #OWBIT,OWDIR ; make pin input
= Hi-Z
241 002200
242 002200 ; enable interrupts
243 002200 32D2 BIS #8,SR ; set GIE
bit
244 002202
245 002202 ; delay 2 usec
246 002202 DELAY 2
246.1 002202 LOCAL loop
246.2 002202 2A42 MOV #(((2*MCLK)-2)/3),X ;
2
246.3 002204 1A83 loop: SUB #1,X ; 1n
246.4 002206 FE23 JNZ loop ; 2n
246.5 002208 ENDM
247 002208
- 4e-core430G2553 - Page 157
248 002208 ; note that NEXT will take 0.5 usec (4
clocks)
249 002208 ; we now have the received bit in the
0x80 bit of TOS.
250 002208 NEXT
250.1 002208 3645 MOV @IP+,W // ; fetch word address
into W
250.2 00220A 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
250.3 00220C ENDM
991 00220C #include "4e-LPM.s43"
1 00220C ; setup a sleep function.
2 00220C
3 00220C /***********************************************
*************
4 00220C * Interrupt Vectors (offset from 0xFFE0)
5 00220C
6 00220C #define PORT1_VECTOR (2 * 2u) 0xFFE4
Port 1
7 00220C #define PORT2_VECTOR (3 * 2u) 0xFFE6
Port 2
8 00220C #define ADC10_VECTOR (5 * 2u) 0xFFEA
ADC10
9 00220C #define USCIAB0TX_VECTOR (6 * 2u) 0xFFEC
USCI A0/B0 Transmit
10 00220C #define USCIAB0RX_VECTOR (7 * 2u) 0xFFEE
USCI A0/B0 Receive
11 00220C #define TIMER0_A1_VECTOR (8 * 2u) 0xFFF0
Timer0)A CC1, TA0
12 00220C #define TIMER0_A0_VECTOR (9 * 2u) 0xFFF2
Timer0_A CC0
13 00220C #define WDT_VECTOR (10 * 2u) 0xFFF4
Watchdog Timer
14 00220C #define COMPARATORA_VECTOR (11 * 2u) 0xFFF6
Comparator A
15 00220C #define TIMER1_A1_VECTOR (12 * 2u) 0xFFF8
Timer1_A CC1-4, TA1
16 00220C #define TIMER1_A0_VECTOR (13 * 2u) 0xFFFA
Timer1_A CC0
17 00220C #define NMI_VECTOR (14 * 2u) 0xFFFC
Non-maskable
18 00220C #define RESET_VECTOR (15 * 2u) 0xFFFE
Reset [Highest Priority]
19 00220C
20 00220C services:
21 00220C - UCA0 interupt enable.
22 00220C - Activate LPM4 mode.
23 00220C - UCA0 ISR disables lpm4 mode.
24 00220C - UCA0 interupt disable.
25 00220C
26 00220C ************************************************
***************/
27 00220C
28 00220C ;C IRXON -- turn UCA0 interrupt
on
29 00220C HEADER IRXON,5,'IRXON',DOCODE
29.1 000000 PUBLIC IRXON
29.2 00220C .... DW link
29.3 00220E FF DB 0FFh ; not immediate
29.4 00220F link SET $
29.5 00220F 05 DB 5
29.6 002210 4952584F4E DB 'IRXON'
29.7 002215 00 EVEN
29.8 002216 IF 'DOCODE'='DOCODE'
29.9 002216 .... IRXON: DW $+2
29.10 002218 ELSE
29.11 002218 IRXON: DW DOCODE
29.12 002218 ENDIF
29.13 002218 ENDM
30 002218 D0D3.... BIS.B #UCA0RXIE,IE2
31 00221C NEXT
31.1 00221C 3645 MOV @IP+,W // ; fetch word address
into W
31.2 00221E 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
31.3 002220 ENDM
32 002220
33 002220 ;C IRXOFF -- turn UCA0 interrupt
- 4e-core430G2553 - Page 158
off
34 002220 HEADER IRXOFF,6,'IRXOFF',DOCODE
34.1 000000 PUBLIC IRXOFF
34.2 002220 .... DW link
34.3 002222 FF DB 0FFh ; not immediate
34.4 002223 link SET $
34.5 002223 06 DB 6
34.6 002224 4952584F4646 DB 'IRXOFF'
34.7 00222A EVEN
34.8 00222A IF 'DOCODE'='DOCODE'
34.9 00222A .... IRXOFF: DW $+2
34.10 00222C ELSE
34.11 00222C IRXOFF: DW DOCODE
34.12 00222C ENDIF
34.13 00222C ENDM
35 00222C D0C3.... BIC.B #UCA0RXIE,IE2
36 002230 NEXT
36.1 002230 3645 MOV @IP+,W // ; fetch word address
into W
36.2 002232 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
36.3 002234 ENDM
37 002234
38 002234 ;C LPM_WAKE -- adr LPM wake up
interrupt service routine address
39 002234 ; turns off LPM mode.
40 002234 HEADER LPM_WAKE,8,'LPM_WAKE',DOCON
40.1 000000 PUBLIC LPM_WAKE
40.2 002234 .... DW link
40.3 002236 FF DB 0FFh ; not immediate
40.4 002237 link SET $
40.5 002237 08 DB 8
40.6 002238 4C504D5F5741* DB 'LPM_WAKE'
40.7 002240 EVEN
40.8 002240 IF 'DOCON'='DOCODE'
40.9 002240 LPM_WAKE: DW $+2
40.10 002240 ELSE
40.11 002240 .... LPM_WAKE: DW DOCON
40.12 002242 ENDIF
40.13 002242 ENDM
41 002242 .... DW lpm_wake
42 002244 lpm_wake:
43 002244 ; BIS.B #BIT0,&021h ; red LED
on
44 002244 B1C0F8000000 BIC #(GIE+LPM4),0(RSP) ; clear SR on
return stack -
turn CPU on.
45 00224A 0013 RETI
46 00224C
47 00224C ;Z LPM4 -- ; Enter low power mode
4, wake on interrupt.
48 00224C HEADER setlpm4,4,'LPM4',DOCODE
48.1 000000 PUBLIC setlpm4
48.2 00224C .... DW link
48.3 00224E FF DB 0FFh ; not immediate
48.4 00224F link SET $
48.5 00224F 04 DB 4
48.6 002250 4C504D34 DB 'LPM4'
48.7 002254 EVEN
48.8 002254 IF 'DOCODE'='DOCODE'
48.9 002254 .... setlpm4: DW $+2
48.10 002256 ELSE
48.11 002256 setlpm4: DW DOCODE
48.12 002256 ENDIF
48.13 002256 ENDM
49 002256 ; BIC.B #BIT0,&021h ; red LED
off
50 002256 0212 PUSH SR
51 002258 32D0F800 BIS #(GIE+LPM4),SR ; CPU stops
here
52 00225C 3241 POP SR
53 00225E ; DINT
54 00225E ; BIS.B #BIT0,&021h ; red LED
on
55 00225E NEXT
55.1 00225E 3645 MOV @IP+,W // ; fetch word address
into W
- 4e-core430G2553 - Page 159
55.2 002260 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
55.3 002262 ENDM
56 002262
57 002262 ;Z LPM0 -- ; Enter low power mode
0, wake on interrupt.
58 002262 HEADER setlpm0,4,'LPM0',DOCODE
58.1 000000 PUBLIC setlpm0
58.2 002262 .... DW link
58.3 002264 FF DB 0FFh ; not immediate
58.4 002265 link SET $
58.5 002265 04 DB 4
58.6 002266 4C504D30 DB 'LPM0'
58.7 00226A EVEN
58.8 00226A IF 'DOCODE'='DOCODE'
58.9 00226A .... setlpm0: DW $+2
58.10 00226C ELSE
58.11 00226C setlpm0: DW DOCODE
58.12 00226C ENDIF
58.13 00226C ENDM
59 00226C ; BIC.B #BIT0,&021h ; red LED
off
60 00226C 0212 PUSH SR
61 00226E 32D01800 BIS #(GIE+LPM0),SR ; CPU stops
here
62 002272 3241 POP SR
63 002274 ; DINT
64 002274 ; BIS.B #BIT0,&021h ; red LED
on
65 002274 NEXT
65.1 002274 3645 MOV @IP+,W // ; fetch word address
into W
65.2 002276 3046 MOV @W+,PC // ; fetch code address
into PC, W=PFA
65.3 002278 ENDM
66 002278
67 002278 ;Z SETIRX -- set IRX vector to wakr
up MCU
68 002278 ; lpm_wake-isr_rx FFEE interrrupt ;
69 002278 HEADER SETIRX,6,'SETIRX',DOCOLON
69.1 000000 PUBLIC SETIRX
69.2 002278 .... DW link
69.3 00227A FF DB 0FFh ; not immediate
69.4 00227B link SET $
69.5 00227B 06 DB 6
69.6 00227C 534554495258 DB 'SETIRX'
69.7 002282 EVEN
69.8 002282 IF 'DOCOLON'='DOCODE'
69.9 002282 SETIRX: DW $+2
69.10 002282 ELSE
69.11 002282 .... SETIRX: DW DOCOLON
69.12 002284 ENDIF
69.13 002284 ENDM
70 002284 ............* DW LPM_WAKE,lit,(intvecs+USCIAB0RX_VECT
OR),INTERRUPT
71 00228C .... DW EXIT
72 00228E
73 00228E
74 00228E /***********************************************
***************
75 00228E ;Z IE2 -- adr Interrupt enable register
for UCA0
76 00228E HEADER IE2CON,3,'IE2',DOCON
77 00228E DW IE2
78 00228E
79 00228E ;Z UCA0RXIE -- adr Interrupt mask
UCA0
80 00228E HEADER UCA0RXIEmask,8,'UCA0RXIE',DOCON
81 00228E DW UCA0RXIE
82 00228E ************************************************
***************/
83 00228E
84 00228E ; finis
992 00228E ; #include "4e-WAS430G2553.s43"
993 00228E
994 00228E
995 00228E /*
996 00228E ; DEBUG FORTH EXECUTION
- 4e-core430G2553 - Page 160
997 00228E ; debug serieal
998 00228E PUBLIC DEBUGIP
999 00228E DEBUGIP:
1000 00228E ; DW DOTID
1001 00228E DEBUG1:
1002 00228E ; DW TASK
1003 00228E DW KEY ; 1@A0 test 1=rot,@=grün,A=beide,0=a
us
1004 00228E DW DUP ;,DOTS,CR
1005 00228E DW STORELEDS
1006 00228E ; DW COLD
1007 00228E DW EMIT
1008 00228E DW lit,0,qbran
1009 00228E DW DEBUG1-$
1010 00228E DW bran,-2
1011 00228E
1012 00228E /*
1013 00228E ; debugging only
1014 00228E HEADLESS CREATE,DOCOLON
1015 00228E HEADLESS ALLOT,DOCOLON
1016 00228E HEADLESS BUILDS,DOCOLON
1017 00228E HEADLESS ICOMMA,DOCOLON
1018 00228E HEADLESS XDOES,DOCOLON
1019 00228E HEADLESS IHERE,DOCOLON
1020 00228E HEADLESS IALLOT,DOCOLON
1021 00228E HEADLESS CELL,DOCOLON
1022 00228E HEADLESS PJOUT,DOCOLON
1023 00228E */
1024 00228E
1025 00228E
1026 000000 PUBLIC lastword
1027 00228E lastword equ link
1028 00228E
1029 00228E ; for debug map only:
1030 00228E CamelForthEnd:
1031 00228E
1032 00228E END
ACCVIE #define, value: (0x20), line: 132:2
ACCVIFG #define, value: (0x0004u), line: 448:2
ADC10AE0_ #define, value: (0x004Au), line: 167:2 168:2
ADC10B1 #define, value: (0x002), line: 271:2
ADC10BUSY #define, value: (0x0001u), line: 211:2
ADC10CT #define, value: (0x004), line: 272:2
ADC10CTL0_ #define, value: (0x01B0u), line: 170:2 171:2
ADC10CTL1_ #define, value: (0x01B2u), line: 172:2 173:2
ADC10DF #define, value: (0x0200u), line: 220:2
ADC10DISABLE #define, value: (0x000), line: 274:2
ADC10DIV0 #define, value: (0x0020u), line: 216:2
ADC10DIV1 #define, value: (0x0040u), line: 217:2
ADC10DIV2 #define, value: (0x0080u), line: 218:2
ADC10DIV_0 #define, value: (0*0x20u), line: 238:2
ADC10DIV_1 #define, value: (1*0x20u), line: 239:2
ADC10DIV_2 #define, value: (2*0x20u), line: 240:2
ADC10DIV_3 #define, value: (3*0x20u), line: 241:2
ADC10DIV_4 #define, value: (4*0x20u), line: 242:2
ADC10DIV_5 #define, value: (5*0x20u), line: 243:2
ADC10DIV_6 #define, value: (6*0x20u), line: 244:2
ADC10DIV_7 #define, value: (7*0x20u), line: 245:2
ADC10DTC0_ #define, value: (0x0048u), line: 163:2 164:2
ADC10DTC1_ #define, value: (0x0049u), line: 165:2 166:2
ADC10FETCH #define, value: (0x001), line: 270:2
ADC10IE #define, value: (0x008), line: 183:2
ADC10IFG #define, value: (0x004), line: 182:2
ADC10MEM_ #define, value: (0x01B4u), line: 174:2 175:2
ADC10ON #define, value: (0x010), line: 184:2
ADC10SA_ #define, value: (0x01BCu), line: 176:2 177:2
ADC10SC #define, value: (0x001), line: 180:2
ADC10SHT0 #define, value: (0x800), line: 191:2
ADC10SHT1 #define, value: (0x1000u), line: 192:2
ADC10SHT_0 #define, value: (0*0x800u), line: 196:2
ADC10SHT_1 #define, value: (1*0x800u), line: 197:2
ADC10SHT_2 #define, value: (2*0x800u), line: 198:2
ADC10SHT_3 #define, value: (3*0x800u), line: 199:2
ADC10SR #define, value: (0x400), line: 190:2
ADC10SSEL0 #define, value: (0x0008u), line: 214:2
ADC10SSEL1 #define, value: (0x0010u), line: 215:2
- 4e-core430G2553 - Page 161
ADC10SSEL_0 #define, value: (0*8u), line: 233:2
ADC10SSEL_1 #define, value: (1*8u), line: 234:2
ADC10SSEL_2 #define, value: (2*8u), line: 235:2
ADC10SSEL_3 #define, value: (3*8u), line: 236:2
ADC10TB #define, value: (0x008), line: 273:2
ADC10_VECTOR #define, value: (5 * 2u), line: 965:2
BCSCTL1_ #define, value: (0x0057u), line: 283:2 284:2
BCSCTL2_ #define, value: (0x0058u), line: 285:2 286:2
BCSCTL3_ #define, value: (0x0053u), line: 287:2 288:2
BIT0 #define, value: (0x0001u), line: 57:2
BIT1 #define, value: (0x0002u), line: 58:2
BIT2 #define, value: (0x0004u), line: 59:2
BIT3 #define, value: (0x0008u), line: 60:2 120:9 121:9 122:9 128:9
137:9 143:9 215:9 216:9
224:9 231:9 240:9
BIT4 #define, value: (0x0010u), line: 61:2
BIT5 #define, value: (0x0020u), line: 62:2
BIT6 #define, value: (0x0040u), line: 63:2
BIT7 #define, value: (0x0080u), line: 64:2
BIT8 #define, value: (0x0100u), line: 65:2
BIT9 #define, value: (0x0200u), line: 66:2
BITA #define, value: (0x0400u), line: 67:2
BITB #define, value: (0x0800u), line: 68:2
BITC #define, value: (0x1000u), line: 69:2
BITD #define, value: (0x2000u), line: 70:2
BITE #define, value: (0x4000u), line: 71:2
BITF #define, value: (0x8000u), line: 72:2
BLKWRT #define, value: (0x0080u), line: 423:2
BUSY #define, value: (0x0001u), line: 446:2
C #define, value: (0x0001u), line: 78:2
CACTL1_ #define, value: (0x0059u), line: 365:2 366:2
CACTL2_ #define, value: (0x005Au), line: 367:2 368:2
CAEX #define, value: (0x80), line: 379:2
CAF #define, value: (0x02), line: 387:2
CAIE #define, value: (0x02), line: 373:2
CAIES #define, value: (0x04), line: 374:2
CAIFG #define, value: (0x01), line: 372:2
CALBC1_12MHZ_ #define, value: (0x10FBu), line: 946:2 947:2
CALBC1_16MHZ_ #define, value: (0x10F9u), line: 942:2 943:2
CALBC1_1MHZ_ #define, value: (0x10FFu), line: 954:2 955:2
CALBC1_8MHZ_ #define, value: (0x10FDu), line: 950:2 951:2
CALDCO_12MHZ_ #define, value: (0x10FAu), line: 944:2 945:2
CALDCO_16MHZ_ #define, value: (0x10F8u), line: 940:2 941:2
CALDCO_1MHZ_ #define, value: (0x10FEu), line: 952:2 953:2
CALDCO_8MHZ_ #define, value: (0x10FCu), line: 948:2 949:2
CAON #define, value: (0x08), line: 375:2
CAOUT #define, value: (0x01), line: 386:2
CAP #define, value: (0x0100u), line: 604:2
CAPD0 #define, value: (0x01), line: 395:2
CAPD1 #define, value: (0x02), line: 396:2
CAPD2 #define, value: (0x04), line: 397:2
CAPD3 #define, value: (0x08), line: 398:2
CAPD4 #define, value: (0x10), line: 399:2
CAPD5 #define, value: (0x20), line: 400:2
CAPD6 #define, value: (0x40), line: 401:2
CAPD7 #define, value: (0x80), line: 402:2
CAPD_ #define, value: (0x005Bu), line: 369:2 370:2
CAREF0 #define, value: (0x10), line: 376:2
CAREF1 #define, value: (0x20), line: 377:2
CAREF_0 #define, value: (0x00), line: 381:2
CAREF_1 #define, value: (0x10), line: 382:2
CAREF_2 #define, value: (0x20), line: 383:2
CAREF_3 #define, value: (0x30), line: 384:2
CARSEL #define, value: (0x40), line: 378:2
CASHORT #define, value: (0x80), line: 393:2
CCI #define, value: (0x0008u), line: 609:2
CCIE #define, value: (0x0010u), line: 608:2
CCIFG #define, value: (0x0001u), line: 612:2
CCIS0 #define, value: (0x1000u), line: 601:2
CCIS1 #define, value: (0x2000u), line: 600:2
CCIS_0 #define, value: (0*0x1000u), line: 622:2
CCIS_1 #define, value: (1*0x1000u), line: 623:2
CCIS_2 #define, value: (2*0x1000u), line: 624:2
CCIS_3 #define, value: (3*0x1000u), line: 625:2
CCR0 #define, value: TACCR0, line: 565:2
CCR0_ #define, value: TACCR0_, line: 571:2
CCR1 #define, value: TACCR1, line: 566:2
CCR1_ #define, value: TACCR1_, line: 572:2
- 4e-core430G2553 - Page 162
CCR2 #define, value: TACCR2, line: 567:2
CCR2_ #define, value: TACCR2_, line: 573:2
CCTL0 #define, value: TACCTL0, line: 562:2
CCTL0_ #define, value: TACCTL0_, line: 568:2
CCTL1 #define, value: TACCTL1, line: 563:2
CCTL1_ #define, value: TACCTL1_, line: 569:2
CCTL2 #define, value: TACCTL2, line: 564:2
CCTL2_ #define, value: TACCTL2_, line: 570:2
CM0 #define, value: (0x4000u), line: 599:2
CM1 #define, value: (0x8000u), line: 598:2
CM_0 #define, value: (0*0x4000u), line: 626:2
CM_1 #define, value: (1*0x4000u), line: 627:2
CM_2 #define, value: (2*0x4000u), line: 628:2
CM_3 #define, value: (3*0x4000u), line: 629:2
COMPARATORA_VECTOR #define, value: (11 * 2u), line: 971:2
CONSEQ0 #define, value: (0x0002u), line: 212:2
CONSEQ1 #define, value: (0x0004u), line: 213:2
CONSEQ_0 #define, value: (0*2u), line: 228:2
CONSEQ_1 #define, value: (1*2u), line: 229:2
CONSEQ_2 #define, value: (2*2u), line: 230:2
CONSEQ_3 #define, value: (3*2u), line: 231:2
COV #define, value: (0x0002u), line: 611:2
CPUOFF #define, value: (0x0010u), line: 83:2 44:10 51:10 61:10
DCO0 #define, value: (0x20), line: 295:2
DCO1 #define, value: (0x40), line: 296:2
DCO2 #define, value: (0x80), line: 297:2
DCOCTL_ #define, value: (0x0056u), line: 281:2 282:2
DEFC #define, line: 42:2 128:2 135:2 143:2 151:2
164:2 166:2 168:2 282:2
284:2 286:2 288:2 366:2
368:2 370:2 462:2 464:2
466:2 468:2 470:2 472:2
474:2 476:2 478:2 481:2
483:2 485:2 487:2 489:2
491:2 493:2 495:2 497:2
505:2 507:2 509:2 511:2
513:2 515:2 677:2 679:2
681:2 683:2 685:2 687:2
689:2 691:2 693:2 695:2
697:2 702:2 704:2 706:2
708:2 710:2 712:2 714:2
716:2 941:2 943:2 945:2
947:2 949:2 951:2 953:2
955:2
DEFW #define, line: 43:2 171:2 173:2 175:2 177:2
410:2 412:2 414:2 523:2
525:2 527:2 529:2 531:2
533:2 535:2 537:2 539:2
645:2 647:2 649:2 651:2
653:2 655:2 657:2 659:2
661:2 718:2 720:2 893:2
DIVA0 #define, value: (0x10), line: 303:2
DIVA1 #define, value: (0x20), line: 304:2
DIVA_0 #define, value: (0x00), line: 308:2
DIVA_1 #define, value: (0x10), line: 309:2
DIVA_2 #define, value: (0x20), line: 310:2
DIVA_3 #define, value: (0x30), line: 311:2
DIVM0 #define, value: (0x10), line: 316:2
DIVM1 #define, value: (0x20), line: 317:2
DIVM_0 #define, value: (0x00), line: 326:2
DIVM_1 #define, value: (0x10), line: 327:2
DIVM_2 #define, value: (0x20), line: 328:2
DIVM_3 #define, value: (0x30), line: 329:2
DIVS0 #define, value: (0x02), line: 313:2
DIVS1 #define, value: (0x04), line: 314:2
DIVS_0 #define, value: (0x00), line: 321:2
DIVS_1 #define, value: (0x02), line: 322:2
DIVS_2 #define, value: (0x04), line: 323:2
DIVS_3 #define, value: (0x06), line: 324:2
EMEX #define, value: (0x0020u), line: 451:2
ENC #define, value: (0x002), line: 181:2
ERASE #define, value: (0x0002u), line: 420:2 351 33:7
FAIL #define, value: (0x0080u), line: 453:2
FCTL1_ #define, value: (0x0128u), line: 409:2 410:2
FCTL2_ #define, value: (0x012Au), line: 411:2 412:2
FCTL3_ #define, value: (0x012Cu), line: 413:2 414:2
FN0 #define, value: (0x0001u), line: 426:2
FN1 #define, value: (0x0002u), line: 427:2
- 4e-core430G2553 - Page 163
FN2 #define, value: (0x0004u), line: 429:2
FN3 #define, value: (0x0008u), line: 432:2
FN4 #define, value: (0x0010u), line: 435:2
FN5 #define, value: (0x0020u), line: 437:2
FRKEY #define, value: (0x9600u), line: 416:2
FSSEL0 #define, value: (0x0040u), line: 438:2
FSSEL1 #define, value: (0x0080u), line: 439:2
FSSEL_0 #define, value: (0x0000u), line: 441:2
FSSEL_1 #define, value: (0x0040u), line: 442:2
FSSEL_2 #define, value: (0x0080u), line: 443:2
FSSEL_3 #define, value: (0x00C0u), line: 444:2
FWKEY #define, value: (0xA500u), line: 417:2 350 351 353 354
395 396 399 400
428 429 432 433
463 464 482 483
15:7 16:7 18:7 19:7
32:7 33:7 35:7 36:7
FXKEY #define, value: (0x3300u), line: 418:2
GIE #define, value: (0x0008u), line: 82:2 44:10 51:10 61:10
HALLOT #define, value: IALLOT, line: 830:5 1244:5
HCCOMMA #define, value: ICCOMMA, line: 832:5 1242:5
HCFETCH #define, value: ICFETCH, line: 833:5 941:5 1244:5
HCOMMA #define, value: ICOMMA, line: 831:5 1241:5
HCOUNT #define, value: ICOUNT, line: 677:5 935:5 1567:5
HCSTORE #define, value: ICSTORE, line: 835:5 1313:5
HFETCH #define, value: IFETCH, line: 834:5 964:5 1303:5 1568:5
HHERE #define, value: IHERE, line: 829:5 1243:5
HSTORE #define, value: ISTORE, line: 836:5
HTYPE #define, value: ITYPE, line: 678:5 1567:5
HWORD #define, value: IWORDC, line: 679:5 1244:5
ICFETCH #define, value: CFETCH, line: 446 598:5 941:5 1244:5
ICOUNT #define, value: COUNT, line: 553:5 585:5 935:5 1567:5
ID0 #define, value: (0x0040u), line: 578:2
ID1 #define, value: (0x0080u), line: 577:2
ID_0 #define, value: (0*0x40u), line: 589:2
ID_1 #define, value: (1*0x40u), line: 590:2
ID_2 #define, value: (2*0x40u), line: 591:2
ID_3 #define, value: (3*0x40u), line: 592:2
IE1_ #define, value: (0x0000u), line: 127:2 128:2
IE2_ #define, value: (0x0001u), line: 142:2 143:2
IFETCH #define, value: FETCH, line: 445 597:5 964:5 1303:5 1531:5
1532:5 1533:5 1568:5 37:6
IFG1_ #define, value: (0x0002u), line: 134:2 135:2
IFG2_ #define, value: (0x0003u), line: 150:2 151:2
INCH0 #define, value: (0x1000u), line: 223:2
INCH1 #define, value: (0x2000u), line: 224:2
INCH2 #define, value: (0x4000u), line: 225:2
INCH3 #define, value: (0x8000u), line: 226:2
INCH_0 #define, value: (0*0x1000u), line: 252:2
INCH_1 #define, value: (1*0x1000u), line: 253:2
INCH_10 #define, value: (10*0x1000u), line: 262:2
INCH_11 #define, value: (11*0x1000u), line: 263:2
INCH_12 #define, value: (12*0x1000u), line: 264:2
INCH_13 #define, value: (13*0x1000u), line: 265:2
INCH_14 #define, value: (14*0x1000u), line: 266:2
INCH_15 #define, value: (15*0x1000u), line: 267:2
INCH_2 #define, value: (2*0x1000u), line: 254:2
INCH_3 #define, value: (3*0x1000u), line: 255:2
INCH_4 #define, value: (4*0x1000u), line: 256:2
INCH_5 #define, value: (5*0x1000u), line: 257:2
INCH_6 #define, value: (6*0x1000u), line: 258:2
INCH_7 #define, value: (7*0x1000u), line: 259:2
INCH_8 #define, value: (8*0x1000u), line: 260:2
INCH_9 #define, value: (9*0x1000u), line: 261:2
INDEX #define, value: R8, line: 51:3 683 686 687 696
700 708 713 721
735
INFOEND #define, value: (0x10FF), line: 28:3 342 386 419
INFOSEG #define, value: (128), line: 36:3 363 364
INFOSTART #define, value: (0x1000), line: 27:3 340 384 417
IP #define, value: R5, line: 46:3 76 77 81 82
91 92 93 121
131 143 171 172
173 174 191 197
202 209 217 225
230 240 247 254
261 267 274 280
292 298 303 310
- 4e-core430G2553 - Page 164
367 404 489 497
503 510 517 522
527 532 537 543
548 553 558 563
568 579 591 600
607 615 627 662
662 663 670 671
689 699 702 712
715 723 731 737
766 797 813 830
847 870 885 905
947 958 1665:5 1696:5
1829:5 1836:5 1843:5 1850:5
1857:5 1867:5 1970:5 23:7
39:7 154:9 250:9 31:10
36:10 55:10 65:10
IRACL #define, value: R12, line: 67:3 748 756 764 777
782 796
IRACM #define, value: R13, line: 68:3 749 757 765
IRBT #define, value: W, line: 69:3 753 754 761 778
784
IROP1 #define, value: TOS, line: 64:3 754 779 781 789
IROP2L #define, value: R10, line: 65:3 745 756 758 772
786
IROP2M #define, value: R11, line: 66:3 752 757 759 771
779 781 787 789
795
ISREND #define, value: (0xFFDF), line: 34:3 335
ISRSTART #define, value: (0xFE00), line: 33:3 333
ISSH #define, value: (0x0100u), line: 219:2
ITYPE #define, value: TYP, line: 552:5 656:5 1158:5 1196:5 1567:5
1706:5 1707:5 1755:5 9:6
81:6 90:6 148:6
KEYV #define, value: (0x0002u), line: 447:2
LFXT1OF #define, value: (0x01), line: 336:2
LFXT1S0 #define, value: (0x10), line: 340:2
LFXT1S1 #define, value: (0x20), line: 341:2
LFXT1S_0 #define, value: (0x00), line: 350:2
LFXT1S_1 #define, value: (0x10), line: 351:2
LFXT1S_2 #define, value: (0x20), line: 352:2
LFXT1S_3 #define, value: (0x30), line: 353:2
LIMIT #define, value: R9, line: 52:3 682 684 685 687
701 714 722 736
LOCK #define, value: (0x0010u), line: 450:2 354 400 433 483
19:7 36:7
LOCKA #define, value: (0x0040u), line: 452:2
LPM0 #define, value: (CPUOFF), line: 91:2 61:10
LPM1 #define, value: (SCG0+CPUOFF), line: 92:2
LPM2 #define, value: (SCG1+CPUOFF), line: 93:2
LPM3 #define, value: (SCG1+SCG0+CPUOFF), line: 94:2
LPM4 #define, value: (SCG1+SCG0+OSCOFF+CPUOFF), line: 95:2 44:10 51:10
MAINSEG #define, value: (512), line: 35:3 363
MC0 #define, value: (0x0010u), line: 580:2
MC1 #define, value: (0x0020u), line: 579:2
MC_0 #define, value: (0*0x10u), line: 585:2
MC_1 #define, value: (1*0x10u), line: 586:2
MC_2 #define, value: (2*0x10u), line: 587:2
MC_3 #define, value: (3*0x10u), line: 588:2
MERAS #define, value: (0x0004u), line: 421:2
MOD0 #define, value: (0x01), line: 290:2
MOD1 #define, value: (0x02), line: 291:2
MOD2 #define, value: (0x04), line: 292:2
MOD3 #define, value: (0x08), line: 293:2
MOD4 #define, value: (0x10), line: 294:2
MSC #define, value: (0x080), line: 187:2
N #define, value: (0x0004u), line: 80:2
NMIIE #define, value: (0x10), line: 131:2
NMIIFG #define, value: (0x10), line: 140:2
NMI_VECTOR #define, value: (14 * 2u), line: 974:2
OFIE #define, value: (0x02), line: 130:2
OFIFG #define, value: (0x02), line: 137:2
OSCOFF #define, value: (0x0020u), line: 84:2 44:10 51:10
OUT #define, value: (0x0004u), line: 610:2
OUTMOD0 #define, value: (0x0020u), line: 607:2
OUTMOD1 #define, value: (0x0040u), line: 606:2
OUTMOD2 #define, value: (0x0080u), line: 605:2
OUTMOD_0 #define, value: (0*0x20u), line: 614:2
OUTMOD_1 #define, value: (1*0x20u), line: 615:2
- 4e-core430G2553 - Page 165
OUTMOD_2 #define, value: (2*0x20u), line: 616:2
OUTMOD_3 #define, value: (3*0x20u), line: 617:2
OUTMOD_4 #define, value: (4*0x20u), line: 618:2
OUTMOD_5 #define, value: (5*0x20u), line: 619:2
OUTMOD_6 #define, value: (6*0x20u), line: 620:2
OUTMOD_7 #define, value: (7*0x20u), line: 621:2
OWBIT #define, value: BIT3, line: 73:9 120:9 121:9 122:9 128:9
137:9 143:9 215:9 216:9
224:9 231:9 240:9
OWDIR #define, value: P2DIR, line: 71:9 120:9 128:9 137:9 215:9
224:9 240:9
OWIN #define, value: P2IN, line: 69:9 143:9 231:9
OWOUT #define, value: P2OUT, line: 70:9 121:9 216:9
OWREN #define, value: P2REN, line: 72:9 122:9
P1DIR_ #define, value: (0x0022u), line: 465:2 466:2
P1IES_ #define, value: (0x0024u), line: 469:2 470:2
P1IE_ #define, value: (0x0025u), line: 471:2 472:2
P1IFG_ #define, value: (0x0023u), line: 467:2 468:2
P1IN_ #define, value: (0x0020u), line: 461:2 462:2
P1OUT_ #define, value: (0x0021u), line: 463:2 464:2
P1REN_ #define, value: (0x0027u), line: 477:2 478:2
P1SEL2_ #define, value: (0x0041u), line: 475:2 476:2
P1SEL_ #define, value: (0x0026u), line: 473:2 474:2
P2CA0 #define, value: (0x04), line: 388:2
P2CA1 #define, value: (0x08), line: 389:2
P2CA2 #define, value: (0x10), line: 390:2
P2CA3 #define, value: (0x20), line: 391:2
P2CA4 #define, value: (0x40), line: 392:2
P2DIR_ #define, value: (0x002Au), line: 484:2 485:2
P2IES_ #define, value: (0x002Cu), line: 488:2 489:2
P2IE_ #define, value: (0x002Du), line: 490:2 491:2
P2IFG_ #define, value: (0x002Bu), line: 486:2 487:2
P2IN_ #define, value: (0x0028u), line: 480:2 481:2
P2OUT_ #define, value: (0x0029u), line: 482:2 483:2
P2REN_ #define, value: (0x002Fu), line: 496:2 497:2
P2SEL2_ #define, value: (0x0042u), line: 494:2 495:2
P2SEL_ #define, value: (0x002Eu), line: 492:2 493:2
P3DIR_ #define, value: (0x001Au), line: 508:2 509:2
P3IN_ #define, value: (0x0018u), line: 504:2 505:2
P3OUT_ #define, value: (0x0019u), line: 506:2 507:2
P3REN_ #define, value: (0x0010u), line: 514:2 515:2
P3SEL2_ #define, value: (0x0043u), line: 512:2 513:2
P3SEL_ #define, value: (0x001Bu), line: 510:2 511:2
PORIFG #define, value: (0x04), line: 138:2
PORT1_VECTOR #define, value: (2 * 2u), line: 963:2
PORT2_VECTOR #define, value: (3 * 2u), line: 964:2
PREFIXPROMPT #define, value: 0, line: 1136:5 1142:5 1151:5
PSP #define, value: R4, line: 45:3 68 74 75 118
119 128 129 139
140 168 169 189
190 201 206 207
213 214 215 221
222 223 224 229
239 244 245 251
252 258 259 260
265 266 271 272
279 296 297 307
309 319 366 373
403 408 456 457
488 496 501 502
507 508 509 514
521 526 531 572
583 611 623 635
648 649 668 685
688 709 719 720
727 728 745 764
771 772 795 804
805 812 821 822
829 835 836 846
859 860 868 874
875 883 890 891
946 954 955 972
973 1658:5 1692:5 1693:5
1695:5 1826:5 1827:5 1828:5
1833:5 1834:5 1835:5 1840:5
1841:5 1842:5 1847:5 1848:5
1849:5 1854:5 1855:5 1856:5
1861:5 1866:5 8:7 22:7
- 4e-core430G2553 - Page 166
113:9 114:9
Q #define, value: R12, line: 57:3 472 473 474
RAMEND #define, value: (0x0400), line: 30:3 1905:5
RAMSTART #define, value: (0x0200), line: 29:3
READ_ONLY #define, value: const, line: 50:2 462:2 481:2 505:2 523:2
645:2 689:2 714:2 941:2
943:2 945:2 947:2 949:2
951:2 953:2 955:2
REF2_5V #define, value: (0x040), line: 186:2
REFBURST #define, value: (0x100), line: 188:2
REFON #define, value: (0x020), line: 185:2
REFOUT #define, value: (0x200), line: 189:2
RESET_VECTOR #define, value: (15 * 2u), line: 975:2
RSEL0 #define, value: (0x01), line: 299:2
RSEL1 #define, value: (0x02), line: 300:2
RSEL2 #define, value: (0x04), line: 301:2
RSEL3 #define, value: (0x08), line: 302:2
RSP #define, value: SP, line: 42:3 81 246 253 273
278 681 682 683
700 701 713 714
729 730 735 736
44:10
RSTIFG #define, value: (0x08), line: 139:2
SCCI #define, value: (0x0400u), line: 603:2
SCG0 #define, value: (0x0040u), line: 85:2 44:10 51:10
SCG1 #define, value: (0x0080u), line: 86:2 44:10 51:10
SCS #define, value: (0x0800u), line: 602:2
SEGWRT #define, value: (0x0080u), line: 424:2
SELM0 #define, value: (0x40), line: 318:2
SELM1 #define, value: (0x80), line: 319:2
SELM_0 #define, value: (0x00), line: 331:2
SELM_1 #define, value: (0x40), line: 332:2
SELM_2 #define, value: (0x80), line: 333:2
SELM_3 #define, value: (0xC0), line: 334:2
SELS #define, value: (0x08), line: 315:2
SHS0 #define, value: (0x0400u), line: 221:2
SHS1 #define, value: (0x0800u), line: 222:2
SHS_0 #define, value: (0*0x400u), line: 247:2
SHS_1 #define, value: (1*0x400u), line: 248:2
SHS_2 #define, value: (2*0x400u), line: 249:2
SHS_3 #define, value: (3*0x400u), line: 250:2
SREF0 #define, value: (0x2000u), line: 193:2
SREF1 #define, value: (0x4000u), line: 194:2
SREF2 #define, value: (0x8000u), line: 195:2
SREF_0 #define, value: (0*0x2000u), line: 201:2
SREF_1 #define, value: (1*0x2000u), line: 202:2
SREF_2 #define, value: (2*0x2000u), line: 203:2
SREF_3 #define, value: (3*0x2000u), line: 204:2
SREF_4 #define, value: (4*0x2000u), line: 205:2
SREF_5 #define, value: (5*0x2000u), line: 206:2
SREF_6 #define, value: (6*0x2000u), line: 207:2
SREF_7 #define, value: (7*0x2000u), line: 208:2
T #define, value: R13, line: 58:3
TA0CCR0_ #define, value: (0x0172u), line: 534:2 535:2
TA0CCR1_ #define, value: (0x0174u), line: 536:2 537:2
TA0CCR2_ #define, value: (0x0176u), line: 538:2 539:2
TA0CCTL0_ #define, value: (0x0162u), line: 526:2 527:2
TA0CCTL1_ #define, value: (0x0164u), line: 528:2 529:2
TA0CCTL2_ #define, value: (0x0166u), line: 530:2 531:2
TA0CTL_ #define, value: (0x0160u), line: 524:2 525:2
TA0IV_ #define, value: (0x012Eu), line: 522:2 523:2
TA0IV_6 #define, value: (0x0006u), line: 635:2
TA0IV_8 #define, value: (0x0008u), line: 636:2
TA0IV_NONE #define, value: (0x0000u), line: 632:2
TA0IV_TACCR1 #define, value: (0x0002u), line: 633:2
TA0IV_TACCR2 #define, value: (0x0004u), line: 634:2
TA0IV_TAIFG #define, value: (0x000Au), line: 637:2
TA0R_ #define, value: (0x0170u), line: 532:2 533:2
TA1CCR0_ #define, value: (0x0192u), line: 656:2 657:2
TA1CCR1_ #define, value: (0x0194u), line: 658:2 659:2
TA1CCR2_ #define, value: (0x0196u), line: 660:2 661:2
TA1CCTL0_ #define, value: (0x0182u), line: 648:2 649:2
TA1CCTL1_ #define, value: (0x0184u), line: 650:2 651:2
TA1CCTL2_ #define, value: (0x0186u), line: 652:2 653:2
TA1CTL_ #define, value: (0x0180u), line: 646:2 647:2
TA1IV_ #define, value: (0x011Eu), line: 644:2 645:2
TA1IV_NONE #define, value: (0x0000u), line: 666:2
TA1IV_TACCR1 #define, value: (0x0002u), line: 667:2
- 4e-core430G2553 - Page 167
TA1IV_TACCR2 #define, value: (0x0004u), line: 668:2
TA1IV_TAIFG #define, value: (0x000Au), line: 669:2
TA1R_ #define, value: (0x0190u), line: 654:2 655:2
TACCR0 #define, value: TA0CCR0, line: 548:2
TACCR0_ #define, value: TA0CCR0_, line: 557:2
TACCR1 #define, value: TA0CCR1, line: 549:2
TACCR1_ #define, value: TA0CCR1_, line: 558:2
TACCR2 #define, value: TA0CCR2, line: 550:2
TACCR2_ #define, value: TA0CCR2_, line: 559:2
TACCTL0 #define, value: TA0CCTL0, line: 544:2
TACCTL0_ #define, value: TA0CCTL0_, line: 553:2
TACCTL1 #define, value: TA0CCTL1, line: 545:2
TACCTL1_ #define, value: TA0CCTL1_, line: 554:2
TACCTL2 #define, value: TA0CCTL2, line: 546:2
TACCTL2_ #define, value: TA0CCTL2_, line: 555:2
TACLR #define, value: (0x0004u), line: 581:2
TACTL #define, value: TA0CTL, line: 543:2
TACTL_ #define, value: TA0CTL_, line: 552:2
TAIE #define, value: (0x0002u), line: 582:2
TAIFG #define, value: (0x0001u), line: 583:2
TAIV #define, value: TA0IV, line: 542:2
TAIV_ #define, value: TA0IV_, line: 551:2
TAR #define, value: TA0R, line: 547:2
TAR_ #define, value: TA0R_, line: 556:2
TASSEL0 #define, value: (0x0100u), line: 576:2
TASSEL1 #define, value: (0x0200u), line: 575:2
TASSEL_0 #define, value: (0*0x100u), line: 593:2
TASSEL_1 #define, value: (1*0x100u), line: 594:2
TASSEL_2 #define, value: (2*0x100u), line: 595:2
TASSEL_3 #define, value: (3*0x100u), line: 596:2
TIMER0_A0_VECTOR #define, value: (9 * 2u), line: 969:2
TIMER0_A1_VECTOR #define, value: (8 * 2u), line: 968:2
TIMER1_A0_VECTOR #define, value: (13 * 2u), line: 973:2
TIMER1_A1_VECTOR #define, value: (12 * 2u), line: 972:2
TOS #define, value: R7, line: 48:3 67 68 75 76
119 120 129 130
140 141 142 169
170 190 195 201
207 208 215 216
222 223 238 239
245 246 252 253
259 260 265 266
272 273 278 279
291 291 296 297
302 302 308 309
320 322 366 374
376 379 381 384
386 398 403 409
412 414 417 419
431 458 467 477
486 488 496 501
502 507 509 515
516 521 526 531
536 541 542 547
552 557 562 562
567 573 576 578
584 588 590 598
599 599 604 604
605 605 606 612
614 624 626 636
646 649 667 668
686 688 708 709
720 721 722 728
729 730 754 765
779 781 789 796
808 812 823 827
829 837 839 840
844 846 863 869
878 884 892 897
902 902 903 903
904 945 946 955
956 973 57:4 1656:5
1657:5 1658:5 1660:5 1662:5
1693:5 1694:5 1826:5 1828:5
1833:5 1835:5 1840:5 1842:5
1847:5 1849:5 1854:5 1856:5
1861:5 1863:5 1865:5 1969:5
9:7 11:7 17:7 22:7
- 4e-core430G2553 - Page 168
114:9 117:9 145:9 209:9
222:9 233:9 234:9
UC0IE #define, value: IE2, line: 144:2
UC0IFG #define, value: IFG2, line: 152:2
UC7BIT #define, value: (0x10), line: 726:2
UCA0ABCTL_ #define, value: (0x005Du), line: 692:2 693:2
UCA0BR0_ #define, value: (0x0062u), line: 680:2 681:2
UCA0BR1_ #define, value: (0x0063u), line: 682:2 683:2
UCA0CTL0_ #define, value: (0x0060u), line: 676:2 677:2
UCA0CTL1_ #define, value: (0x0061u), line: 678:2 679:2
UCA0IRRCTL_ #define, value: (0x005Fu), line: 696:2 697:2
UCA0IRTCTL_ #define, value: (0x005Eu), line: 694:2 695:2
UCA0MCTL_ #define, value: (0x0064u), line: 684:2 685:2
UCA0RXBUF_ #define, value: (0x0066u), line: 688:2 689:2
UCA0RXIE #define, value: (0x01), line: 145:2 30:10 35:10
UCA0RXIFG #define, value: (0x01), line: 153:2 952 974
UCA0STAT_ #define, value: (0x0065u), line: 686:2 687:2
UCA0TXBUF_ #define, value: (0x0067u), line: 690:2 691:2
UCA0TXIE #define, value: (0x02), line: 146:2
UCA0TXIFG #define, value: (0x02), line: 154:2 943
UCA10 #define, value: (0x80), line: 738:2
UCABDEN #define, value: (0x01), line: 862:2
UCADDR #define, value: (0x02), line: 816:2
UCALIE #define, value: (0x01), line: 827:2
UCALIFG #define, value: (0x01), line: 835:2
UCB0BR0_ #define, value: (0x006Au), line: 705:2 706:2
UCB0BR1_ #define, value: (0x006Bu), line: 707:2 708:2
UCB0CTL0_ #define, value: (0x0068u), line: 701:2 702:2
UCB0CTL1_ #define, value: (0x0069u), line: 703:2 704:2
UCB0I2CIE_ #define, value: (0x006Cu), line: 709:2 710:2
UCB0I2COA_ #define, value: (0x0118u), line: 717:2 718:2
UCB0I2CSA_ #define, value: (0x011Au), line: 719:2 720:2
UCB0RXBUF_ #define, value: (0x006Eu), line: 713:2 714:2
UCB0RXIE #define, value: (0x04), line: 147:2
UCB0RXIFG #define, value: (0x04), line: 155:2
UCB0STAT_ #define, value: (0x006Du), line: 711:2 712:2
UCB0TXBUF_ #define, value: (0x006Fu), line: 715:2 716:2
UCB0TXIE #define, value: (0x08), line: 148:2
UCB0TXIFG #define, value: (0x08), line: 156:2
UCBBUSY #define, value: (0x10), line: 831:2
UCBRF0 #define, value: (0x10), line: 778:2
UCBRF1 #define, value: (0x20), line: 777:2
UCBRF2 #define, value: (0x40), line: 776:2
UCBRF3 #define, value: (0x80), line: 775:2
UCBRF_0 #define, value: (0x00), line: 784:2
UCBRF_1 #define, value: (0x10), line: 785:2
UCBRF_10 #define, value: (0xA0), line: 794:2
UCBRF_11 #define, value: (0xB0), line: 795:2
UCBRF_12 #define, value: (0xC0), line: 796:2
UCBRF_13 #define, value: (0xD0), line: 797:2
UCBRF_14 #define, value: (0xE0), line: 798:2
UCBRF_15 #define, value: (0xF0), line: 799:2
UCBRF_2 #define, value: (0x20), line: 786:2
UCBRF_3 #define, value: (0x30), line: 787:2
UCBRF_4 #define, value: (0x40), line: 788:2
UCBRF_5 #define, value: (0x50), line: 789:2
UCBRF_6 #define, value: (0x60), line: 790:2
UCBRF_7 #define, value: (0x70), line: 791:2
UCBRF_8 #define, value: (0x80), line: 792:2
UCBRF_9 #define, value: (0x90), line: 793:2
UCBRK #define, value: (0x08), line: 814:2
UCBRKIE #define, value: (0x10), line: 751:2
UCBRS0 #define, value: (0x02), line: 781:2
UCBRS1 #define, value: (0x04), line: 780:2
UCBRS2 #define, value: (0x08), line: 779:2
UCBRS_0 #define, value: (0x00), line: 801:2
UCBRS_1 #define, value: (0x02), line: 802:2
UCBRS_2 #define, value: (0x04), line: 803:2
UCBRS_3 #define, value: (0x06), line: 804:2
UCBRS_4 #define, value: (0x08), line: 805:2
UCBRS_5 #define, value: (0x0A), line: 806:2
UCBRS_6 #define, value: (0x0C), line: 807:2
UCBRS_7 #define, value: (0x0E), line: 808:2
UCBTOE #define, value: (0x04), line: 860:2
UCBUSY #define, value: (0x01), line: 817:2
UCCKPH #define, value: (0x80), line: 733:2
UCCKPL #define, value: (0x40), line: 734:2
UCDELIM0 #define, value: (0x10), line: 858:2
- 4e-core430G2553 - Page 169
UCDELIM1 #define, value: (0x20), line: 857:2
UCDORM #define, value: (0x08), line: 752:2
UCFE #define, value: (0x40), line: 811:2
UCGC #define, value: (0x20), line: 830:2
UCGCEN #define, value: (0x8000u), line: 864:2
UCIDLE #define, value: (0x02), line: 818:2
UCIREN #define, value: (0x01), line: 844:2
UCIRRXFE #define, value: (0x01), line: 853:2
UCIRRXFL0 #define, value: (0x04), line: 851:2
UCIRRXFL1 #define, value: (0x08), line: 850:2
UCIRRXFL2 #define, value: (0x10), line: 849:2
UCIRRXFL3 #define, value: (0x20), line: 848:2
UCIRRXFL4 #define, value: (0x40), line: 847:2
UCIRRXFL5 #define, value: (0x80), line: 846:2
UCIRRXPL #define, value: (0x02), line: 852:2
UCIRTXCLK #define, value: (0x02), line: 843:2
UCIRTXPL0 #define, value: (0x04), line: 842:2
UCIRTXPL1 #define, value: (0x08), line: 841:2
UCIRTXPL2 #define, value: (0x10), line: 840:2
UCIRTXPL3 #define, value: (0x20), line: 839:2
UCIRTXPL4 #define, value: (0x40), line: 838:2
UCIRTXPL5 #define, value: (0x80), line: 837:2
UCLISTEN #define, value: (0x80), line: 810:2
UCMM #define, value: (0x20), line: 740:2
UCMODE0 #define, value: (0x02), line: 729:2
UCMODE1 #define, value: (0x04), line: 728:2
UCMODE_0 #define, value: (0x00), line: 742:2
UCMODE_1 #define, value: (0x02), line: 743:2
UCMODE_2 #define, value: (0x04), line: 744:2
UCMODE_3 #define, value: (0x06), line: 745:2
UCMSB #define, value: (0x20), line: 725:2
UCMST #define, value: (0x08), line: 735:2
UCNACKIE #define, value: (0x08), line: 824:2
UCNACKIFG #define, value: (0x08), line: 832:2
UCOA0 #define, value: (0x0001u), line: 874:2
UCOA1 #define, value: (0x0002u), line: 873:2
UCOA2 #define, value: (0x0004u), line: 872:2
UCOA3 #define, value: (0x0008u), line: 871:2
UCOA4 #define, value: (0x0010u), line: 870:2
UCOA5 #define, value: (0x0020u), line: 869:2
UCOA6 #define, value: (0x0040u), line: 868:2
UCOA7 #define, value: (0x0080u), line: 867:2
UCOA8 #define, value: (0x0100u), line: 866:2
UCOA9 #define, value: (0x0200u), line: 865:2
UCOE #define, value: (0x20), line: 812:2
UCOS16 #define, value: (0x01), line: 782:2
UCPAR #define, value: (0x40), line: 724:2
UCPE #define, value: (0x10), line: 813:2
UCPEN #define, value: (0x80), line: 723:2
UCRXEIE #define, value: (0x20), line: 750:2
UCRXERR #define, value: (0x04), line: 815:2
UCSA0 #define, value: (0x0001u), line: 885:2
UCSA1 #define, value: (0x0002u), line: 884:2
UCSA2 #define, value: (0x0004u), line: 883:2
UCSA3 #define, value: (0x0008u), line: 882:2
UCSA4 #define, value: (0x0010u), line: 881:2
UCSA5 #define, value: (0x0020u), line: 880:2
UCSA6 #define, value: (0x0040u), line: 879:2
UCSA7 #define, value: (0x0080u), line: 878:2
UCSA8 #define, value: (0x0100u), line: 877:2
UCSA9 #define, value: (0x0200u), line: 876:2
UCSCLLOW #define, value: (0x40), line: 829:2
UCSLA10 #define, value: (0x40), line: 739:2
UCSPB #define, value: (0x08), line: 727:2
UCSSEL0 #define, value: (0x40), line: 749:2
UCSSEL1 #define, value: (0x80), line: 748:2
UCSSEL_0 #define, value: (0x00), line: 770:2
UCSSEL_1 #define, value: (0x40), line: 771:2
UCSSEL_2 #define, value: (0x80), line: 772:2
UCSSEL_3 #define, value: (0xC0), line: 773:2
UCSTOE #define, value: (0x08), line: 859:2
UCSTPIE #define, value: (0x04), line: 825:2
UCSTPIFG #define, value: (0x04), line: 833:2
UCSTTIE #define, value: (0x02), line: 826:2
UCSTTIFG #define, value: (0x02), line: 834:2
UCSWRST #define, value: (0x01), line: 755:2
UCSYNC #define, value: (0x01), line: 730:2
UCTR #define, value: (0x10), line: 766:2
- 4e-core430G2553 - Page 170
UCTXADDR #define, value: (0x04), line: 753:2
UCTXBRK #define, value: (0x02), line: 754:2
UCTXNACK #define, value: (0x08), line: 767:2
UCTXSTP #define, value: (0x04), line: 768:2
UCTXSTT #define, value: (0x02), line: 769:2
USCIAB0RX_VECTOR #define, value: (7 * 2u), line: 967:2 70:10
USCIAB0TX_VECTOR #define, value: (6 * 2u), line: 966:2
USERFLASHEND #define, value: (0xD7FF), line: 32:3 327 361 381 414
1895:5 142:6
USERFLASHSTART #define, value: (0xC000), line: 31:3 325 359 379 412
205:5 1891:5 142:6
V #define, value: (0x0100u), line: 81:2
W #define, value: R6, line: 47:3 67 69 77 77
82 82 92 93
93 120 121 121
130 131 131 141
143 143 151 151
152 170 172 174
174 191 191 197
197 202 202 206
208 209 209 213
216 217 217 221
224 225 225 230
230 240 240 247
247 254 254 261
261 267 267 274
274 280 280 292
292 298 298 303
303 307 308 310
310 319 320 322
325 327 333 335
340 342 352 359
361 363 364 367
367 373 376 398
404 404 408 409
431 456 469 475
476 479 480 489
489 497 497 503
503 510 510 514
515 516 517 517
522 522 527 527
532 532 537 537
543 543 548 548
553 553 558 558
563 563 568 568
572 575 575 578
579 579 583 587
590 591 591 600
600 607 607 611
612 615 615 623
624 627 627 635
636 663 663 671
671 689 689 702
702 715 715 723
723 731 731 737
737 753 754 761
766 766 778 784
797 797 805 808
809 813 813 821
825 826 830 830
835 839 842 843
847 847 860 863
865 868 870 870
875 878 880 883
885 885 890 894
905 905 947 947
958 958 1659:5 1663:5
1665:5 1665:5 1694:5 1695:5
1696:5 1696:5 1829:5 1829:5
1836:5 1836:5 1843:5 1843:5
1850:5 1850:5 1857:5 1857:5
1867:5 1867:5 1970:5 1970:5
8:7 11:7 17:7 23:7
23:7 29:7 34:7 39:7
39:7 154:9 154:9 250:9
250:9 31:10 31:10 36:10
36:10 55:10 55:10 65:10
65:10
- 4e-core430G2553 - Page 171
WAIT #define, value: (0x0008u), line: 449:2
WDTCNTCL #define, value: (0x0008u), line: 898:2
WDTCTL_ #define, value: (0x0120u), line: 892:2 893:2
WDTHOLD #define, value: (0x0080u), line: 902:2
WDTIE #define, value: (0x01), line: 129:2
WDTIFG #define, value: (0x01), line: 136:2
WDTIS0 #define, value: (0x0001u), line: 895:2
WDTIS1 #define, value: (0x0002u), line: 896:2
WDTNMI #define, value: (0x0020u), line: 900:2
WDTNMIES #define, value: (0x0040u), line: 901:2
WDTPW #define, value: (0x5A00u), line: 904:2
WDTSSEL #define, value: (0x0004u), line: 897:2
WDTTMSEL #define, value: (0x0010u), line: 899:2
WDT_ADLY_1000 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL), line: 913:2
WDT_ADLY_16 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1), line: 915:2
WDT_ADLY_1_9 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0), line: 916:2
WDT_ADLY_250 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTSSEL+WDTIS0), line: 914:2
WDT_ARST_1000 #define, value: (WDTPW+WDTCNTCL+WDTSSEL), line: 924:2
WDT_ARST_16 #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1), line: 926:2
WDT_ARST_1_9 #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS1+WDTIS0), line: 927:2
WDT_ARST_250 #define, value: (WDTPW+WDTCNTCL+WDTSSEL+WDTIS0), line: 925:2
WDT_MDLY_0_064 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1+WDTIS0), line: 911:2
WDT_MDLY_0_5 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS1), line: 910:2
WDT_MDLY_32 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL), line: 908:2
WDT_MDLY_8 #define, value: (WDTPW+WDTTMSEL+WDTCNTCL+WDTIS0), line: 909:2
WDT_MRST_0_064 #define, value: (WDTPW+WDTCNTCL+WDTIS1+WDTIS0), line: 922:2
WDT_MRST_0_5 #define, value: (WDTPW+WDTCNTCL+WDTIS1), line: 921:2
WDT_MRST_32 #define, value: (WDTPW+WDTCNTCL), line: 919:2
WDT_MRST_8 #define, value: (WDTPW+WDTCNTCL+WDTIS0), line: 920:2
WDT_VECTOR #define, value: (10 * 2u), line: 970:2
WRT #define, value: (0x0040u), line: 422:2 396 429 464 16:7
X #define, value: R10, line: 55:3 457 471 472 479
804 806 810 822
825 836 840 841
843 859 861 866
869 874 876 881
884 891 894 896
125:9 125:9 131:9 131:9
140:9 140:9 151:9 151:9
219:9 219:9 228:9 228:9
237:9 237:9 246:9 246:9
XCAP0 #define, value: (0x04), line: 338:2
XCAP1 #define, value: (0x08), line: 339:2
XCAP_0 #define, value: (0x00), line: 345:2
XCAP_1 #define, value: (0x04), line: 346:2
XCAP_2 #define, value: (0x08), line: 347:2
XCAP_3 #define, value: (0x0C), line: 348:2
XT2OF #define, value: (0x02), line: 337:2
XT2OFF #define, value: (0x80), line: 306:2
XT2S0 #define, value: (0x40), line: 342:2
XT2S1 #define, value: (0x80), line: 343:2
XT2S_0 #define, value: (0x00), line: 355:2
XT2S_1 #define, value: (0x40), line: 356:2
XT2S_2 #define, value: (0x80), line: 357:2
XT2S_3 #define, value: (0xC0), line: 358:2
XTS #define, value: (0x40), line: 305:2
Y #define, value: R11, line: 56:3 471 474 475
Z #define, value: (0x0002u), line: 79:2
__430X_CORE__ #define, value: 1, line: 0
__430_CORE__ #define, value: 0, line: 0
__A430__ #define, value: 1, line: 0
__BUILD_NUMBER__ #define, line: 0
__CORE__ #define, value: 0, line: 0
__DATE__ #define, line: 0 49
__FILE__ #define, line: 0
__IAR_SYSTEMS_ASM #define, line: 0
__IAR_SYSTEMS_ASM__ #define, line: 0
__LINE__ #define, line: 0
__MSP430G2553 #define, value: , line: 16:2
__MSP430G2553__ #define, value: 1, line: 0
__MSP430_HAS_ADC10__ #define, value: , line: 161:2
__MSP430_HAS_BC2__ #define, value: , line: 279:2
__MSP430_HAS_CAPLUS__ #define, value: , line: 363:2
__MSP430_HAS_FLASH2__ #define, value: , line: 407:2
__MSP430_HAS_PORT1_R__ #define, value: , line: 458:2
__MSP430_HAS_PORT2_R__ #define, value: , line: 459:2
__MSP430_HAS_PORT3_R__ #define, value: , line: 502:2
__MSP430_HAS_T1A3__ #define, value: , line: 642:2
- 4e-core430G2553 - Page 172
__MSP430_HAS_TA3__ #define, value: , line: 520:2
__MSP430_HAS_USCI__ #define, value: , line: 674:2
__MSP430_HAS_WDT__ #define, value: , line: 890:2
__SUBVERSION__ #define, line: 0
__TID__ #define, line: 0 24:2
__TIME__ #define, line: 0 49
__VER__ #define, line: 0
__msp430 #define, value: , line: 9:1
Segment Type Mode
----------------------------------------
CODE UNTYPED REL
Label Mode Type Segment Value/Offset
------------------------------------------------------------------------------
ABBS REL CONST PUB UNTYP. CODE B5C
ABORT REL CONST PUB UNTYP. CODE 1550
ABORTQUOTE REL CONST PUB UNTYP. CODE 157C
ACC1 REL CONST UNTYP. CODE E2A
ACC3 REL CONST UNTYP. CODE E60
ACC4 REL CONST UNTYP. CODE E6C
ACC5 REL CONST UNTYP. CODE E70
ACCEPT REL CONST PUB UNTYP. CODE E20
ADC10AE0 ABS CONST UNTYP. ASEG 4A
ADC10CTL0 ABS CONST UNTYP. ASEG 1B0
ADC10CTL1 ABS CONST UNTYP. ASEG 1B2
ADC10DTC0 ABS CONST UNTYP. ASEG 48
ADC10DTC1 ABS CONST UNTYP. ASEG 49
ADC10MEM ABS CONST UNTYP. ASEG 1B4
ADC10SA ABS CONST UNTYP. ASEG 1BC
ADRTOIN REL CONST PUB UNTYP. CODE 11D0
AGAIN REL CONST PUB UNTYP. CODE 17E0
ALIGNED REL CONST PUB UNTYP. CODE 85E
ALIGNN REL CONST PUB UNTYP. CODE 844
ALLOT REL CONST PUB UNTYP. CODE 10DE
ANDD REL CONST PUB UNTYP. CODE 412
APP REL CONST PUB UNTYP. CODE A1C
APPCRC REL CONST PUB UNTYP. CODE 1E84
APPU0 REL CONST PUB UNTYP. CODE B28
ATXY REL CONST PUB UNTYP. CODE 1C0A
AppU0 ABS CONST EXT [013] UNTYP. __EXTERNS Solved Extern
BACKSLASH REL CONST PUB UNTYP. CODE 1B7C
BASE REL CONST PUB UNTYP. CODE 9AC
BCSCTL1 ABS CONST UNTYP. ASEG 57
BCSCTL2 ABS CONST UNTYP. ASEG 58
BCSCTL3 ABS CONST UNTYP. ASEG 53
BEGIN REL CONST PUB UNTYP. CODE 17BA
BELL REL CONST PUB UNTYP. CODE 1BC6
BIN REL CONST PUB UNTYP. CODE 1C46
BLANK REL CONST PUB UNTYP. CODE AA8
BOOT REL CONST PUB UNTYP. CODE 1EF0
BOOTIP REL CONST PUB UNTYP. CODE 1EF2
BRACCHAR REL CONST PUB UNTYP. CODE 15C0
BRACTICK REL CONST PUB UNTYP. CODE 1728
BUILDS REL CONST PUB UNTYP. CODE 1618
CACTL1 ABS CONST UNTYP. ASEG 59
CACTL2 ABS CONST UNTYP. ASEG 5A
CALBC1_12MHZ ABS CONST UNTYP. ASEG 10FB
CALBC1_16MHZ ABS CONST UNTYP. ASEG 10F9
CALBC1_1MHZ ABS CONST UNTYP. ASEG 10FF
CALBC1_8MHZ ABS CONST UNTYP. ASEG 10FD
CALDCO_12MHZ ABS CONST UNTYP. ASEG 10FA
CALDCO_16MHZ ABS CONST UNTYP. ASEG 10F8
CALDCO_1MHZ ABS CONST UNTYP. ASEG 10FE
CALDCO_8MHZ ABS CONST UNTYP. ASEG 10FC
CALLL REL CONST PUB UNTYP. CODE 1E32
CAPD ABS CONST UNTYP. ASEG 5B
CAPITALIZE REL CONST PUB UNTYP. CODE 12FC
CAPS REL CONST PUB UNTYP. CODE A28
CAPS1 REL CONST UNTYP. CODE 1312
CAPS2 REL CONST UNTYP. CODE 1320
CCOMMA REL CONST PUB UNTYP. CODE 1102
CCRC REL CONST PUB UNTYP. CODE 1B08
CELL REL CONST PUB UNTYP. CODE 874
CELLPLUS REL CONST PUB UNTYP. CODE 882
CELLS REL CONST PUB UNTYP. CODE 892
CEXIT REL CONST PUB UNTYP. CODE 938
CFETCH REL CONST PUB UNTYP. CODE 236
- 4e-core430G2553 - Page 173
CHARPLUS REL CONST PUB UNTYP. CODE 89E
CHARR REL CONST PUB UNTYP. CODE 15AA
CHARS REL CONST PUB UNTYP. CODE 8AA
CMOVE REL CONST PUB UNTYP. CODE 6EC
CMOVEUP REL CONST PUB UNTYP. CODE 710
CMOVE_1 REL CONST UNTYP. CODE 6F6
CMOVE_X REL CONST UNTYP. CODE 700
CMOVU_1 REL CONST UNTYP. CODE 71E
CMOVU_X REL CONST UNTYP. CODE 72A
CODEADR REL CONST PUB UNTYP. CODE 1E20
CODEE REL CONST PUB UNTYP. CODE 1E02
COLD REL CONST PUB UNTYP. CODE 1F4E
COLDIP REL CONST PUB UNTYP. CODE 1F50
COLON REL CONST PUB UNTYP. CODE 1704
COMMA REL CONST PUB UNTYP. CODE 10EC
COMMABRANCH REL CONST PUB UNTYP. CODE 94E
COMMACALL REL CONST PUB UNTYP. CODE 8F4
COMMACF REL CONST PUB UNTYP. CODE 8DC
COMMADEST REL CONST PUB UNTYP. CODE 95C
COMMAJMP REL CONST PUB UNTYP. CODE 908
COMMANONE REL CONST PUB UNTYP. CODE 986
COMMAXT REL CONST PUB UNTYP. CODE 8C4
CONSTANT REL CONST PUB UNTYP. CODE 90
COR REL CONST PUB UNTYP. CODE AF0
CORPOWERON ABS CONST UNTYP. CODE 186
CORREST ABS CONST UNTYP. CODE 18E
COUNT REL CONST PUB UNTYP. CODE D44
CR REL CONST PUB UNTYP. CODE D6E
CRC REL CONST PUB UNTYP. CODE 1B2C
CREATE REL CONST PUB UNTYP. CODE 162E
CSTORE REL CONST PUB UNTYP. CODE 244
CamelForthEnd REL CONST UNTYP. CODE 228E
DABS REL CONST PUB UNTYP. CODE BA2
DCOCTL ABS CONST UNTYP. ASEG 56
DDP REL CONST PUB UNTYP. CODE 9C4
DECIMAL REL CONST PUB UNTYP. CODE 10A4
DEPTH REL CONST PUB UNTYP. CODE 190A
DIGITQ REL CONST PUB UNTYP. CODE 134C
DIV1 REL CONST UNTYP. CODE 69A
DIV2 REL CONST UNTYP. CODE 6A0
DIV3 REL CONST UNTYP. CODE 6B4
DIV4 REL CONST UNTYP. CODE 6B6
DIVIDE REL CONST UNTYP. CODE 694
DNEG1 REL CONST UNTYP. CODE B98
DNEGATE REL CONST PUB UNTYP. CODE B70
DO REL CONST PUB UNTYP. CODE 1844
DOALIAS REL CONST PUB UNTYP. CODE D0
DOCODE REL CONST UNTYP. CODE Not solved
DOCOLON REL CONST PUB UNTYP. CODE 66
DOCON REL CONST PUB UNTYP. CODE 98
DOCR REL CONST PUB UNTYP. CODE D58
DOEMIT REL CONST PUB UNTYP. CODE 7C0
DOES REL CONST PUB UNTYP. CODE 1662
DOKEY REL CONST PUB UNTYP. CODE 7DC
DOROM REL CONST PUB UNTYP. CODE A4
DOT REL CONST PUB UNTYP. CODE 1080
DOTBOOTVERSION REL CONST PUB UNTYP. CODE 1E4A
DOTCOLD REL CONST PUB UNTYP. CODE 1F38
DOTERRN REL CONST PUB UNTYP. CODE DE2
DOTQUOTE REL CONST PUB UNTYP. CODE F4C
DOTS REL CONST PUB UNTYP. CODE 1AC8
DOTS1 REL CONST UNTYP. CODE 1AF8
DOTS2 REL CONST UNTYP. CODE 1B06
DOTSTATUS REL CONST PUB UNTYP. CODE 14D8
DOTVER REL CONST PUB UNTYP. CODE 1B90
DOTWOCON REL CONST PUB UNTYP. CODE 1B66
DOUSER REL CONST PUB UNTYP. CODE C0
DOVAR REL CONST PUB UNTYP. CODE 98
DROP REL CONST PUB UNTYP. CODE 116
DTOI REL CONST PUB UNTYP. CODE 370
DTOI_BYTE REL CONST UNTYP. CODE 3A4
DTOI_END REL CONST UNTYP. CODE 3AA
DTOI_LOOP REL CONST UNTYP. CODE 37A
DTOI_WORD REL CONST UNTYP. CODE 392
DTOI_X REL CONST UNTYP. CODE 3BC
DUMP REL CONST PUB UNTYP. CODE 1A5C
DUP REL CONST PUB UNTYP. CODE F0
ELSS REL CONST PUB UNTYP. CODE 179E
- 4e-core430G2553 - Page 174
EMIT REL CONST PUB UNTYP. CODE 80C
EMITLOOPx REL CONST UNTYP. CODE 7C2
ENDCODE REL CONST PUB UNTYP. CODE 1E46
ENDLOOP REL CONST PUB UNTYP. CODE 1860
ENVIRONMENTQ REL CONST PUB UNTYP. CODE 1928
EQUAL REL CONST PUB UNTYP. CODE 50E
ESC0 REL CONST UNTYP. CODE 1C31
ESC1 REL CONST UNTYP. CODE 1C34
ESCPAR REL CONST PUB UNTYP. CODE 1BD0
EVALUATE REL CONST PUB UNTYP. CODE 14B6
EXECUTE REL CONST PUB UNTYP. CODE 38
EXIT REL CONST PUB UNTYP. CODE 5E
FACTORY REL CONST PUB UNTYP. CODE 1F76
FACTORYIP REL CONST PUB UNTYP. CODE 1F78
FALSE REL CONST PUB UNTYP. CODE 1C68
FCTL1 ABS CONST UNTYP. ASEG 128
FCTL2 ABS CONST UNTYP. ASEG 12A
FCTL3 ABS CONST UNTYP. ASEG 12C
FETCH REL CONST PUB UNTYP. CODE 216
FILL REL CONST PUB UNTYP. CODE 6C8
FILL_1 REL CONST UNTYP. CODE 6D2
FILL_X REL CONST UNTYP. CODE 6DC
FIND REL CONST PUB UNTYP. CODE 129C
FIND1 REL CONST UNTYP. CODE 12A2
FIND2 REL CONST UNTYP. CODE 12BA
FIND3 REL CONST UNTYP. CODE 12D8
FLALIGNED REL CONST PUB UNTYP. CODE 194A
FLERASE REL CONST PUB UNTYP. CODE 25E
FLE_1 REL CONST UNTYP. CODE 264
FLE_INFO REL CONST UNTYP. CODE 280
FLE_OK REL CONST UNTYP. CODE 28C
FLE_VEC REL CONST UNTYP. CODE 274
FLE_X REL CONST UNTYP. CODE 2C4
FL_INFO REL CONST UNTYP. CODE 2BE
FMMOD1 REL CONST UNTYP. CODE C26
FMSLASHMOD REL CONST PUB UNTYP. CODE C00
FORTHPRO REL CONST PUB UNTYP. CODE 1FAC
GREATER REL CONST PUB UNTYP. CODE 544
HEADR REL CONST PUB UNTYP. CODE 15EA
HERE REL CONST PUB UNTYP. CODE 10CC
HEX REL CONST PUB UNTYP. CODE 10B8
HIDE REL CONST PUB UNTYP. CODE 16B4
HOLD REL CONST PUB UNTYP. CODE FC4
HP REL CONST PUB UNTYP. CODE 9EC
IALLOT REL CONST PUB UNTYP. CODE 112E
ICCOMMA REL CONST PUB UNTYP. CODE 1154
ICOMMA REL CONST PUB UNTYP. CODE 113C
ICSTORE REL CONST PUB UNTYP. CODE 324
ICST_INFO REL CONST UNTYP. CODE 338
ICST_OK REL CONST UNTYP. CODE 344
ICST_RAM REL CONST UNTYP. CODE 354
IDP REL CONST PUB UNTYP. CODE A02
IE1 ABS CONST UNTYP. ASEG 0
IE2 ABS CONST UNTYP. ASEG 1
IFF REL CONST PUB UNTYP. CODE 1776
IFG1 ABS CONST UNTYP. ASEG 2
IFG2 ABS CONST UNTYP. ASEG 3
IHERE REL CONST PUB UNTYP. CODE 111C
II REL CONST PUB UNTYP. CODE 61A
IMMEDIATE REL CONST PUB UNTYP. CODE 16EE
IMMEDQ REL CONST PUB UNTYP. CODE 1284
INFOB REL CONST PUB UNTYP. CODE AFE
INFOC REL CONST PUB UNTYP. CODE B0C
INFOD REL CONST PUB UNTYP. CODE B1A
INTER1 REL CONST UNTYP. CODE 1450
INTER2 REL CONST UNTYP. CODE 147C
INTER3 REL CONST UNTYP. CODE 147E
INTER4 REL CONST UNTYP. CODE 1482
INTER5 REL CONST UNTYP. CODE 148E
INTER6 REL CONST UNTYP. CODE 14A2
INTER8 REL CONST UNTYP. CODE 14A2
INTER9 REL CONST UNTYP. CODE 14A6
INTERPRET REL CONST PUB UNTYP. CODE 1444
INTERRUPT REL CONST PUB UNTYP. CODE 2114
INVERT REL CONST PUB UNTYP. CODE 442
IRXOFF REL CONST PUB UNTYP. CODE 222A
IRXON REL CONST PUB UNTYP. CODE 2216
ISQUOTE REL CONST PUB UNTYP. CODE EF2
- 4e-core430G2553 - Page 175
ISTORE REL CONST PUB UNTYP. CODE 2D0
IST_INFO REL CONST UNTYP. CODE 2E8
IST_OK REL CONST UNTYP. CODE 2F4
IST_RAM REL CONST UNTYP. CODE 304
IST_X REL CONST UNTYP. CODE 316
IST_X2 REL CONST UNTYP. CODE 2028
ITHERE REL CONST PUB UNTYP. CODE 1E64
ITOD REL CONST PUB UNTYP. CODE 738
IWORD REL CONST PUB UNTYP. CODE F62
IWORD1 REL CONST UNTYP. CODE F66
IWORDC REL CONST PUB UNTYP. CODE F74
JJ REL CONST PUB UNTYP. CODE 630
KEY REL CONST PUB UNTYP. CODE 7FA
KEYLOOPx REL CONST UNTYP. CODE 7DE
KEYQ REL CONST PUB UNTYP. CODE 81E
L$002 REL CONST UNTYP. CODE 66A
L$01 REL CONST UNTYP. CODE 672
L0 REL CONST PUB UNTYP. CODE A6E
LATEST REL CONST PUB UNTYP. CODE 9E2
LDUMP1 REL CONST UNTYP. CODE 1A66
LDUMP2 REL CONST UNTYP. CODE 1A80
LDUMP3 REL CONST UNTYP. CODE 1A9E
LEAV REL CONST PUB UNTYP. CODE 18A6
LEFTBRACKET REL CONST PUB UNTYP. CODE 1690
LESS REL CONST PUB UNTYP. CODE 530
LESSNUM REL CONST PUB UNTYP. CODE FDC
LFROM REL CONST PUB UNTYP. CODE 182C
LITER1 REL CONST UNTYP. CODE 1340
LITERAL REL CONST PUB UNTYP. CODE 132E
LOO REL CONST PUB UNTYP. CODE 187E
LOOP1 REL CONST UNTYP. CODE 1866
LOOP2 REL CONST UNTYP. CODE 1874
LP REL CONST PUB UNTYP. CODE 9F6
LPM_WAKE REL CONST PUB UNTYP. CODE 2240
LSHIFT REL CONST PUB UNTYP. CODE 4AE
LSH_1 REL CONST UNTYP. CODE 4B8
LSH_X REL CONST UNTYP. CODE 4BE
LSTACK ABS CONST EXT [003] UNTYP. __EXTERNS Solved Extern
MACU REL CONST UNTYP. CODE 666
MARKER REL CONST PUB UNTYP. CODE 1968
MAX REL CONST PUB UNTYP. CODE C98
MAX1 REL CONST UNTYP. CODE CA4
MCLK ABS CONST UNTYP. CODE 8
MEM REL CONST PUB UNTYP. CODE 1D84
MEMBOT REL CONST PUB UNTYP. CODE 1D6A
MEMTOP REL CONST PUB UNTYP. CODE 1D78
MIN REL CONST PUB UNTYP. CODE CB0
MIN1 REL CONST UNTYP. CODE CBC
MINUS REL CONST PUB UNTYP. CODE 3FE
MODD REL CONST PUB UNTYP. CODE C64
MOVE REL CONST PUB UNTYP. CODE 18DE
MOVE1 REL CONST UNTYP. CODE 18FA
MOVE2 REL CONST UNTYP. CODE 18FE
MPLUS REL CONST PUB UNTYP. CODE 3E8
MPYU REL CONST UNTYP. CODE 662
MS REL CONST PUB UNTYP. CODE 1CB4
MSTAR REL CONST PUB UNTYP. CODE BB0
NEGATE REL CONST PUB UNTYP. CODE 454
NEQUAL REL CONST PUB UNTYP. CODE 7B4
NEWEST REL CONST PUB UNTYP. CODE A10
NEWLINE REL CONST PUB UNTYP. CODE A58
NFATOCFA REL CONST PUB UNTYP. CODE 126A
NFATOLFA REL CONST PUB UNTYP. CODE 1254
NINIT REL CONST PUB UNTYP. CODE AE4
NIP REL CONST PUB UNTYP. CODE 170
NODUP REL CONST UNTYP. CODE 10A
NOOP REL CONST PUB UNTYP. CODE 1938
NOTEQUAL REL CONST PUB UNTYP. CODE 522
NUM REL CONST PUB UNTYP. CODE 1010
NUMGREATER REL CONST PUB UNTYP. CODE 103C
NUMS REL CONST PUB UNTYP. CODE 1026
NUMS1 REL CONST UNTYP. CODE 1028
ONEMINUS REL CONST PUB UNTYP. CODE 472
ONEMS REL CONST PUB UNTYP. CODE 1C92
ONEPLUS REL CONST PUB UNTYP. CODE 464
ORR REL CONST PUB UNTYP. CODE 420
OVER REL CONST PUB UNTYP. CODE 13C
OWNONE REL CONST UNTYP. CODE 21A8
- 4e-core430G2553 - Page 176
OWRECV0 REL CONST UNTYP. CODE 21F2
OWRESET REL CONST PUB UNTYP. CODE 2168
OWSEND0 REL CONST UNTYP. CODE 21E0
OWSLOT REL CONST PUB UNTYP. CODE 21C0
P1 REL CONST PUB UNTYP. CODE 1DE2
P1DIR ABS CONST UNTYP. ASEG 22
P1IE ABS CONST UNTYP. ASEG 25
P1IES ABS CONST UNTYP. ASEG 24
P1IFG ABS CONST UNTYP. ASEG 23
P1IN ABS CONST UNTYP. ASEG 20
P1OUT ABS CONST UNTYP. ASEG 21
P1REN ABS CONST UNTYP. ASEG 27
P1SEL ABS CONST UNTYP. ASEG 26
P1SEL2 ABS CONST UNTYP. ASEG 41
P2 REL CONST PUB UNTYP. CODE 1DEC
P2DIR ABS CONST UNTYP. ASEG 2A
P2IE ABS CONST UNTYP. ASEG 2D
P2IES ABS CONST UNTYP. ASEG 2C
P2IFG ABS CONST UNTYP. ASEG 2B
P2IN ABS CONST UNTYP. ASEG 28
P2OUT ABS CONST UNTYP. ASEG 29
P2REN ABS CONST UNTYP. ASEG 2F
P2SEL ABS CONST UNTYP. ASEG 2E
P2SEL2 ABS CONST UNTYP. ASEG 42
P3 REL CONST PUB UNTYP. CODE 1DF6
P3DIR ABS CONST UNTYP. ASEG 1A
P3IN ABS CONST UNTYP. ASEG 18
P3OUT ABS CONST UNTYP. ASEG 19
P3REN ABS CONST UNTYP. ASEG 10
P3SEL ABS CONST UNTYP. ASEG 1B
P3SEL2 ABS CONST UNTYP. ASEG 43
PAD REL CONST PUB UNTYP. CODE A64
PADAREA ABS CONST EXT [002] UNTYP. __EXTERNS Solved Extern
PAGEE REL CONST PUB UNTYP. CODE 1C2A
PAREN REL CONST PUB UNTYP. CODE 15D4
PARENUDOTR REL CONST PUB UNTYP. CODE 19F6
PARENVECWIPE REL CONST PUB UNTYP. CODE 203C
PARENWIPE REL CONST PUB UNTYP. CODE 1FD8
PARSE REL CONST PUB UNTYP. CODE 11F2
PARSE1 REL CONST UNTYP. CODE 120E
PLUS REL CONST PUB UNTYP. CODE 3C8
PLUSLOOP REL CONST PUB UNTYP. CODE 1892
PLUSSTORE REL CONST PUB UNTYP. CODE 3D6
PN REL CONST PUB UNTYP. CODE 1BE0
POST1 REL CONST UNTYP. CODE 176C
POST2 REL CONST UNTYP. CODE 176E
POSTPONE REL CONST PUB UNTYP. CODE 1742
PROFUSE REL CONST UNTYP. CODE 0
PROFUSEADR REL CONST PUB UNTYP. CODE 1F9C
PROMPT REL CONST PUB UNTYP. CODE 14E4
PROMPT1 REL CONST UNTYP. CODE 1516
PSTACK ABS CONST EXT [004] UNTYP. __EXTERNS Solved Extern
PUSHTOS REL CONST UNTYP. CODE F2
QABO1 REL CONST UNTYP. CODE 156E
QABORT REL CONST PUB UNTYP. CODE 1562
QDNEGATE REL CONST PUB UNTYP. CODE B8E
QDUP REL CONST PUB UNTYP. CODE 104
QNEG1 REL CONST UNTYP. CODE B52
QNEGATE REL CONST PUB UNTYP. CODE B48
QNUM1 REL CONST UNTYP. CODE 1424
QNUM2 REL CONST UNTYP. CODE 1430
QNUM3 REL CONST UNTYP. CODE 1434
QNUMBER REL CONST PUB UNTYP. CODE 1400
QQ REL CONST PUB UNTYP. CODE 1DD4
QSIGN REL CONST PUB UNTYP. CODE 1388
QSIGN1 REL CONST UNTYP. CODE 13B2
QSTACK REL CONST PUB UNTYP. CODE 116E
QTIB REL CONST PUB UNTYP. CODE E02
QTIB1 REL CONST UNTYP. CODE E14
QUIT REL CONST PUB UNTYP. CODE 1520
QUIT1 REL CONST UNTYP. CODE 1532
QUITIP REL CONST PUB UNTYP. CODE 1522
RAMDICT ABS CONST EXT [007] UNTYP. __EXTERNS Solved Extern
RECURSE REL CONST PUB UNTYP. CODE 167E
REPEAT REL CONST PUB UNTYP. CODE 1808
RESETADR REL CONST PUB UNTYP. CODE 1D5C
REVEAL REL CONST PUB UNTYP. CODE 16D4
RFETCH REL CONST PUB UNTYP. CODE 1A2
- 4e-core430G2553 - Page 177
RFROM REL CONST PUB UNTYP. CODE 18E
RIGHTBRACKET REL CONST PUB UNTYP. CODE 16A0
RLAA REL CONST PUB UNTYP. CODE 572
ROMDICT ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern
ROT REL CONST PUB UNTYP. CODE 154
RPFETCH REL CONST PUB UNTYP. CODE 1E0
RPSTORE REL CONST PUB UNTYP. CODE 1F6
RSHIFT REL CONST PUB UNTYP. CODE 4CE
RSH_1 REL CONST UNTYP. CODE 4D8
RSH_X REL CONST UNTYP. CODE 4E0
RSTACK ABS CONST EXT [005] UNTYP. __EXTERNS Solved Extern
RZERO REL CONST PUB UNTYP. CODE A78
S0 REL CONST PUB UNTYP. CODE A82
S2 REL CONST PUB UNTYP. CODE 2144
SAVE REL CONST PUB UNTYP. CODE 1EB2
SCAN REL CONST PUB UNTYP. CODE 768
SCAN_1 REL CONST UNTYP. CODE 772
SCAN_X REL CONST UNTYP. CODE 77C
SEMICOLON REL CONST PUB UNTYP. CODE 1716
SEMIPN REL CONST PUB UNTYP. CODE 1BF4
SEQUAL REL CONST PUB UNTYP. CODE 78C
SEQU_1 REL CONST UNTYP. CODE 796
SEQU_X REL CONST UNTYP. CODE 7AA
SETIRX REL CONST PUB UNTYP. CODE 2282
SIGN REL CONST PUB UNTYP. CODE 1054
SIGN1 REL CONST UNTYP. CODE 1062
SKIP REL CONST PUB UNTYP. CODE 742
SKIP_1 REL CONST UNTYP. CODE 74C
SKIP_X REL CONST UNTYP. CODE 756
SLASH REL CONST PUB UNTYP. CODE C54
SLASHMOD REL CONST PUB UNTYP. CODE C42
SLASHSTRING REL CONST PUB UNTYP. CODE 119C
SMISMATCH REL CONST UNTYP. CODE 7A4
SMSLASHREM REL CONST PUB UNTYP. CODE BD2
SOURCE REL CONST PUB UNTYP. CODE 1188
SPACE REL CONST PUB UNTYP. CODE D82
SPACES REL CONST PUB UNTYP. CODE D94
SPCS1 REL CONST UNTYP. CODE D96
SPCS2 REL CONST UNTYP. CODE DA4
SPFETCH REL CONST PUB UNTYP. CODE 1B8
SPSTORE REL CONST PUB UNTYP. CODE 1CE
SQEST REL CONST PUB UNTYP. CODE 2152
SQUOTE REL CONST PUB UNTYP. CODE F1A
SSMOD REL CONST PUB UNTYP. CODE C76
STAR REL CONST PUB UNTYP. CODE C32
STARSLASH REL CONST PUB UNTYP. CODE C88
STATE REL CONST PUB UNTYP. CODE 9BA
STOD REL CONST PUB UNTYP. CODE B34
STORCOLON REL CONST PUB UNTYP. CODE 91E
STORE REL CONST PUB UNTYP. CODE 224
STORECF REL CONST PUB UNTYP. CODE 8D0
STOREDEST REL CONST PUB UNTYP. CODE 970
SWAP REL CONST PUB UNTYP. CODE 126
SWAPBYTES REL CONST PUB UNTYP. CODE 480
TA0CCR0 ABS CONST UNTYP. ASEG 172
TA0CCR1 ABS CONST UNTYP. ASEG 174
TA0CCR2 ABS CONST UNTYP. ASEG 176
TA0CCTL0 ABS CONST UNTYP. ASEG 162
TA0CCTL1 ABS CONST UNTYP. ASEG 164
TA0CCTL2 ABS CONST UNTYP. ASEG 166
TA0CTL ABS CONST UNTYP. ASEG 160
TA0IV ABS CONST UNTYP. ASEG 12E
TA0R ABS CONST UNTYP. ASEG 170
TA1CCR0 ABS CONST UNTYP. ASEG 192
TA1CCR1 ABS CONST UNTYP. ASEG 194
TA1CCR2 ABS CONST UNTYP. ASEG 196
TA1CCTL0 ABS CONST UNTYP. ASEG 182
TA1CCTL1 ABS CONST UNTYP. ASEG 184
TA1CCTL2 ABS CONST UNTYP. ASEG 186
TA1CTL ABS CONST UNTYP. ASEG 180
TA1IV ABS CONST UNTYP. ASEG 11E
TA1R ABS CONST UNTYP. ASEG 190
TABLE REL CONST PUB UNTYP. CODE 1C76
THEN REL CONST PUB UNTYP. CODE 178C
TIB REL CONST PUB UNTYP. CODE A8E
TIBAREA ABS CONST EXT [006] UNTYP. __EXTERNS Solved Extern
TIBSIZE REL CONST PUB UNTYP. CODE A9E
TIB_SIZE ABS CONST EXT [008] UNTYP. __EXTERNS Solved Extern
- 4e-core430G2553 - Page 178
TICK REL CONST PUB UNTYP. CODE 158E
TICKSOURCE REL CONST PUB UNTYP. CODE 9D4
TOBODY REL CONST PUB UNTYP. CODE 8B6
TOCOUNTED REL CONST PUB UNTYP. CODE 11B8
TODIGIT REL CONST PUB UNTYP. CODE FF0
TOIN REL CONST PUB UNTYP. CODE 9A0
TOL REL CONST PUB UNTYP. CODE 1816
TONUM1 REL CONST UNTYP. CODE 13C2
TONUM2 REL CONST UNTYP. CODE 13D8
TONUM3 REL CONST UNTYP. CODE 13F2
TONUMBER REL CONST PUB UNTYP. CODE 13C0
TOPSEG REL CONST PUB UNTYP. CODE 1DBC
TOR REL CONST PUB UNTYP. CODE 17E
TOSFALSE REL CONST UNTYP. CODE 516
TOSTRUE REL CONST UNTYP. CODE 538
TRUE REL CONST PUB UNTYP. CODE 1C5A
TUCK REL CONST PUB UNTYP. CODE 208
TWOCONSTANT REL CONST PUB UNTYP. CODE 1B5C
TWODROP REL CONST PUB UNTYP. CODE CF2
TWODUP REL CONST PUB UNTYP. CODE D02
TWOFETCH REL CONST PUB UNTYP. CODE CC6
TWOOVER REL CONST PUB UNTYP. CODE D2A
TWOSLASH REL CONST PUB UNTYP. CODE 49C
TWOSTAR REL CONST PUB UNTYP. CODE 48E
TWOSTORE REL CONST PUB UNTYP. CODE CDA
TWOSWAP REL CONST PUB UNTYP. CODE D14
TYP REL CONST PUB UNTYP. CODE E82
TYP3 REL CONST UNTYP. CODE E92
TYP4 REL CONST UNTYP. CODE EA0
TYP5 REL CONST UNTYP. CODE EA2
U0 REL CONST PUB UNTYP. CODE 994
UAREA ABS CONST EXT [001] UNTYP. __EXTERNS Solved Extern
UAREA_SIZE ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern
UCA0ABCTL ABS CONST UNTYP. ASEG 5D
UCA0BR0 ABS CONST UNTYP. ASEG 62
UCA0BR1 ABS CONST UNTYP. ASEG 63
UCA0CTL0 ABS CONST UNTYP. ASEG 60
UCA0CTL1 ABS CONST UNTYP. ASEG 61
UCA0IRRCTL ABS CONST UNTYP. ASEG 5F
UCA0IRTCTL ABS CONST UNTYP. ASEG 5E
UCA0MCTL ABS CONST UNTYP. ASEG 64
UCA0RXBUF ABS CONST UNTYP. ASEG 66
UCA0STAT ABS CONST UNTYP. ASEG 65
UCA0TXBUF ABS CONST UNTYP. ASEG 67
UCB0BR0 ABS CONST UNTYP. ASEG 6A
UCB0BR1 ABS CONST UNTYP. ASEG 6B
UCB0CTL0 ABS CONST UNTYP. ASEG 68
UCB0CTL1 ABS CONST UNTYP. ASEG 69
UCB0I2CIE ABS CONST UNTYP. ASEG 6C
UCB0I2COA ABS CONST UNTYP. ASEG 118
UCB0I2CSA ABS CONST UNTYP. ASEG 11A
UCB0RXBUF ABS CONST UNTYP. ASEG 6E
UCB0STAT ABS CONST UNTYP. ASEG 6D
UCB0TXBUF ABS CONST UNTYP. ASEG 6F
UDOT REL CONST PUB UNTYP. CODE 106A
UDOTR REL CONST PUB UNTYP. CODE 1A16
UDSLASHMOD REL CONST PUB UNTYP. CODE F88
UDSTAR REL CONST PUB UNTYP. CODE FA6
UGREATER REL CONST PUB UNTYP. CODE 562
UINIT REL CONST PUB UNTYP. CODE AB6
ULESS REL CONST PUB UNTYP. CODE 552
UMAX REL CONST PUB UNTYP. CODE DC8
UMAX1 REL CONST UNTYP. CODE DD4
UMIN REL CONST PUB UNTYP. CODE DB0
UMIN1 REL CONST UNTYP. CODE DBC
UMSLASHMOD REL CONST PUB UNTYP. CODE 68E
UMSTAR REL CONST PUB UNTYP. CODE 65E
UNLOOP REL CONST PUB UNTYP. CODE 64C
UNTIL REL CONST PUB UNTYP. CODE 17CA
UNUSED REL CONST PUB UNTYP. CODE 1D98
UP ABS CONST EXT [000] UNTYP. __EXTERNS Solved Extern
UPC REL CONST PUB UNTYP. CODE 12DA
UPC1 REL CONST UNTYP. CODE 12F4
USER REL CONST PUB UNTYP. CODE B8
USEREMIT REL CONST PUB UNTYP. CODE A48
USERKEY REL CONST PUB UNTYP. CODE A38
VALIDQ REL CONST PUB UNTYP. CODE 1E9C
VARAREA ABS CONST EXT [009] UNTYP. __EXTERNS Solved Extern
- 4e-core430G2553 - Page 179
VARBOT REL CONST PUB UNTYP. CODE 1DAE
VARIABLE REL CONST PUB UNTYP. CODE 7A
VAR_SIZE ABS CONST EXT [010] UNTYP. __EXTERNS Solved Extern
VECBACK REL CONST PUB UNTYP. CODE 20D0
VECBOT REL CONST PUB UNTYP. CODE 1DCA
VECRESTORE REL CONST PUB UNTYP. CODE 20B4
VECSAVE REL CONST PUB UNTYP. CODE 2090
VECSTORE REL CONST PUB UNTYP. CODE 1FFA
VECWIPE REL CONST PUB UNTYP. CODE 2076
WARM REL CONST PUB UNTYP. CODE 1F2A
WDS1 REL CONST UNTYP. CODE 19C4
WDS2 REL CONST UNTYP. CODE 19D8
WDS3 REL CONST UNTYP. CODE 19F2
WDTCTL ABS CONST UNTYP. ASEG 120
WHILE REL CONST PUB UNTYP. CODE 17F6
WIPE REL CONST PUB UNTYP. CODE 1FC0
WITHIN REL CONST PUB UNTYP. CODE 18C6
WORDD REL CONST PUB UNTYP. CODE 1220
WORDS REL CONST PUB UNTYP. CODE 19BE
XDOES REL CONST PUB UNTYP. CODE 164A
XISQUOTE REL CONST PUB UNTYP. CODE EAE
XORR REL CONST PUB UNTYP. CODE 430
XSQUOTE REL CONST PUB UNTYP. CODE EC6
ZERO REL CONST PUB UNTYP. CODE 836
ZEROEQUAL REL CONST PUB UNTYP. CODE 4EC
ZEROLESS REL CONST PUB UNTYP. CODE 4FC
ZEROS REL CONST PUB UNTYP. CODE 1A3C
ZEROS1 REL CONST UNTYP. CODE 1A3E
ZEROS2 REL CONST UNTYP. CODE 1A50
ZEROUDOTR REL CONST PUB UNTYP. CODE 1A28
__MSP430G2203__ ABS CONST UNTYP. ASEG Not solved
abort1 REL CONST UNTYP. CODE 1552
boot1 REL CONST UNTYP. CODE 1F20
bran REL CONST PUB UNTYP. CODE 58E
cclr REL CONST PUB UNTYP. CODE 1D0C
ccrc1 REL CONST UNTYP. CODE 1B14
ccrc2 REL CONST UNTYP. CODE 1B1C
cget REL CONST PUB UNTYP. CODE 1D3C
cget1 REL CONST UNTYP. CODE 1D48
cget2 REL CONST UNTYP. CODE 1D4A
cor ABS CONST EXT [011] UNTYP. __EXTERNS Solved Extern
crcval ABS CONST EXT [018] UNTYP. __EXTERNS Solved Extern
cset REL CONST PUB UNTYP. CODE 1CE0
ctoggle REL CONST PUB UNTYP. CODE 1D26
doboot0 REL CONST UNTYP. CODE 1E4F
doboot1 REL CONST UNTYP. CODE 1E56
dobran REL CONST UNTYP. CODE 590
docreate REL CONST PUB UNTYP. CODE 98
dodoes REL CONST PUB UNTYP. CODE D4
donext REL CONST UNTYP. CODE 7EE
donoop REL CONST UNTYP. CODE 7EE
dotcold0 REL CONST UNTYP. CODE 1F3D
dotcold1 REL CONST UNTYP. CODE 1F42
green REL CONST PUB UNTYP. CODE 2138
ih1 REL CONST UNTYP. CODE 1E68
infoB ABS CONST EXT [012] UNTYP. __EXTERNS Solved Extern
infoC ABS CONST EXT [014] UNTYP. __EXTERNS Solved Extern
infoD ABS CONST EXT [015] UNTYP. __EXTERNS Solved Extern
intseg ABS CONST EXT [016] UNTYP. __EXTERNS Solved Extern
intvecs ABS CONST EXT [017] UNTYP. __EXTERNS Solved Extern
invalid REL CONST UNTYP. CODE 1F02
lastword REL CONST PUB UNTYP. CODE 227B
link REL VAR UNTYP. CODE 227B
lit REL CONST PUB UNTYP. CODE 48
lpm_wake REL CONST UNTYP. CODE 2244
ms1 REL CONST UNTYP. CODE 1CBA
nullirq ABS CONST EXT [-001] UNTYP. __EXTERNS Solved Extern
onems1 REL CONST UNTYP. CODE 1C9C
onems2 REL CONST UNTYP. CODE 1CA4
pcrc1 REL CONST UNTYP. CODE 1B3C
pcrc2 REL CONST UNTYP. CODE 1B4A
pcrc3 REL CONST UNTYP. CODE 1B4C
qbran REL CONST PUB UNTYP. CODE 5A2
red REL CONST PUB UNTYP. CODE 2128
reset ABS CONST EXT [020] UNTYP. __EXTERNS Solved Extern
reset1 REL CONST UNTYP. CODE 1F10
resetvec REL CONST EXT [019] UNTYP. CODE Solved Extern
setlpm0 REL CONST PUB UNTYP. CODE 226A
- 4e-core430G2553 - Page 180
setlpm4 REL CONST PUB UNTYP. CODE 2254
stamp REL CONST UNTYP. CODE 16
stamp0 REL CONST UNTYP. CODE 17
stampend REL CONST UNTYP. CODE 2D
uareasize ABS CONST UNTYP. CODE 22
uinitend REL CONST UNTYP. CODE ADA
uinitstart REL CONST UNTYP. CODE AB8
valid REL CONST UNTYP. CODE 1F00
vback1 REL CONST UNTYP. CODE 20DA
vback2 REL CONST UNTYP. CODE 20FC
ver0 REL CONST UNTYP. CODE 3
verend REL CONST UNTYP. CODE 16
version REL CONST UNTYP. CODE 2
warm0 REL CONST UNTYP. CODE 1F2F
warm1 REL CONST UNTYP. CODE 1F34
wclr REL CONST PUB UNTYP. CODE 1CF6
wipe1 REL CONST UNTYP. CODE 1FCC
wipmsg0 REL CONST UNTYP. CODE 1FE7
wipmsg1 REL CONST UNTYP. CODE 1FEE
wset REL CONST PUB UNTYP. CODE 1CCA
xdo REL CONST PUB UNTYP. CODE 5B8
xloop REL CONST PUB UNTYP. CODE 5DE
xplusloop REL CONST PUB UNTYP. CODE 5FE
##############################
# CRC:6EB7 #
# Errors: 0 #
# Warnings: 0 #
# Bytes: 8846 #
##############################